WhereToLive London open data
Server Details
London postcodes and districts from official open data: prices, crime, schools, rents, commutes
- Status
- Healthy
- Last Tested
- Transport
- Streamable HTTP · MCP 2025-11-25
- URL
TDQS
Scored across 7 tools
Most tools target clearly distinct actions (single-postcode facts, district profile, commute lookup, side-by-side compare, criteria screen, ranking). The one real hazard is the near-identical pair find_london_district (resolve a name to districts) vs find_london_districts (screen districts on criteria), which differ by a single 's'/plural and could easily be misselected despite the descriptions explicitly cross-referencing each other. compare_london_districts and rank_london_districts also sit close together, but ranking-by-one-measure vs comparing-a-fixed-list is workable.
All seven tools use a consistent snake_case verb_noun pattern with a sensible verb set (check, compare, find, get, rank). The deviation is the singular/plural pair find_london_district vs find_london_districts, which signals different behavior only through a single character and undermines predictability.
Seven tools is well-scoped for an open-data London district server, and each tool has a defensible distinct job: discovery, screening, ranking, comparison, profiling, commute lookup and postcode-level detail. No tool feels redundant or padded.
The surface covers the natural lifecycle of 'find a place, screen it, compare it, rank it, inspect its details and commute'. Minor gaps remain: there is no plain list/enumerate-all-districts operation (only ranked or criteria-filtered retrieval), no standalone tool to enumerate valid work hubs or schools, and no dataset-level metadata/lookup beyond what is embedded in other tools. These are workable gaps rather than dead ends.
Available Tools
7 toolscheck_london_postcodeCheck a London postcodeBRead-onlyIdempotentInspect
Open-data facts at one full London postcode (e.g. "E17 4QH"): the Environment Agency flood zone at its centre; whether its centre is inside a conservation area, listed building outline, Article 4 direction area or tree preservation order area (planning.data.gov.uk, with "unknown" where the borough publishes no data); its Census neighbourhood's police.uk crime rate per 1,000 residents against London, Index of Multiple Deprivation decile and housing tenure; the nearest state schools with their own Ofsted grade and the nearest stations, by straight-line distance; door-to-door commute minutes from its postcode sector to 12 work hubs; council tax bands for its borough; and its district page. Every block says which area it describes; a single home can differ.
| Name | Required | Description | Default |
|---|---|---|---|
| postcode | Yes | A full London postcode, e.g. "E17 4QH" or "sw112ar". |
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 bar is lower. The description goes beyond them by naming data sources (Environment Agency, planning.data.gov.uk, police.uk) and disclosing the 'unknown' fallback where a borough publishes no data, plus the straight-line-distance caveat and the 'single home can differ' warning.
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 content is dense and largely earns its place because there is no output schema, but it is delivered as one sprawling semicolon-chained sentence. The critical caveats ('unknown', 'a single home can differ') sit at the very end rather than being front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description must enumerate return content, and it does so comprehensively: flood zone, planning constraints, crime/deprivation/tenure, schools and stations, commute times, council tax bands, and the district page. The only gap is any indication of latency, coverage limits, or what happens for a non-London or invalid postcode.
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?
Only one parameter exists and schema coverage is 100%, so the schema fully documents the postcode field with its own example. The description repeats the format hint ('E17 4QH') without adding syntax the schema lacks. 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?
The description opens with a specific verb and resource ('Open-data facts at one full London postcode'), which is far more informative than the tautological title. Granularity ('one full London postcode') implicitly separates it from the district-level siblings, but no sibling is named explicitly, so an agent must infer the distinction.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use or when-not statement, and none of the six siblings (find_london_district, get_district_profile, etc.) are referenced as alternatives. The agent gets a data inventory but no routing guidance for choosing this tool over the district or commute tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
compare_london_districtsCompare London postcode districtsARead-onlyIdempotentInspect
Side-by-side open-data figures for 2 to 6 London postcode districts and London as a whole: median sold price of existing houses, residential crime per 1,000 residents, Outstanding state schools, share of postcodes in flood zone 3, Band D council tax, the main borough's ONS official rent, the share of residents in England's most deprived 20% of areas, Census 2021 tenure, and optionally commute minutes to one hub.
| Name | Required | Description | Default |
|---|---|---|---|
| hub | No | Add typical commute minutes to this work hub. | |
| bedrooms | No | Bedrooms for the official rent column: all (default), 1, 2, 3 or 4+. | |
| districts | Yes | 2 to 6 outward codes or postcodes, e.g. ["E17", "E10", "N17"]. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, openWorldHint=false and destructiveHint=false, so the safety profile is covered. The description adds data provenance ('open-data figures') and clarifies that the hub/commute column is optional, but omits freshness, aggregation caveats (e.g. 'main borough's' rent roll-up), and any rate/coverage limits.
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 scope (side-by-side, 2-6 districts, London baseline) before the metric list, and every token is informative. It is a single long run-on sentence, which slightly hurts scannability of the metric list but wastes nothing.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description carries the return-value burden and does so well by enumerating the metric columns, the London-wide baseline, and the optional commute column. It would be stronger with a note on output shape (per-district rows) and data recency, but it is 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 description coverage is 100%: districts, hub and bedrooms are all documented inline, including the 2-6 item bound and the enum values. The description only echoes '2 to 6 districts' and the optional hub commute, adding no syntax or format meaning beyond the schema, so 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 verb 'compare' (side-by-side) plus resource 'London postcode districts' is specific, and the enumeration of metrics leaves no doubt what the tool computes. It implicitly separates itself from single-district tools like get_district_profile and ranking tools like rank_london_districts via the '2 to 6 districts and London as a whole' scope, but never names a sibling 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?
Usage is only implied: the side-by-side framing and multi-district scope suggest this is the tool for cross-district comparison. There is no explicit when-to-use/when-not, and no pointer to get_district_profile (single area) or rank_london_districts (ordered ranking) as the alternatives an agent should weigh.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
find_london_districtFind a London postcode districtARead-onlyIdempotentInspect
Resolve a place name, borough, Tube or rail station, outward code or full postcode to the London postcode district(s) the other tools take. Returns up to 15 matches with their borough(s) and how each matched. To screen districts on prices, commute, crime, schools, flood or rent, use find_london_districts instead.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | A place ("Walthamstow", "Clapham"), borough ("Hackney"), station ("Clapham Junction"), outward code ("SW1") or postcode ("E17 4QH"). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/non-destructive/closed-world, so the safety profile is covered. The description adds real behavior beyond that: a match cap of 15, per-match borough attribution, and disclosure of how each match was made, which helps the agent interpret 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?
Two sentences with zero filler; the resolution scope is front-loaded and the sibling routing follows. Every clause carries information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description usefully characterizes the return (up to 15 matches, boroughs, match rationale). It stops short of describing no-match or ambiguous-query behavior, but is otherwise sufficient for a single-parameter lookup tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and its parameter description already enumerates the same input forms (place, borough, station, outward code, postcode) with examples. The description adds no format or ambiguous-input handling beyond the schema, so 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 (resolve) and resource (place names, boroughs, stations, codes to London postcode districts) and explicitly distinguishes itself from the sibling find_london_districts. An agent can route correctly without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly names the alternative for screening on prices, commute, crime, schools, flood or rent, with the selecting condition. However, it does not address overlap with the sibling check_london_postcode, which also sounds postcode-oriented — a small gap in routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
find_london_districtsScreen London districts on several criteriaARead-onlyIdempotentInspect
Find the London postcode districts that meet several open-data criteria at once: a maximum Land Registry median house price, a maximum commute to a work hub, crime at or below the London rate or under a rate per 1,000 residents, a minimum number of Outstanding state schools, a maximum share of postcodes in flood zone 3, a maximum ONS official borough rent for a number of bedrooms, and an optional borough. Each match carries the figures that qualified it, with sample sizes, and its page URL; districts that cannot be checked for lack of data are counted, not hidden. When nothing matches, it returns the districts that miss by only one criterion, closest first, with by how much, and names the criterion that rules out most of them. Houses only: flat medians are not compared across districts (retirement flats are not identified in Land Registry data).
| Name | Required | Description | Default |
|---|---|---|---|
| hub | No | Work hub for the commute criterion or sort. canary-wharf (Canary Wharf), city-of-london (Bank / Liverpool Street / Moorgate), kings-cross (King's Cross), westminster (Westminster), oxford-circus (Oxford Circus), london-bridge (London Bridge), paddington (Paddington), stratford (Stratford), hammersmith (Hammersmith), victoria (Victoria), waterloo (Waterloo), farringdon (Farringdon). | |
| limit | No | Districts to return (default 20, max 50). | |
| borough | No | Only districts with postcodes in this London borough, e.g. "Lewisham". | |
| sort_by | No | Order of the matches (lowest first, Outstanding schools most first). Default: the first criterion given. | |
| bedrooms | No | Bedrooms for the rent criterion: all (default), 1, 2, 3 or 4+. | |
| max_commute_minutes | No | Only districts whose typical door-to-door minutes to hub are at or under this (needs hub). | |
| max_flood_zone_3_pct | No | Only districts with at most this % of postcodes in Environment Agency Flood Zone 3. | |
| min_outstanding_schools | No | Only districts with at least this many state schools currently graded Outstanding by Ofsted. | |
| max_official_rent_gbp_pcm | No | Only districts whose borough(s) have an ONS official average monthly rent at or under this (see bedrooms). | |
| max_median_house_price_gbp | No | Only districts whose median sold price of existing houses (12 months) is at or under this. | |
| crime_at_or_below_london_rate | No | Only districts whose residential crime per 1,000 residents is at or below London as a whole. | |
| max_crimes_per_1000_residents | No | Only districts at or under this many residential-relevant crimes per 1,000 residents a year. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the readOnly/idempotent annotations: each match carries qualifying figures, sample sizes, and a page URL; uncheckable districts are 'counted, not hidden'; and when nothing matches it returns near-misses sorted closest-first with the ruling-out criterion. The flats-retirement caveat is also disclosed. This is rich operational context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded purpose followed by criteria enumeration and then the two valuable behavioral clauses (uncheckable districts, no-match fallback). The criteria list partially duplicates the schema, but the description stays readable and most sentences carry non-redundant information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 12-parameter, no-required, no-output-schema tool, it explains the AND-combination semantics and the return payload (figures, sample sizes, URLs, near-miss fallback), so the agent knows what comes back. Only the interaction/precedence among the six sibling tools is left unaddressed.
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 all 12 parameters thoroughly (including enums, ranges, sort defaults). The description mostly re-lists the same criteria, adding only the houses-only qualifier for the price comparison. 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?
Opens with a specific verb and resource ('Find the London postcode districts') plus the conjunctive screening model ('meet several open-data criteria at once'). This clearly separates it from siblings like find_london_district, rank_london_districts, and compare_london_districts without the agent needing to open schemas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied by 'meet several criteria at once' (AND-filter screening), and it does state one constraint ('Houses only'). But it never names when to prefer rank_london_districts or compare_london_districts, which is a real risk given six siblings. No explicit when-not guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_commute_timesCommute times from a London districtARead-onlyIdempotentInspect
Typical door-to-door public transport minutes (TfL Journey Planner, 09:00 weekday departure) from a London postcode district to London work hubs, quickest first, with the district's quickest sector. Hubs: canary-wharf (Canary Wharf), city-of-london (Bank / Liverpool Street / Moorgate), kings-cross (King's Cross), westminster (Westminster), oxford-circus (Oxford Circus), london-bridge (London Bridge), paddington (Paddington), stratford (Stratford), hammersmith (Hammersmith), victoria (Victoria), waterloo (Waterloo), farringdon (Farringdon).
| Name | Required | Description | Default |
|---|---|---|---|
| hub | No | One hub only; leave out for all 12. | |
| district | Yes | A London postcode district (outward code) such as "E17" or "SW11", or a full postcode such as "E17 4QH". |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnly, idempotent, non-destructive), so the description adds useful context instead: data source (TfL Journey Planner), the 09:00 weekday departure assumption, quickest-first ordering, and that the district's quickest sector is included. It stops short of describing failure behavior for unrecognised districts.
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, source, timing assumption and ordering are front-loaded in the first clause. The trailing 12-hub enumeration is long, but it is the only place the readable hub names appear, so it largely earns its space.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description does carry the return-format burden and handles it well (minutes, quickest first, quickest sector). Missing only edge-case detail such as what happens for an invalid or unrecognised district, which the check_london_postcode sibling could have been referenced for.
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 baseline is 3, but the description adds genuine value by mapping each enum slug to its human-readable hub name (e.g. canary-wharf to Canary Wharf, city-of-london to Bank / Liverpool Street / Moorgate), clarifying ambiguous codes the raw enum does not explain.
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+resource with full scope: door-to-door public transport minutes from a London postcode district to named work hubs. It clearly distinguishes the tool from siblings like compare_london_districts and get_district_profile by naming the origin/destination framing and the quickest-first output.
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 scope (one district against one or all hubs), and the hub omission default ('leave out for all 12' via schema) is helpful. However, there is no explicit guidance on when to use this versus compare_london_districts or get_district_profile, nor any stated precondition that the district must be valid.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_district_profileLondon district profileBRead-onlyIdempotentInspect
Open-data profile of one London postcode district: HM Land Registry median sold prices of existing flats and houses (12 months, with sales counts and London figures) and five years of yearly medians, police.uk residential crime per 1,000 residents against London, Ofsted grades of its state schools with the Outstanding ones named, the share of its postcodes in Environment Agency flood zones 2 and 3, council tax bands and ONS official rents for its borough(s), and who lives there (Census 2021 tenure and age, and the share of residents in England's most deprived areas on the Index of Multiple Deprivation 2025). Each block has its window, definition, caveats and source, plus a sentence that keeps them together, and the district page URL to cite.
| Name | Required | Description | Default |
|---|---|---|---|
| district | Yes | A London postcode district (outward code) such as "E17" or "SW11", or a full postcode such as "E17 4QH". |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnlyHint, idempotentHint, non-destructive, closed-world), so the bar is low and the description clears it: it discloses data provenance (HM Land Registry, police.uk, Ofsted, Environment Agency, ONS, Census 2021, IMD 2025), a 12-month sales window and five-year medians, and that every block carries caveats and a source citation. That is real context beyond the annotations, though it does not state failure behavior for an unknown district.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The opening clause is well front-loaded and each enumerated block is arguably load-bearing for a data-heavy tool, but the body is a long run-on enumeration with no bullets or grouping, which makes it harder to parse than it needs to be. Content is justified; structure is not.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, so the description bears the burden of describing the return payload, and it does so thoroughly across every data block, including windows, definitions and citation URL. The remaining gap is what happens on an invalid or non-London district input, which is not addressed anywhere.
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 'district' parameter is fully documented with format and examples in the schema; the description adds only the implicit scope ('one London postcode district') and no syntax or edge-case detail. This is the baseline 3 for a schema that 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 (profile) and a precise resource/scope ('one London postcode district'), and the enumerated data blocks make it obvious this is a single-district deep-dive rather than a lookup or comparison. It never names a sibling (compare_london_districts, find_london_district, check_london_postcode), so the differentiation is inferred from scope 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?
There is no when-to-use or when-not-to-use guidance and no mention of alternatives, despite five plausible siblings that overlap (compare_london_districts, rank_london_districts, check_london_postcode). The agent must infer from 'one district' that this is not the multi-district or validation tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
rank_london_districtsRank London postcode districtsARead-onlyIdempotentInspect
London postcode districts ranked on one open-data measure: lowest_crime_rate (police.uk residential crime per 1,000 residents), cheapest_houses (Land Registry median sold price of existing houses; flats are not ranked), most_outstanding_schools (Ofsted), or shortest_commute (needs hub). Optional borough filter, commute cut-off and reversed order (most expensive, highest crime, longest commute first). Ranks are London-wide.
| Name | Required | Description | Default |
|---|---|---|---|
| hub | No | For shortest_commute: the work hub. canary-wharf (Canary Wharf), city-of-london (Bank / Liverpool Street / Moorgate), kings-cross (King's Cross), westminster (Westminster), oxford-circus (Oxford Circus), london-bridge (London Bridge), paddington (Paddington), stratford (Stratford), hammersmith (Hammersmith), victoria (Victoria), waterloo (Waterloo), farringdon (Farringdon). | |
| limit | No | Rows to return (default 10, max 50). | |
| metric | Yes | What to rank on. | |
| borough | No | Only districts with postcodes in this London borough, e.g. "Lewisham". | |
| reverse | No | Worst first: highest crime, most expensive, fewest Outstanding schools, longest commute. | |
| max_minutes | No | For shortest_commute: only districts at or under this many minutes. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish readOnly/idempotent/non-destructive, so the description's job is to add semantics beyond that. It does: data provenance (police.uk per 1,000 residents, Land Registry median sold price, Ofsted Outstanding), the flats exclusion, and that ranks are London-wide rather than within the borough filter. It doesn't describe the returned row shape, but annotations carry the safety profile.
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 metric list, with no filler sentences. It is slightly long because of the parenthetical source annotations, but every clause carries information an agent needs to pick a metric correctly.
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 6-parameter read-only ranking tool with no output schema, the description covers metric semantics, the hub dependency, the cut-off, and the scope of ranking. The main remaining gap is the shape of returned rows (district name, score, rank), which an agent must infer.
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 3 is the baseline, but the description adds meaning beyond the schema: it defines what each metric rank actually measures and clarifies that reverse yields 'most expensive, highest crime, longest commute first', and that hub is required for shortest_commute. These tie parameters to behavior rather than restating field names.
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 (rank) and resource (London postcode districts) plus the exact set of ranking metrics with their data sources. An agent can immediately distinguish it from compare_london_districts or find_london_district, which are lookups rather than rankings.
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?
Explains each metric's meaning and conditional usage (shortest_commute 'needs hub', flats excluded from cheapest_houses), and describes the optional borough filter and reverse ordering. It does not explicitly name a sibling tool or say when to prefer this over compare_london_districts, 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.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
7 tool updates
- First observed
check_london_postcode - First observed
compare_london_districts - First observed
find_london_district - First observed
find_london_districts - First observed
get_commute_times - First observed
get_district_profile - First observed
rank_london_districts
Related MCP Connectors
UK postcode lookup, nearest postcodes, autocomplete and distance (OS open data)
UK neighbourhood research from government open data: postcode reports, comparisons, 45 datasets.
UK administrative boundary data from OS Boundary Line: name search, point lookup, GeoJSON geometries
Access comprehensive UK postcode information effortlessly with our geocoding services. Whether you
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.-
- AlicenseAqualityAmaintenanceUK 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
- AlicenseAqualityAmaintenanceUK property data MCP server — Land Registry comps, EPC, Rightmove, rental yields, stamp duty, Companies House. 13 tools.1318MIT
- FlicenseNot gradedqualityBmaintenanceEnables AI agents to retrieve a full UK postcode report, perform fast geography lookups, compare up to five postcodes side by side, and search or fetch the underlying open dataset registry through the Model Context Protocol.1-
Glama MCP Gateway
Add one secure layer between your agents and this server.