one-roof
Unified 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.
README
uk-property-mcp
Unified UK housing search as an MCP server. Federates listings across Rightmove, Zoopla and OnTheMarket, deduplicates the same flat across portals, and joins every result to UK open government data — last-sold price (Land Registry), true floor area and EPC rating, £/sqft, council tax band, flood risk, crime, schools.
Plugs into Claude Desktop / Claude Code (local) or a private, access-locked hosted instance for ChatGPT and Claude web.
Status
Feature-complete across sourcing, enrichment, federation, and a hosted UI. Verified against live UK data this build (22 offline tests pass).
- Open-data enrichment — live over keyless UK open data (EPC optional): postcodes.io
geocoding (incl. terminated-postcode fallback), HM Land Registry Price Paid via SPARQL,
data.police.uk crime, Environment Agency flood. Powers
get_property_intelligence,find_comparables,market_stats,resolve_location— no scraping required. - Rightmove adapter — typeahead location resolution,
__NEXT_DATA__search parsing,__PAGE_MODELdetail decoding (a custom numeric-reference format), and adaptive price-band tiling that beats Rightmove's ~1,050-result cap (Clapham reports 1,125 but only ~1,008 are paginable — tiling recovers the rest). - OnTheMarket adapter + cross-portal dedup — the same flat on multiple portals is merged into one record via geo + beds + price + address signals (an image perceptual-hash signal plugs in for the hosted tier). Verified live: Leeds search across Rightmove + OnTheMarket merged 9 cross-portal duplicates.
- Zoopla adapter — pluggable transport: a commercial unblocker (hosted, for DataDome) or a stealth browser (local). Parser validated against a synthetic fixture; field mapping is re-checked live the first time the unblocker key is set.
- Hosted web UI (
public/index.html) — "One Roof", a property-intelligence terminal: search console, deduped record cards with a last-sold / £-per-sqft / EPC-band "truth strip" and cross-portal stamps, plus a Connect-to-Claude panel. Theme-aware, responsive, behind a bearer-token lock. Served by the http entrypoint alongside/api/*and/mcp. - Hosted deploy — Dockerfile +
fly.toml; ChatGPT deep-researchsearch/fetchaliases on the MCP endpoint. SeeDEPLOY.md.
EPC (optional, one env step)
EPC is the only open source needing a free key. Without it everything else still works;
with it you get true floor area and £/sqft. Register at the MHCLG Get energy performance
of buildings data service, then set EPC_API_EMAIL and EPC_API_KEY.
Build note
In this environment tsc runs very slowly; iterate with npx tsx (runs the TypeScript
directly) and run npm run build when you need dist/.
Deploy the hosted site (one click)
Reads render.yaml, builds the Docker image, and gives you a public URL. Set
UNBLOCKER_API_KEY (Scrapfly) in the dashboard to turn on Zoopla + OpenRent. See
DEPLOY.md for the Fly.io alternative and how to lock it to tokens.
Add it to Claude (from GitHub)
Claude Desktop / Claude Code — runs locally, all portals, no hosting. Clone,
then paste this into your MCP config (Claude Desktop → Settings → Developer → Edit
Config). npm install auto-builds via the prepare script.
git clone https://github.com/vedzilla/one-roof && cd one-roof && npm install
{
"mcpServers": {
"one-roof": { "command": "node", "args": ["/abs/path/one-roof/dist/entrypoints/stdio.js"] }
}
}
Restart Claude, then ask in plain English: "2-bed flats in Leeds under £270k — what did they last sell for?" The open-data tools need no keys.
Claude.ai web / ChatGPT — needs the hosted server (see DEPLOY.md). Settings →
Connectors → Add custom connector → URL https://your-host/mcp (+ Authorization: Bearer <token> if locked).
Portal coverage
| Portal | Segment | How | Status |
|---|---|---|---|
| Rightmove | sale + rent | __NEXT_DATA__ + tiling |
✅ verified live |
| OnTheMarket | sale + rent | __NEXT_DATA__ |
✅ verified live |
| Zoopla | sale + rent | unblocker (hosted) / browser (local) | needs a transport key |
| OpenRent | rent (direct landlord) | browser / unblocker (JS-rendered prices) | needs a transport key |
| SpareRoom | rent (rooms / flatshares) | direct (static data-listing-*) |
✅ parses live |
All dedupe into one record per property. Gumtree and other niche sites are each a
single adapter file implementing PortalAdapter — see src/adapters/.
The ten tools
resolve_location · search_listings · get_listing · get_property_intelligence ·
market_stats · compare_listings · commute_search · find_comparables ·
track_search · list_sources
Architecture
One shared core, two run modes (local stdio / hosted HTTP). Open-data enrichment is the
durable spine and is legal to host and share; live listings are fetched politely and,
for Zoopla in hosted mode, via a commercial unblocker. See NOTICE.md for the terms and
src/core/ for the domain model.
Layout
src/core/ domain types, PortalAdapter interface, config
src/mcp/ server builder + the ten tool definitions
src/entrypoints/ stdio (local) and http (hosted) entrypoints
src/adapters/ per-portal adapters (Phase 3+)
src/enrichment/ open-data client (Phase 1–2)
Recommended Servers
playwright-mcp
A Model Context Protocol server that enables LLMs to interact with web pages through structured accessibility snapshots without requiring vision models or screenshots.
Magic Component Platform (MCP)
An AI-powered tool that generates modern UI components from natural language descriptions, integrating with popular IDEs to streamline UI development workflow.
Audiense Insights MCP Server
Enables interaction with Audiense Insights accounts via the Model Context Protocol, facilitating the extraction and analysis of marketing insights and audience data including demographics, behavior, and influencer engagement.
VeyraX MCP
Single MCP tool to connect all your favorite tools: Gmail, Calendar and 40 more.
graphlit-mcp-server
The Model Context Protocol (MCP) Server enables integration between MCP clients and the Graphlit service. Ingest anything from Slack to Gmail to podcast feeds, in addition to web crawling, into a Graphlit project - and then retrieve relevant contents from the MCP client.
Kagi MCP Server
An MCP server that integrates Kagi search capabilities with Claude AI, enabling Claude to perform real-time web searches when answering questions that require up-to-date information.
E2B
Using MCP to run code via e2b.
Neon Database
MCP server for interacting with Neon Management API and databases
Exa Search
A Model Context Protocol (MCP) server lets AI assistants like Claude use the Exa AI Search API for web searches. This setup allows AI models to get real-time web information in a safe and controlled way.
Qdrant Server
This repository is an example of how to create a MCP server for Qdrant, a vector search engine.