Wraps a comprehensive set of UK property data sources into MCP tools. Pulls Land Registry sold price data with area comps and percentiles, EPC certificates for energy ratings and floor plans, live Rightmove listings for sale and rent, and Companies House records. Exposes calculators for stamp duty (with 2025 bands and BTL surcharge) and rental yields derived from combining sales and rental data. Also includes a block analyzer that groups flat sales by building to identify investor activity patterns. The whole thing runs as a hosted MCP server at property-shared.fly.dev, so no local installation needed. Built by someone clearly deep in UK property analysis who needed programmatic access to data that normally requires manual lookups across multiple government portals and listing sites.
claude mcp add --transport http property-shared https://property-shared.fly.dev/mcpRun in your terminal. Add --scope user to make it available in every project.
Review the command, arguments, and environment values before installing — MCP servers run with your local permissions.
Verified live against the running server on Jun 10, 2026.
property_compsComparable sales from Land Registry Price Paid Data. Defaults return the standard residential set: - property_type=None means residential (F+D+S+T). Pass "F"/"D"/"S"/"T"/"O" for a single type, or "ALL" to disable type filtering (firehose). - transaction_category defaults to "A...9 paramsComparable sales from Land Registry Price Paid Data. Defaults return the standard residential set: - property_type=None means residential (F+D+S+T). Pass "F"/"D"/"S"/"T"/"O" for a single type, or "ALL" to disable type filtering (firehose). - transaction_category defaults to "A...
limitintegermonthsintegeraddressvaluepostcode*stringenrich_epcbooleansearch_levelstringproperty_typevaluefilter_outliersbooleantransaction_categoryvalueproperty_yieldGross rental yield for a UK postcode. Combines Land Registry sale comps (median sale price) with Rightmove rental listings (median monthly rent) to produce a gross yield percentage.5 paramsGross rental yield for a UK postcode. Combines Land Registry sale comps (median sale price) with Rightmove rental listings (median monthly rent) to produce a gross yield percentage.
monthsintegerpostcode*stringsearch_levelstringauto_escalatebooleanproperty_typevaluerental_analysisRental market analysis and achievable rent estimate. auto_escalate widens the search area when fewer than 5 listings are found (thin market). Response includes thin_market, escalated_from, escalated_to fields when escalation occurs.4 paramsRental market analysis and achievable rent estimate. auto_escalate widens the search area when fewer than 5 listings are found (thin market). Response includes thin_market, escalated_from, escalated_to fields when escalation occurs.
radiusnumberpostcode*stringauto_escalatebooleanpurchase_pricevalueproperty_epcEnergy Performance Certificate data for a UK property or postcode area. With address: returns the matched EPC certificate for that specific property. Without address: returns an aggregated summary of every certificate at the postcode — count, rating distribution, property-type...2 paramsEnergy Performance Certificate data for a UK property or postcode area. With address: returns the matched EPC certificate for that specific property. Without address: returns an aggregated summary of every certificate at the postcode — count, rating distribution, property-type...
addressvaluepostcode*stringproperty_epc_searchBrowse all EPC certificates at a postcode — use when you have no house number. Returns a slim list of every certificate at the postcode. Each entry contains: address, rating, score, floor_area (sqm), property_type, floor_level, habitable_rooms, inspection_date, lmk_key. Workfl...1 paramsBrowse all EPC certificates at a postcode — use when you have no house number. Returns a slim list of every certificate at the postcode. Each entry contains: address, rating, score, floor_area (sqm), property_type, floor_level, habitable_rooms, inspection_date, lmk_key. Workfl...
postcode*stringepc_certificateFetch a single EPC certificate by its lmk_key (certificate hash). Use after property_epc_search has identified the correct cert — this is faster than property_epc(postcode, address) as it makes a direct lookup with no fuzzy matching or postcode re-fetch. lmk_key is returned in...1 paramsFetch a single EPC certificate by its lmk_key (certificate hash). Use after property_epc_search has identified the correct cert — this is faster than property_epc(postcode, address) as it makes a direct lookup with no fuzzy matching or postcode re-fetch. lmk_key is returned in...
lmk_key*stringstamp_dutyUK Stamp Duty Land Tax (SDLT) calculation with full breakdown.4 paramsUK Stamp Duty Land Tax (SDLT) calculation with full breakdown.
price*integernon_residentbooleanfirst_time_buyerbooleanadditional_propertybooleanrightmove_searchFetch Rightmove listings for a postcode. listing_type: "sale" or "rent". sort_by: "newest", "most_reduced", "price_asc", "price_desc". keywords filters by description text (e.g. "church conversion", "barn", "factory"). Images are excluded from results.9 paramsFetch Rightmove listings for a postcode. listing_type: "sale" or "rent". sort_by: "newest", "most_reduced", "price_asc", "price_desc". keywords filters by description text (e.g. "church conversion", "barn", "factory"). Images are excluded from results.
radiusnumbersort_byvaluekeywordsvaluepostcode*stringmax_pagesintegermax_pricevaluelisting_typestringmin_bedroomsvalueproperty_typevaluerightmove_listingFull detail for a single Rightmove listing (URL or numeric ID). include_images fetches and embeds photos and floorplans as MCP image content. max_images caps the number of property photos (default 3); floorplans always included.3 paramsFull detail for a single Rightmove listing (URL or numeric ID). include_images fetches and embeds photos and floorplans as MCP image content. max_images caps the number of property photos (default 3); floorplans always included.
max_imagesintegerinclude_imagesbooleanproperty_url_or_id*stringproperty_blocksProperty block analysis — identify buildings with multiple flat sales (block-buy opportunities).3 paramsProperty block analysis — identify buildings with multiple flat sales (block-buy opportunities).
monthsintegerpostcode*stringsearch_levelstringcompany_searchSearch Companies House for a company by name.1 paramsSearch Companies House for a company by name.
name*stringplanning_searchFind the council planning portal URL for a postcode.1 paramsFind the council planning portal URL for a postcode.
postcode*stringppd_transactionsRaw Land Registry Price Paid transactions for a postcode.3 paramsRaw Land Registry Price Paid transactions for a postcode.
limitintegerpostcode*stringproperty_typevalueUK 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.
| Data Source | What It Returns |
|---|---|
| Land Registry PPD | Sold prices, dates, property types, area comps with median/percentiles |
| EPC Register | Energy ratings, floor area, construction age, heating costs |
| Rightmove | Current listings (sale + rent), prices, agents, listing details |
| Yield Analysis | Gross yield from PPD sales + Rightmove rentals combined |
| Stamp Duty | SDLT calculation with April 2025 bands, BTL surcharge, FTB relief |
| Block Analyzer | Groups flat sales by building to spot investor exits |
| Planning | Local council planning portal lookup (99 verified councils, stdio only) |
| Companies House | Company search and lookup by name or number |
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
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"
}
}
}
pip install property-shared
# or with uv
uv add property-shared
Extras: [cli] for CLI, [api] for HTTP server, [dev] for tests.
pip install property-shared[cli]
# or
uv add property-shared --extra cli
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
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.
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=trueGET /v1/analysis/yield?postcode=NG1+1AA&property_type=FGET /v1/analysis/rental?postcode=NG1+1AA&purchase_price=200000GET /v1/rightmove/search-url?postcode=NG1+1AA&sort_by=newestGET /v1/calculators/stamp-duty?price=300000&additional_property=truePOST /v1/property/report with { "address": "10 Downing Street, SW1A 2AA" }Full endpoint list in USER_GUIDE.md.
Copy .env.example to .env. Key variables:
| Variable | Required For | Description |
|---|---|---|
EPC_API_EMAIL | EPC lookups | Free key from EPC Register |
EPC_API_KEY | EPC lookups | Paired with email above |
COMPANIES_HOUSE_API_KEY | Company search | Free key from Companies House |
RIGHTMOVE_DELAY_SECONDS | No (default 0.6s) | Rate limit delay for Rightmove scraping |
OPENAI_API_KEY | Planning scraper | Vision-guided planning portal scraper |
Land Registry PPD and Rightmove work without credentials.
# Install with dev extras
uv sync --extra dev
# Run API with reload
uv run uvicorn app.main:app --reload
# Run tests (mocked, no network)
uv run --extra dev pytest -v
# Run live integration tests (real network calls)
RUN_LIVE_TESTS=1 uv run --extra dev pytest -v
Deployed at https://property-shared.fly.dev with API docs at /docs and MCP endpoint at /mcp.
com.mcparmory/google-sheets
domdomegg/google-sheets-mcp
henilcalagiya/google-sheets-mcp
cct15/war-dashboard-data
moooonad/mcp-google-sheets-full
io.github.br0ski777/csv-to-json