Property Shared

MCP serverDev tools

Give your AI access to UK property data so it can research sales, listings, and costs in one place. It draws on Land Registry sold prices, EPC ratings, Rightmove, rental yields, stamp duty, and Companies House records. Your AI can use these to compare properties and work out what a purchase or rental might really cost.

Use Property Shared in Claude, ChatGPT or Ahel Desktop

Free. Sign in, add Property Shared and connect your AI. About a minute.

Also: Claude Code · Cursor · Codex

Then ask your AI: use the property comps tool from Property Shared

Details

Available today. Use it from your connected AI after setup.

Add property-shared, then ask your AI a property question, such as recent sold prices in an area or the stamp duty on a purchase. From there you can ask it to compare properties or pull together the numbers behind a deal.

Property SharedStart free

What your AI can do with it

  • Find comparable sold prices from Land Registry
  • Check a property's EPC energy rating
  • Look up current Rightmove listings
  • Estimate rental yields
  • Work out stamp duty costs
  • Look up companies on Companies House

Install Property Shared

The server’s own address, for the clients that take one directly. Or connect Ahel once and every client you use reads it from one address, with the account kept on Ahel rather than in each client’s config.

  • Claude Code

    claude mcp add --transport http --scope user property-shared 'https://property-shared.fly.dev/mcp'

    Run it once in your project, then open /mcp to approve any sign-in the server asks for.

  • Claude Desktop

    https://property-shared.fly.dev/mcp

    Add a custom connector in Settings, paste this address, and approve the sign-in.

  • Cursor

    cursor://anysphere.cursor-deeplink/mcp/install?name=property-shared&config=eyJ1cmwiOiJodHRwczovL3Byb3BlcnR5LXNoYXJlZC5mbHkuZGV2L21jcCJ9

    Open the link and Cursor adds the server at that address.

  • ChatGPT

    https://property-shared.fly.dev/mcp

    In Settings, enable Developer mode, create an MCP app, and paste this address. Your plan and workspace must allow custom apps.

  • Codex

    codex mcp add property-shared --url 'https://property-shared.fly.dev/mcp'

    Run it once, then sign in with codex mcp login property-shared if the server asks for an account.

From the project's README

As published by paulieb89/property-shared in README.md.

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.

Tools it offers (14)

What this server listed when Ahel dialed its public endpoint in Sep 2026, with no key and no account of yours. The names are the server’s own.

  • property_comps
  • property_yield
  • rental_analysis
  • property_epc
  • property_epc_search
  • property_epc_summaries
  • epc_certificate
  • stamp_duty
  • rightmove_search
  • rightmove_listing
  • property_blocks
  • company_search
  • planning_search
  • ppd_transactions

Signals

GitHub stars
16
Forks
4
Last commit
Sep 2026
Advanced
Delivery
property-shared MCP server → your Ahel connector (mcp.ahel.ai) → your AI.
Item type
mcp-server
Key
io-github-paulieb89-property-shared
Source
github.com/paulieb89/property-shared
Hosted endpoint
https://property-shared.fly.dev/mcp