PluginBench
MCP Server
Maintained
MIT

UK Property Data MCP Server

io.github.paulieb89/property-shared

UK property data in one package: Land Registry comps, EPC, Rightmove, yields, stamp duty, and Companies House.

What is the UK Property Data MCP server?

The Property Shared MCP server aggregates UK property data from multiple sources including Land Registry sales, EPC certificates, Rightmove listings, rental yields, stamp duty calculations, and Companies House records. It provides comparable sales analysis, energy ratings, current market listings, yield calculations, and tax planning tools for UK property investors and professionals.

Property Shared pulls together Land Registry PPD sales data, EPC energy certificates, Rightmove listings, rental yield analysis, SDLT stamp duty calculations, planning portal links, and Companies House company records into a single interface. Use it to analyze property comps, calculate investment returns, estimate tax liability, and research company ownership—available as a Python library, CLI, HTTP API, or MCP server.

How to install UK Property Data

Copy-paste configuration for popular MCP clients.

transport: stdio
Config generated by PluginBench — verify against the source before use.
~/Library/Application Support/Claude/claude_desktop_config.json
{
  "mcpServers": {
    "property-shared": {
      "command": "uvx",
      "args": [
        "property-shared"
      ]
    }
  }
}

Tools & capabilities

Tools this server exposes to the agent.

  • Land Registry PPD — Retrieve sold prices, dates, property types, and area comparables with median and percentile analysis
  • EPC Lookup — Energy ratings, floor area, and heating costs for England & Wales properties via certificate lookup and summary search
  • Rightmove Search — Current sale and rental listings with prices, agents, and listing details
  • Yield Analysis — Calculate gross rental yield combining PPD sales data and Rightmove rental listings
  • Stamp Duty Calculator — SDLT calculation with April 2025 bands, buy-to-let surcharge, and first-time buyer relief
  • Block Analyzer — Group flat sales by building to identify investor exits and building-level trends
  • Planning Portal Lookup — Local council planning portal links for 99 verified UK councils
  • Companies House Search — Company lookup by name or company number

Use cases

  • Find comparable property sales and median prices for a postcode to value a property or assess market trends
  • Calculate rental yield by combining historical sales data with current rental listings for investment analysis
  • Estimate stamp duty liability with current tax bands and relief eligibility before making an offer
  • Research company ownership and director information via Companies House integration
  • Analyze building-level investor activity by grouping flat sales to spot market exits and opportunities

UK Property Data MCP server FAQ

What is Property Shared?

Property Shared aggregates UK property data from Land Registry, EPC, Rightmove, Companies House, and other sources into a single Python library, CLI, HTTP API, and MCP server for property analysis and investment research.

Is it free to use?

Land Registry PPD and Rightmove data are free. EPC lookups require a free GOV.UK API token, Companies House search requires a free API key, and the planning scraper optionally uses OpenAI API for vision-guided portal navigation.

How do I install it in Cursor or Claude?

Add the remote HTTP endpoint to your MCP config: paste `{"type": "http", "url": "https://property-shared.fly.dev/mcp"}` under mcpServers, or install locally via `pip install property-shared` and run the MCP server.

What authentication is required?

Land Registry PPD and Rightmove work without credentials. EPC requires `EPC_API_TOKEN` from GOV.UK, Companies House requires `COMPANIES_HOUSE_API_KEY`, and the planning scraper optionally uses `OPENAI_API_KEY`.

Does it cover Scotland and Northern Ireland?

EPC data is limited to England and Wales only. Land Registry PPD, Rightmove, and Companies House cover the whole UK.

Can I use it as a Python library or just MCP?

It supports multiple interfaces: Python library, CLI tool, HTTP API, and MCP server—choose whichever fits your workflow.

README (reference)

Source of truth, from the repository.

Property Shared

<!-- mcp-name: io.github.paulieb89/property-shared -->

property-shared MCP server

UK property data in one package. Pulls Land Registry sales, EPC certificates, Rightmove listings, rental yields, stamp duty calculations, planning portal links, and Companies House records.

Use it as a Python library, CLI, HTTP API, or MCP server.

What You Get

Data SourceWhat It Returns
Land Registry PPDSold prices, dates, property types, area comps with median/percentiles
EPC (GOV.UK)Energy ratings, floor area, heating costs. England & Wales only. Certificate lookup and summary search — see EPC notes below
RightmoveCurrent listings (sale + rent), prices, agents, listing details
Yield AnalysisGross yield from PPD sales + Rightmove rentals combined
Stamp DutySDLT calculation with April 2025 bands, BTL surcharge, FTB relief
Block AnalyzerGroups flat sales by building to spot investor exits
PlanningLocal council planning portal lookup (99 verified councils, stdio only)
Companies HouseCompany search and lookup by name or number

Skills & Plugins

Property and Legal packs coming soon. Please get in contact if you have working experiance or expert knowledge in UK property investing, UK Estate Agents, Property and Conveyencing and would like to help shape this. paul@bouch.dev

Use as MCP Server

No install required — paste the URL into your MCP client config and go.

Claude Code, Cursor, any MCP client:

{
  "mcpServers": {
    "property-shared": {
      "type": "http",
      "url": "https://property-shared.fly.dev/mcp"
    }
  }
}

Install

pip install property-shared

# or with uv
uv add property-shared

Extras: [cli] for CLI, [api] for HTTP server.

pip install property-shared[cli]
# or
uv add property-shared --extra cli

Use as a Python Library

from property_core import PPDService, calculate_yield, calculate_stamp_duty

# Get comparable sales for a postcode
comps = PPDService().comps("SW1A 1AA", months=24, property_type="F")
print(f"Median flat price: {comps.median:,}")

# Calculate rental yield
import asyncio
result = asyncio.run(calculate_yield("NG1 1AA", property_type="F"))
print(f"Gross yield: {result.gross_yield_pct}%")

# Stamp duty
sdlt = calculate_stamp_duty(250000, additional_property=True)
print(f"SDLT: {sdlt.total_sdlt:,.0f} ({sdlt.effective_rate}%)")

All models are available at top level:

from property_core import (
    PPDTransaction, PPDCompsResponse, EPCData,
    RightmoveListing, RightmoveListingDetail,
    PropertyReport, YieldAnalysis, RentalAnalysis,
    BlockAnalysisResponse, CompanyRecord, StampDutyResult,
)

Interpretation helpers (core returns numbers, you decide how to label them):

from property_core import classify_yield, classify_data_quality, generate_insights

Use as CLI

pip install property-shared[cli]  # or: uv add property-shared --extra cli

# Comparable sales
property-cli ppd comps "SW1A 1AA" --months 24 --property-type F

# Rental yield
property-cli analysis yield "NG1 1AA" --property-type F

# Stamp duty
property-cli calc stamp-duty 300000

# Rightmove search (with sort)
property-cli rightmove search-url "NG1 1AA" --sort-by most_reduced

# Full property report
property-cli report generate "10 Downing Street, SW1A 2AA" --property-type F

Add --api-url http://localhost:8000 to any command to route through the HTTP API instead of calling core directly.

Use as HTTP API

pip install property-shared[api]  # or: uv add property-shared --extra api
property-api  # starts on port 8000

Interactive docs at http://localhost:8000/docs.

Key endpoints:

  • GET /v1/ppd/comps?postcode=SW1A+1AA&property_type=F&enrich_epc=true
  • GET /v1/analysis/yield?postcode=NG1+1AA&property_type=F
  • GET /v1/analysis/rental?postcode=NG1+1AA&purchase_price=200000
  • GET /v1/rightmove/search-url?postcode=NG1+1AA&sort_by=newest
  • GET /v1/calculators/stamp-duty?price=300000&additional_property=true
  • POST /v1/property/report with { "address": "10 Downing Street, SW1A 2AA" }

Full endpoint list in USER_GUIDE.md.

EPC notes (v1.14.0)

The EPC service moved to a GOV.UK Bearer API. Set EPC_API_TOKEN; the old EPC_API_EMAIL/EPC_API_KEY pair authenticated against a retired host and is not a supported fallback.

What the new upstream supports, and what it does not:

  • Certificate lookup by certificate number — full detail, one request.
  • Summary search by postcode — returns address, UPRN (often absent), energy band, registration date and schema type. It does not return energy score, floor area or property type; those exist only on a full certificate.
  • A postcode selects an area, never a property. Identifying one property needs a UPRN or an address matching a certificate exactly (case, punctuation and a leading Flat/Apartment designator aside). Anything less — no address, no match, or several matches — is refused rather than resolved to a best guess. See USER_GUIDE.md for the CLI and REST surfaces.
  • Area statistics are limited to the record count and, when the bounded response contains every matching summary, the rating distribution. Property-type breakdown and floor-area statistics are reported as None — unavailable, not zero — because producing them would mean one request per certificate.
  • Coverage is England and Wales. Scotland, Northern Ireland and the Channel Islands return "no certificates found": a coverage boundary, not a statement about a property.
  • Pagination is not a stable snapshot. Responses carry complete, duplicates_removed and unusable_rows; no operation claims a complete harvest of an area.
  • Ambiguous address matches are refused rather than resolved to an arbitrary neighbouring certificate.

search_all_by_postcode() is unsupported — use search_summaries() for candidate discovery, then get_certificate() for the one you need.

Environment Variables

Create a .env file in the repo root (it is gitignored) with the variables you need.

Leave optional variables out entirely rather than assigning them empty. KEY= sets an empty string, which is not the same as unset: os.getenv("KEY", "default") returns "", so the default never applies. This bit the EPC live tests, which sent an empty postcode upstream.

Key variables:

VariableRequired ForDescription
EPC_API_TOKENEPC lookupsBearer token from GOV.UK EPC data
EPC_API_EMAIL(deprecated)Retired service; parsed only to raise a configuration error
EPC_API_KEY(deprecated)Retired service; not a supported fallback
COMPANIES_HOUSE_API_KEYCompany searchFree key from Companies House
RIGHTMOVE_DELAY_SECONDSNo (default 0.6s)Rate limit delay for Rightmove scraping
OPENAI_API_KEYPlanning scraperVision-guided planning portal scraper

Land Registry PPD and Rightmove work without credentials.

Development

# Install dependencies (dev tooling installs by default via [dependency-groups])
uv sync

# Run API with reload
uv run --extra api uvicorn app.main:app --reload

# Full validation (lockfile check, pre-commit, all extras, full suite) —
# same entrypoint CI and the release gate use
./scripts/validate.sh

# + live integration tests (real network calls)
RUN_LIVE_TESTS=1 ./scripts/validate.sh

Deployed at https://property-shared.fly.dev with API docs at /docs and MCP endpoint at /mcp.

Related MCP servers

UK due diligence — Companies House, Charity Commission, Land Registry, Gazette, HMRC VAT

3
Python
MIT
View repository →
UKUK Legal Research logo

Access UK case law, legislation, Hansard, bills, votes, and HMRC guidance for AI-assisted legal research.

12
Python
MIT
View repository →
BABAILII UK Case Law logo

Search UK case law on BAILII — court judgments with section extraction. Runs locally.

4
Python
View repository →

Pine Script v6 documentation lookup and function validation for AI code generation

9
Python
MIT
View repository →

MCP server para gerenciamento de certidoes de cartorio via IA.

View repository →

Vendedores da Amazon Brasil com CNPJ conferido na Receita Federal: razão social, porte e sócios