# Agentic House Search (remote · agentic-house-search.vercel.app)

UK neighbourhood research from government open data: postcode reports, comparisons, 45 datasets.

- Trust score: 68/100 (medium)
- Registry status: active
- Liveness: live
- Owner verified: no
- Last scored: 2026-08-06

## Components

- remote · `agentic-house-search.vercel.app`: 68/100 (this document), [markdown](https://verifymcp.io/servers/asturksever-agentic-house-search/agentic-house-search.md), [page](https://verifymcp.io/servers/asturksever-agentic-house-search/agentic-house-search)
- npm · `agentic-house-search`: 33/100, [markdown](https://verifymcp.io/servers/asturksever-agentic-house-search/agentic-house-search-2.md), [page](https://verifymcp.io/servers/asturksever-agentic-house-search/agentic-house-search-2)

## Channel facts

- Endpoint: `https://agentic-house-search.vercel.app/mcp`
- Transports: `streamable-http`
- Auth: `none`
- Version: `0.1.3`

## Trust breakdown

How this component scores in each security and reliability category. Every signal is checked automatically against the live server, and we only credit what we can confirm. Scores are 0–100 per category. Scoring method: https://verifymcp.io/docs/scoring (what has changed: https://verifymcp.io/docs/scoring/changelog)

Scored 2026-08-06.

- **Endpoint Security**: 80/100
  - The endpoint's TLS certificate is valid, in date, and uses a strong key.
  - No authorisation is required to call this server. Every tool declares its destructiveHint and none is destructive, so open access doesn't expose one.
  - HTTPS is enforced; there's no plaintext access path.
  - The HSTS (Strict-Transport-Security) header is present.
  - DNSSEC check failed: this domain isn't protected by DNSSEC.
- **Transport & Reachability**: 100/100
  - Verified streamable-http transport via a live MCP handshake.
- **Schema Quality & AI Usability**: 59/100
  - AI-judged instruction clarity (excellent).
  - Context-footprint check failed: tool/resource definitions use about 2148 tokens (~429/item across 5 items; 5 tools + 0 resources), over budget; trim descriptions and params.
  - Usage-examples check failed: none of the tools include examples.
- **Stability & Change Management**: 0/100
  - Stability not yet verified: not enough scan history yet (needs a 30-day window).
- **Tool Coverage**: 96/100
  - 100% of tools have a non-trivial description (not blank, and not just the tool's name).
  - 88% of tool parameters carry a description.
  - Structured output schemas are declared (100% of tools); any adoption earns full credit.
- **Capabilities**: 100/100
  - Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.

**Unverified: 1 category.** A category scored 0 because we could not verify it: authentication we do not have, an unreachable endpoint, or not enough scan history. We only credit what we can confirm.

## Install

### Claude

```bash
claude mcp add --transport http asturksever-agentic-house-search https://agentic-house-search.vercel.app/mcp
```

### Codex

```toml
[mcp_servers.asturksever-agentic-house-search]
url = "https://agentic-house-search.vercel.app/mcp"
```

### opencode

```json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "asturksever-agentic-house-search": {
      "type": "remote",
      "url": "https://agentic-house-search.vercel.app/mcp",
      "enabled": true
    }
  }
}
```

### OpenClaw

```bash
openclaw mcp add asturksever-agentic-house-search --url https://agentic-house-search.vercel.app/mcp --transport streamable-http
```

### Hermes

```yaml
mcp_servers:
  asturksever-agentic-house-search:
    url: "https://agentic-house-search.vercel.app/mcp"
```

### Other

```json
{
  "mcpServers": {
    "asturksever-agentic-house-search": {
      "type": "http",
      "url": "https://agentic-house-search.vercel.app/mcp"
    }
  }
}
```

The mcpServers block is a cross-client convention. Remote transports vary, so check your client's docs.

## Changelog

Every change recorded for this component, newest first. Days that predate change tracking, or that we cannot explain, say so: "we were watching and nothing happened" and "we were not watching" are different claims.

### 2026-08-06 (score 68)

First indexed and scored.

## MCP tools (5)

### `postcode_report` (~641 tokens)

UK postcode neighbourhood report

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…

Input parameters:

- `categories` (array): 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.
- `include_sources` (boolean): Append the publisher and licence of each dataset used (default false)
- `postcode` (string, required): A UK postcode, with or without a space, e.g. "SW11 1AA" or "m11ae"
- `response_format` (string): 'markdown' to read, 'json' for the full structured facts

Output parameters:

- `categories` (array)
- `country` (string)
- `local_authority` (string)
- `postcode` (string)

### `postcode_lookup` (~332 tokens)

Look up UK postcode geography

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.

Input parameters:

- `postcode` (string, required): A UK postcode, e.g. "SW11 1AA"
- `response_format` (string): 'markdown' to read, 'json' for the structured record

Output parameters:

- `constituency` (string)
- `country` (string)
- `deprivation_index`
- `deprivation_rank`
- `latitude` (number)
- `local_authority` (object)
- `longitude` (number)
- `lsoa` (object)
- `msoa` (object)
- `national_park`
- `output_area`
- `police_force` (string)
- `postcode` (string)
- `region`
- `rural_urban`
- `ward` (object)

### `postcode_compare` (~457 tokens)

Compare UK postcodes side by side

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

Input parameters:

- `categories` (array, required): Which categories to compare on. Keep it tight — comparing all eleven across five postcodes produces a very large answer.
- `postcodes` (array, required): Two to five UK postcodes to compare, e.g. ["SW11 1AA", "M1 1AE"]
- `response_format` (string): 'markdown' for a side-by-side table, 'json' for the structured comparison

Output parameters:

- `categories` (array)
- `caveats` (array)
- `postcodes` (array)
- `rows` (array)

### `postcode_search_datasets` (~387 tokens)

Search the UK open-data registry

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.

Input parameters:

- `category` (string): Filter by category prefix, e.g. "Crime", "Transport", "Environment"
- `limit` (integer): Maximum results (default 10)
- `offset` (integer): Results to skip, for pagination
- `query` (string): Free text matched against dataset name, publisher, category, API endpoint and the questions each dataset answers. Omit to list everything.
- `response_format` (string)

Output parameters:

- `count` (number)
- `datasets` (array)
- `has_more` (boolean)
- `next_offset` (number)
- `offset` (number)
- `total` (number)

### `postcode_get_dataset` (~203 tokens)

Get one registry dataset entry

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.

Input parameters:

- `id` (string, required): Registry id, e.g. "police-street-crime" — find one with postcode_search_datasets
- `response_format` (string)

Output parameters:

- `api` (string)
- `api_docs` (string)
- `category` (string)
- `coverage` (string)
- `dataset` (string)
- `format` (string)
- `id` (string)
- `licence` (string)
- `link` (string)
- `publisher` (string)
- `questions` (array)
- `update_frequency` (string)

## Diagnostics

Captured diagnostic sections: TLS, DNSSEC, Authorisation, Transports. The full working is on the page: https://verifymcp.io/servers/asturksever-agentic-house-search/agentic-house-search#diagnostics

## Score history

- 2026-08-06: 68

## Links

- Remote endpoint: https://agentic-house-search.vercel.app/mcp
- Repository: https://github.com/asturksever/agentic-house-search-data-registry
- Website: https://agentic-house-search.vercel.app/connect.html
- Changelog RSS feed: https://verifymcp.io/servers/asturksever-agentic-house-search/agentic-house-search.xml
- Changelog JSON feed: https://verifymcp.io/servers/asturksever-agentic-house-search/agentic-house-search.json
- HTML version of this page: https://verifymcp.io/servers/asturksever-agentic-house-search/agentic-house-search
