Agentic House Search
UK neighbourhood research from government open data: postcode reports, comparisons, 45 datasets.
사용해야 할까요
품질 및 안전성
도구 정의와 프로토콜 준수에 대한 자동 분석을 기반으로 합니다.
컨텍스트 비용
이는 서버의 도구가 모델의 컨텍스트에 로드될 때마다 소비되는 대략적인 토큰 수입니다. 수치가 높을수록 다른 작업에 사용할 수 있는 주의가 줄어듭니다.
설치
원클릭 설치
`claude_desktop_config.json` 파일에 다음을 추가하세요:
{
"mcpServers": {
"agentic-house-search": {
"command": "npx",
"args": [
"agentic-house-search"
]
}
}
}실행 가능한 패키지
0.1.3stdio원격 엔드포인트
https://agentic-house-search.vercel.app/mcpstreamable-http할 수 있는 일
도구 목록
도구 (5)
🟢postcode_report(postcode, categories, include_sources, response_format)
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.
입력 스키마
{
"type": "object",
"properties": {
"postcode": {
"type": "string",
"minLength": 5,
"maxLength": 10,
"description": "A UK postcode, with or without a space, e.g. \"SW11 1AA\" or \"m11ae\""
},
"categories": {
"description": "Which sections to fetch. Omit for all eleven. Fetching only what you need is faster and much smaller — e.g. [\"crime\",\"schools\"] for a family-safety question.",
"type": "array",
"items": {
"type": "string",
"enum": [
"demographics",
"crime",
"deprivation",
"prices",
"broadband",
"mobile",
"noise",
"transport",
"amenities",
"schools",
"environment"
]
}
},
"include_sources": {
"default": false,
"description": "Append the publisher and licence of each dataset used (default false)",
"type": "boolean"
},
"response_format": {
"default": "markdown",
"description": "'markdown' to read, 'json' for the full structured facts",
"type": "string",
"enum": [
"markdown",
"json"
]
}
},
"required": [
"postcode"
],
"$schema": "http://json-schema.org/draft-07/schema#"
}출력 스키마
{
"type": "object",
"properties": {
"postcode": {
"type": "string"
},
"local_authority": {
"type": "string"
},
"country": {
"type": "string"
},
"categories": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string"
},
"label": {
"type": "string"
},
"status": {
"type": "string"
},
"summary": {
"type": "string"
},
"facts": {
"type": "array",
"items": {
"type": "object",
"properties": {
"label": {
"type": "string"
},
"value": {
"anyOf": [
{
"type": "number"
},
{
"type": "string"
}
]
},
"display": {
"type": "string"
},
"unit": {
"type": "string"
},
"band": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"tone": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"benchmark": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"geography": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"period": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"source_id": {
"type": "string"
},
"note": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"required": [
"label",
"value",
"display",
"source_id"
],
"additionalProperties": false
}
},
"notes": {
"type": "array",
"items": {
"type": "string"
}
}
},
"required": [
"id",
"label",
"status",
"facts",
"notes"
],
"additionalProperties": false
}
}
},
"required": [
"postcode",
"local_authority",
"country",
"categories"
],
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false
}🟢postcode_lookup(postcode, response_format)
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.
입력 스키마
{
"type": "object",
"properties": {
"postcode": {
"type": "string",
"minLength": 5,
"maxLength": 10,
"description": "A UK postcode, e.g. \"SW11 1AA\""
},
"response_format": {
"default": "markdown",
"description": "'markdown' to read, 'json' for the structured record",
"type": "string",
"enum": [
"markdown",
"json"
]
}
},
"required": [
"postcode"
],
"$schema": "http://json-schema.org/draft-07/schema#"
}출력 스키마
{
"type": "object",
"properties": {
"postcode": {
"type": "string"
},
"latitude": {
"type": "number"
},
"longitude": {
"type": "number"
},
"country": {
"type": "string"
},
"region": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"local_authority": {
"type": "object",
"properties": {
"name": {
"type": "string"
},
"code": {
"type": "string"
}
},
"required": [
"name",
"code"
],
"additionalProperties": false
},
"ward": {
"type": "object",
"properties": {
"name": {
"type": "string"
},
"code": {
"type": "string"
}
},
"required": [
"name",
"code"
],
"additionalProperties": false
},
"constituency": {
"type": "string"
},
"lsoa": {
"type": "object",
"properties": {
"name": {
"type": "string"
},
"code": {
"type": "string"
}
},
"required": [
"name",
"code"
],
"additionalProperties": false
},
"msoa": {
"type": "object",
"properties": {
"name": {
"type": "string"
},
"code": {
"type": "string"
}
},
"required": [
"name",
"code"
],
"additionalProperties": false
},
"output_area": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"police_force": {
"type": "string"
},
"rural_urban": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"national_park": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"deprivation_rank": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
]
},
"deprivation_index": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"required": [
"postcode",
"latitude",
"longitude",
"country",
"region",
"local_authority",
"ward",
"constituency",
"lsoa",
"msoa",
"output_area",
"police_force",
"rural_urban",
"national_park",
"deprivation_rank",
"deprivation_index"
],
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false
}🟢postcode_compare(postcodes, categories, response_format)
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).
입력 스키마
{
"type": "object",
"properties": {
"postcodes": {
"minItems": 2,
"maxItems": 5,
"type": "array",
"items": {
"type": "string",
"minLength": 5,
"maxLength": 10
},
"description": "Two to five UK postcodes to compare, e.g. [\"SW11 1AA\", \"M1 1AE\"]"
},
"categories": {
"minItems": 1,
"maxItems": 6,
"type": "array",
"items": {
"type": "string",
"enum": [
"demographics",
"crime",
"deprivation",
"prices",
"broadband",
"mobile",
"noise",
"transport",
"amenities",
"schools",
"environment"
]
},
"description": "Which categories to compare on. Keep it tight — comparing all eleven across five postcodes produces a very large answer."
},
"response_format": {
"default": "markdown",
"description": "'markdown' for a side-by-side table, 'json' for the structured comparison",
"type": "string",
"enum": [
"markdown",
"json"
]
}
},
"required": [
"postcodes",
"categories"
],
"$schema": "http://json-schema.org/draft-07/schema#"
}출력 스키마
{
"type": "object",
"properties": {
"postcodes": {
"type": "array",
"items": {
"type": "string"
}
},
"categories": {
"type": "array",
"items": {
"type": "string"
}
},
"rows": {
"type": "array",
"items": {
"type": "object",
"properties": {
"category": {
"type": "string"
},
"measure": {
"type": "string"
},
"values": {
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": {
"type": "object",
"properties": {
"display": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"value": {
"anyOf": [
{
"anyOf": [
{
"type": "number"
},
{
"type": "string"
}
]
},
{
"type": "null"
}
]
},
"band": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"tone": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"status": {
"type": "string"
}
},
"required": [
"display",
"value",
"band",
"tone",
"status"
],
"additionalProperties": false
}
}
},
"required": [
"category",
"measure",
"values"
],
"additionalProperties": false
}
},
"caveats": {
"type": "array",
"items": {
"type": "string"
}
}
},
"required": [
"postcodes",
"categories",
"rows",
"caveats"
],
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false
}🟢postcode_search_datasets(query, category, limit, offset, response_format)
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.
입력 스키마
{
"type": "object",
"properties": {
"query": {
"description": "Free text matched against dataset name, publisher, category, API endpoint and the questions each dataset answers. Omit to list everything.",
"type": "string",
"maxLength": 200
},
"category": {
"description": "Filter by category prefix, e.g. \"Crime\", \"Transport\", \"Environment\"",
"type": "string",
"maxLength": 80
},
"limit": {
"default": 10,
"description": "Maximum results (default 10)",
"type": "integer",
"minimum": 1,
"maximum": 45
},
"offset": {
"default": 0,
"description": "Results to skip, for pagination",
"type": "integer",
"minimum": 0,
"maximum": 9007199254740991
},
"response_format": {
"default": "markdown",
"type": "string",
"enum": [
"markdown",
"json"
]
}
},
"$schema": "http://json-schema.org/draft-07/schema#"
}출력 스키마
{
"type": "object",
"properties": {
"total": {
"type": "number"
},
"count": {
"type": "number"
},
"offset": {
"type": "number"
},
"has_more": {
"type": "boolean"
},
"next_offset": {
"type": "number"
},
"datasets": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string"
},
"dataset": {
"type": "string"
},
"publisher": {
"type": "string"
},
"category": {
"type": "string"
},
"api": {
"type": "string"
},
"licence": {
"type": "string"
},
"coverage": {
"type": "string"
},
"update_frequency": {
"type": "string"
}
},
"required": [
"id",
"dataset",
"publisher",
"category",
"api",
"licence",
"coverage",
"update_frequency"
],
"additionalProperties": false
}
}
},
"required": [
"total",
"count",
"offset",
"has_more",
"datasets"
],
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false
}🟢postcode_get_dataset(id, response_format)
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.
입력 스키마
{
"type": "object",
"properties": {
"id": {
"type": "string",
"minLength": 2,
"maxLength": 60,
"description": "Registry id, e.g. \"police-street-crime\" — find one with postcode_search_datasets"
},
"response_format": {
"default": "markdown",
"type": "string",
"enum": [
"markdown",
"json"
]
}
},
"required": [
"id"
],
"$schema": "http://json-schema.org/draft-07/schema#"
}출력 스키마
{
"type": "object",
"properties": {
"id": {
"type": "string"
},
"dataset": {
"type": "string"
},
"publisher": {
"type": "string"
},
"link": {
"type": "string"
},
"api": {
"type": "string"
},
"api_docs": {
"type": "string"
},
"format": {
"type": "string"
},
"licence": {
"type": "string"
},
"coverage": {
"type": "string"
},
"update_frequency": {
"type": "string"
},
"questions": {
"type": "array",
"items": {
"type": "string"
}
},
"category": {
"type": "string"
}
},
"required": [
"id",
"dataset",
"publisher",
"link",
"api",
"api_docs",
"format",
"licence",
"coverage",
"update_frequency",
"questions",
"category"
],
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false
}커뮤니티
증거