one-roof

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.

Category
Visit Server

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_MODEL detail 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-research search/fetch aliases on the MCP endpoint. See DEPLOY.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)

Deploy to Render

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

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.

Official
Featured
TypeScript
Magic Component Platform (MCP)

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.

Official
Featured
Local
TypeScript
Audiense Insights MCP Server

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.

Official
Featured
Local
TypeScript
VeyraX MCP

VeyraX MCP

Single MCP tool to connect all your favorite tools: Gmail, Calendar and 40 more.

Official
Featured
Local
graphlit-mcp-server

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.

Official
Featured
TypeScript
Kagi MCP Server

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.

Official
Featured
Python
E2B

E2B

Using MCP to run code via e2b.

Official
Featured
Neon Database

Neon Database

MCP server for interacting with Neon Management API and databases

Official
Featured
Exa Search

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.

Official
Featured
Qdrant Server

Qdrant Server

This repository is an example of how to create a MCP server for Qdrant, a vector search engine.

Official
Featured