Agentic House Search
by asturksever · remote · local (npm) · no sign-in to list tools · v0.1.3 · published by GitHub user asturksever
UK neighbourhood research from government open data: postcode reports, comparisons, 45 datasets.
5 tools: 1 change things and 4 only read.
Scanned Oct 21, 2026
- Deletes or cancels0Claude Code: deny
- Can't be undone0Claude Code: ask
- Changes things1Claude Code: ask: see these tools
- Only reads4Claude Code: allow: see these tools
1 check matched something in the tool definitions. No finding is not a safety guarantee. How the checks work.
claude mcp add --transport http agentic-house-search https://agentic-house-search.vercel.app/mcpFindings
Matches of fixed checks, with the text they matched.
- Infopostcode_report
The description is 2,188 characters long, over the 2,000 this check looks for.
What this check looks forMatched text
description ends: "...tion or conveyancing search. Check anything decision-critical against the source."
Tools
Open a tool for its reasons and full description. Descriptions are the publisher's own words, shown as they are.
5 tools
Changes things 1Claude Code: ask
postcode_reportFull neighbourhood report for one UK postcode, assembled live from UK government open data.1 finding
Why it is in this group
- Nothing in its name or description says what it does, so it is counted as a write.
- The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
Findings
- Info
The description is 2,188 characters long, over the 2,000 this check looks for.
What this check looks forMatched text
description ends: "...tion or conveyancing search. Check anything decision-critical against the source."
Description, as the server wrote it Full neighbourhood report for one UK postcode, assembled live from UK government open data. Covers eleven categories: demographics (Census 2021), crime (data.police.uk), deprivation (IMD/WIMD/SIMD/NIMDM), property prices (HM Land Registry), broadband and 5G (Ofcom), noise (Defra), transport, amenities (OpenStreetMap), schools (DfE register: name, phase and distance only, no Ofsted grades) and planning constraints (Planning Data platform, Environment Agency). Every figure carries the geography it describes (a postcode, an LSOA of ~1,500 people, or a whole local authority), the period it covers, and a benchmark where one exists. Read those: a crime count describes a 1 km square, and Ofcom mobile coverage describes an entire local authority, not the street. Args: - postcode (string): UK postcode, spaces optional - categories (string[], optional): subset to fetch; omit for all eleven - include_sources (boolean): append publisher and licence per category (default false) - response_format ('markdown' | 'json'): default 'markdown' Returns: Per category: a status, a one-paragraph summary, the facts (label, value, band, benchmark, geography, period, source id) and any caveats. Statuses that are normal rather than failures: - "out_of_coverage": the dataset genuinely does not cover this nation. Census tables are England & Wales; police.uk excludes Scotland; Planning Data, Defra noise and the DfE school register are England-only. The reason and the devolved equivalent are given. - "unavailable": a pre-built extract has not been generated for this area yet (noise, currently). - "partial": some sources answered and some did not; check notes. Examples: - "What's SW11 1AA like?" -> postcode="SW11 1AA" - "Is the broadband any good at M1 1AE?" -> postcode="M1 1AE", categories=["broadband","mobile"] - "Crime and schools near LA23 1AA" -> postcode="LA23 1AA", categories=["crime","schools"] Errors: - "No such postcode" with suggestions when the postcode does not exist - Terminated postcodes are reported with the year they were withdrawn Not a survey, valuation or conveyancing search. Check anything decision-critical against the source.
Annotations the server declares
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: true
Only reads 4Claude Code: allow
postcode_compareCompare two to five UK postcodes on chosen categories, aligned measure by measure.No findings
Why it is in this group
- The name "postcode_compare" says "compare": a word for reading.
Description, as the server wrote it Compare two to five UK postcodes on chosen categories, aligned measure by measure. Fetches each postcode's report concurrently and lines the facts up in a table, so you can answer "which of these is better connected / quieter / cheaper" in one call instead of several. Args: - postcodes (string[]): 2-5 UK postcodes - categories (string[]): 1-6 of demographics, crime, deprivation, prices, broadband, mobile, noise, transport, amenities, schools, environment - response_format ('markdown' | 'json'): default 'markdown' Returns: One row per measure with a column per postcode, each cell carrying the value, its band, and the category status for that postcode. Caveats collect anything that makes a row not strictly comparable. Comparability warnings you must respect, and which this tool surfaces: - Deprivation ranks from different UK nations are NOT comparable — different indices over different numbers of areas. - A measure missing for one postcode because the dataset does not cover that nation is not a low score; the cell says "out_of_coverage". - Ofcom mobile figures describe a whole local authority, so two postcodes in the same authority will always be identical. - Crime counts describe a 1 km square and depend on each police force submitting data; a very low count can be a gap rather than a quiet street. Examples: - "Which has better broadband, SW11 1AA or M1 1AE?" -> postcodes=[...], categories=["broadband"] - "Compare these three on crime and schools" -> categories=["crime","schools"] Don't use when: you have one postcode (use postcode_report) or want the underlying datasets (use postcode_search_datasets).
Annotations the server declares
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: true
postcode_get_datasetFull registry entry for one dataset, by id.No findings
Why it is in this group
- The name "postcode_get_dataset" says "get": a word for reading.
Description, as the server wrote it Full registry entry for one dataset, by id. Returns everything needed to call the source yourself: its home page, machine-readable endpoint, API documentation, format, licence, geographic coverage, update cadence, and the concrete questions it can answer. Args: - id (string): registry id, e.g. "police-street-crime", "land-registry-ppd", "ea-flood" - response_format ('markdown' | 'json'): default 'markdown' Examples: - "How do I call the police API?" -> id="police-street-crime" - "What licence is Price Paid under?" -> id="land-registry-ppd" Errors: - Returns the closest matching ids when the id is not found.
Annotations the server declares
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
postcode_lookupResolve a UK postcode to its geography — coordinates, local authority, ward, constituency, LSOA/MSOA/output area, police force, rural-urban class and deprivation rank.No findings
Why it is in this group
- The name "postcode_lookup" says "lookup": a word for reading.
Description, as the server wrote it Resolve a UK postcode to its geography — coordinates, local authority, ward, constituency, LSOA/MSOA/output area, police force, rural-urban class and deprivation rank. One fast call with no downstream data fetching. Use it to check a postcode exists, to get the codes needed for other datasets, or when you only need where somewhere is rather than what it is like. Args: - postcode (string): UK postcode, spaces optional - response_format ('markdown' | 'json'): default 'markdown' Returns: Coordinates, administrative geography, statistical geography codes (LSOA/MSOA/OA — these are the keys most UK open datasets are published against), and the deprivation rank with the index it came from. Examples: - "Where is SW11 1AA?" -> postcode="SW11 1AA" - "What LSOA covers M1 1AE?" -> postcode="M1 1AE" - "Is XY1 2AB a real postcode?" -> postcode="XY1 2AB" (returns an error with suggestions) Don't use when: you want data about the area — use postcode_report instead. Note: deprivation ranks are NOT comparable between UK nations. Each nation ranks its own areas against its own index, over a different number of areas; the index and its size are returned so you do not compare them by mistake.
Annotations the server declares
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: true
postcode_search_datasetsSearch a curated registry of 45 UK open datasets and APIs for property and neighbourhood research.No findings
Why it is in this group
- The name "postcode_search_datasets" says "search": a word for reading.
Description, as the server wrote it Search a curated registry of 45 UK open datasets and APIs for property and neighbourhood research. Each entry records the dataset's home page, its machine-readable endpoint, format, licence, geographic coverage, update cadence, and the concrete questions it can answer. Use it to find the right source for something this server does not report directly — EPC ratings, planning applications, flood risk, council tax bands, bus timetables, air quality, ground stability, land ownership. Args: - query (string, optional): free text over name, publisher, category, endpoint and questions - category (string, optional): category prefix, e.g. "Crime", "Transport", "Environment" - limit (number): 1-45, default 10 - offset (number): pagination offset, default 0 - response_format ('markdown' | 'json'): default 'markdown' Returns: { total, count, offset, has_more, next_offset, datasets: [{ id, dataset, publisher, category, api, licence, coverage, update_frequency }] } Examples: - "Where do I get EPC data?" -> query="EPC" - "What flood datasets are there?" -> query="flood" - "List every transport source" -> category="Transport", limit=20 Follow up with postcode_get_dataset for the full entry including API docs and the questions it answers.
Annotations the server declares
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
This is not a safety rating, and no finding is not a safety guarantee. The groups and findings come from fixed checks of the tool definitions the server returned on the date shown, not from its code or what it does when called. How the checks work.
Install
Pinned to version 0.1.3. Values in angle brackets are yours to fill in.
claude mcp add --transport http agentic-house-search https://agentic-house-search.vercel.app/mcpRun in a terminal.
Claude Code permissions
Allow the reads, ask before a change, deny the deletes. Paste into .claude/settings.json.
{
"permissions": {
"allow": [
"mcp__agentic-house-search__postcode_lookup",
"mcp__agentic-house-search__postcode_compare",
"mcp__agentic-house-search__postcode_search_datasets",
"mcp__agentic-house-search__postcode_get_dataset"
],
"ask": [
"mcp__agentic-house-search__postcode_report"
],
"deny": []
}
}Tools that only read are allowed, tools that change things ask first, tools that delete or cancel are denied. It assumes the server is installed as agentic-house-search. Review it before you use it.
