{"name":"io.github.paulieb89/property-shared","slug":"paulieb89-property-shared","title":"UK Property Data","description":"UK property data — Land Registry comps, EPC, Rightmove, rental yields, stamp duty, Companies House","url":"https://mcp.market/server/paulieb89-property-shared","rating":null,"grade":"A","score":93,"certified":false,"status":"active","category":"other","tags":[],"presence":{"score":44,"stars":16,"forks":4,"downloads_week":75,"last_push_at":"2026-09-04T23:40:17.000Z","license":"MIT"},"uptime":{"percent":100,"checks":28,"ok":28,"last_checked_at":"2026-11-05T10:55:49.231Z","last_ok_at":"2026-11-05T10:55:49.231Z","latency_ms":38},"claimed":false,"transport":"mixed","callable_via_gateway":true,"default_price_micros":0,"repository":"https://github.com/paulieb89/property-shared","website":"https://bouch.dev/products/property-report","version":"1.5.1","remotes":[{"type":"streamable-http","url":"https://property-shared.fly.dev/mcp"}],"packages":[{"registryType":"pypi","identifier":"property-shared","version":"1.5.1","runtimeHint":"uvx","transport":{"type":"stdio"}}],"tools":[{"name":"company_search","description":"Search Companies House for a company by name.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"name":{"type":"string"}},"required":["name"],"additionalProperties":false}},{"name":"epc_certificate","description":"Fetch a single EPC certificate by its GOV.UK certificate number.\n\nUse after property_epc_summaries has listed the candidates and you have\npicked one — this is faster than property_epc(postcode, address) as it makes\na direct lookup with no address matching or postcode re-fetch.\n\nThe parameter is named lmk_key as a compatibility alias; pass the\ncertificate number, which is returned in every property_epc_summaries row.\n(property_epc_search is deprecated and raises — do not call it.)\n\nReturns the full EPC certificate, or null only when no such certificate is lodged. A null result means no such certificate is lodged. If the EPC service cannot be reached the tool raises an error instead — never treat an error as evidence that a property has no certificate.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"lmk_key":{"type":"string"}},"required":["lmk_key"],"additionalProperties":false}},{"name":"planning_search","description":"Find the council planning portal URL for a postcode.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"postcode":{"type":"string"}},"required":["postcode"],"additionalProperties":false}},{"name":"ppd_transactions","description":"Land Registry Price Paid transactions for a postcode, most recent first.\n\nReturns up to `limit` most recent transactions **within snapshot coverage**\n(`coverage_from`-`coverage_to` in the response's `provenance`).\nUnfiltered by default -- category-B bulk transfers and commercial sales are\nincluded. Pass `property_type` (F=flat, D=detached, S=semi, T=terraced,\nO=other) to restrict the result to a single type.\n\n**Not a complete property history.** Check `provenance.older_records_exist`\nand `provenance.sample_complete` before saying anything about what a\nproperty has or has not sold for. An empty result means \"no sales within\nthe stated coverage\" -- never \"never sold\". For clean residential\ncomparable sales, use `property_comps`.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"postcode":{"type":"string"},"limit":{"default":10,"type":"integer"},"property_type":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null}},"required":["postcode"],"additionalProperties":false}},{"name":"property_blocks","description":"Property block analysis — identify buildings with multiple flat sales (block-buy opportunities).","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"postcode":{"type":"string"},"search_level":{"default":"sector","type":"string"},"months":{"default":24,"description":"Number of calendar months ending today; default 24. Results are limited to available coverage.","minimum":1,"type":"integer"}},"required":["postcode"],"additionalProperties":false}},{"name":"property_comps","description":"Comparable sales from Land Registry Price Paid Data.\n\nDefaults return the standard residential set:\n- property_type=None means residential (F+D+S+T). Pass \"F\"/\"D\"/\"S\"/\"T\"/\"O\"\n  for a single type, or \"ALL\" to disable type filtering (firehose).\n- transaction_category defaults to \"A\" (standard sales). Pass None to\n  include category-B (bulk transfers, non-standard conveyances).\n- filter_outliers=False by default; set True for IQR-trimmed stats AND\n  transaction list (1.5*IQR rule, needs >=4 prices).\n\nlimit caps returned transactions (max 200). enrich_epc attaches EPC floor\narea and price-per-sqft to each transaction — slower but richer.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"postcode":{"type":"string"},"months":{"default":24,"description":"Number of calendar months ending today; default 24. Results are limited to available coverage.","minimum":1,"type":"integer"},"property_type":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null},"transaction_category":{"anyOf":[{"type":"string"},{"type":"null"}],"default":"A"},"filter_outliers":{"default":false,"type":"boolean"},"search_level":{"default":"sector","type":"string"},"address":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null},"limit":{"default":50,"type":"integer"},"enrich_epc":{"default":false,"type":"boolean"}},"required":["postcode"],"additionalProperties":false}},{"name":"property_epc","description":"Energy Performance Certificate data for a UK property or postcode area.\n\nWith address: returns the matched EPC certificate for that specific property.\nWithout address: returns the record count and, when the bounded response\ncontains every matching summary, the rating distribution. Property-type\nbreakdown and floor-area statistics are NOT available — the EPC service\nexposes them only on individual certificates.\n\nReturns null only when no certificates are lodged for the postcode. A null result means no such certificate is lodged. If the EPC service cannot be reached the tool raises an error instead — never treat an error as evidence that a property has no certificate.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"postcode":{"type":"string"},"address":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null}},"required":["postcode"],"additionalProperties":false}},{"name":"property_epc_search","description":"DEPRECATED — use property_epc_summaries then epc_certificate.\n\nThis tool returned score, floor_area, property_type, habitable_rooms and\ninspection_date for every certificate at a postcode. The EPC service no\nlonger exposes those fields in a search: they exist only on a full\ncertificate. Reproducing the old response would require one upstream\nrequest per certificate, so this tool is unsupported rather than silently\ndegraded or silently expensive.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"postcode":{"type":"string"}},"required":["postcode"],"additionalProperties":false}},{"name":"property_epc_summaries","description":"List EPC certificate summaries at a postcode — for candidate selection.\n\nReturns one bounded page. Each entry contains only what the EPC search\nexposes: certificate_number, address, uprn (often absent), energy band,\nregistration_date and schema_type. Energy score, floor area and property\ntype are NOT available here — fetch a specific certificate for those.\n\nWorkflow when a Rightmove listing has no house number:\n  1. property_epc_summaries(postcode) to list candidates.\n  2. Narrow by address text and, where present, uprn.\n  3. epc_certificate(lmk_key=<certificate_number>) for the chosen one, then\n     cross-check its floor_area against the listing.\n  4. If several candidates remain equally plausible, present them all —\n     do not guess. Selecting arbitrarily attaches another property's data.\n\n`complete` is false when the postcode holds more records than this page\nreturns. Upstream page traversal is not snapshot-stable, so a multi-page\nresult is a bounded sample, not a guaranteed-complete set.\n\nAn empty `results` list means no certificates are lodged. If the EPC service\ncannot be reached the tool raises an error instead — never treat an error as\nevidence that a property has no certificate.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"postcode":{"type":"string"},"page":{"default":1,"type":"integer"}},"required":["postcode"],"additionalProperties":false}},{"name":"property_yield","description":"Gross rental yield for a UK postcode.\n\nCombines Land Registry sale comps (median sale price) with Rightmove rental\nlistings (median monthly rent) to produce a gross yield percentage.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"postcode":{"type":"string","description":"UK postcode (e.g. \"NG1 2NS\")."},"months":{"default":24,"description":"Number of calendar months ending today; default 24. Results are limited to available coverage.","minimum":1,"type":"integer"},"search_level":{"default":"sector","type":"string","description":"PPD search granularity — \"postcode\", \"sector\" (default),\nor \"district\"."},"property_type":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Filter sales by type. None (default) = residential set\n(F+D+S+T). Pass \"F\"/\"D\"/\"S\"/\"T\"/\"O\" for one type, \"ALL\" for firehose."},"auto_escalate":{"default":true,"type":"boolean","description":"Compatibility parameter. Does NOT widen the search area on\nthe live source (see `warnings`); previously postcode→\nsector→district. Default True. Set False for strict-locality only."}},"required":["postcode"],"additionalProperties":false}},{"name":"rental_analysis","description":"Rental market analysis and achievable rent estimate.\n\nauto_escalate widens the Rightmove search RADIUS when fewer than 5 listings\nare found (thin market). This is rental-radius escalation and is unaffected\nby the PPD geography containment: it does not change a postcode's outcode or\nsector, so it carries none of the limit-dependence that disabled PPD\nauto-widening. Response includes thin_market, escalated_from, escalated_to\nfields when escalation occurs.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"postcode":{"type":"string"},"radius":{"default":0.5,"type":"number"},"purchase_price":{"anyOf":[{"type":"integer"},{"type":"null"}],"default":null},"auto_escalate":{"default":true,"type":"boolean"}},"required":["postcode"],"additionalProperties":false}},{"name":"rightmove_listing","description":"Full detail for a single Rightmove listing.\n\nproperty_id is the numeric Rightmove property ID (the digits at the end of a\nrightmove.co.uk/properties/... URL), max 12 digits. Full URLs are not accepted.\ninclude_images fetches and embeds photos and floorplans as MCP image content.\nmax_images caps the number of property photos (default 3); floorplans always included.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"property_id":{"type":"string"},"include_images":{"default":false,"type":"boolean"},"max_images":{"default":3,"type":"integer"}},"required":["property_id"],"additionalProperties":false}},{"name":"rightmove_search","description":"Fetch Rightmove listings for a postcode.\n\nlisting_type: \"sale\" or \"rent\". sort_by: \"newest\", \"most_reduced\",\n\"price_asc\", \"price_desc\". Images are excluded from results.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"postcode":{"type":"string"},"listing_type":{"default":"sale","type":"string"},"radius":{"default":0.5,"type":"number"},"property_type":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null},"min_bedrooms":{"anyOf":[{"type":"integer"},{"type":"null"}],"default":null},"max_price":{"anyOf":[{"type":"integer"},{"type":"null"}],"default":null},"sort_by":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null},"max_pages":{"default":3,"type":"integer"}},"required":["postcode"],"additionalProperties":false}},{"name":"stamp_duty","description":"UK Stamp Duty Land Tax (SDLT) calculation with full breakdown.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"price":{"type":"integer"},"additional_property":{"default":false,"type":"boolean"},"first_time_buyer":{"default":false,"type":"boolean"},"non_resident":{"default":false,"type":"boolean"}},"required":["price"],"additionalProperties":false}}],"scan":{"score":93,"grade":"A","scanned_at":"2026-09-27T22:32:46.094Z","report":{"scannerVersion":"0.1.9","scannedAt":"2026-09-27T22:32:46.142Z","components":{"code":{"score":25,"max":25,"notes":["89 source files scanned"]},"reliability":{"score":20,"max":20,"notes":["remote reachable in 688ms"]},"poisoning":{"score":15,"max":15,"notes":["14 tool descriptions checked"]},"auth":{"score":10,"max":15,"notes":["open endpoint, read-only tools"]},"maintenance":{"score":15,"max":15,"notes":["last push 23 days ago"]},"identity":{"score":8,"max":10,"notes":["registry namespace matches repository owner","GitHub account older than a year"]}},"findings":[],"inputs":{"probes":[{"url":"https://property-shared.fly.dev/mcp","reachable":true,"authRequired":false,"latencyMs":688,"serverInfo":{"name":"property-data","version":"1.19.1"}}],"packages":[{"registryType":"pypi","identifier":"property-shared","version":"1.5.1","found":true,"weeklyDownloads":75,"license":"MIT","dependencyCount":21,"publishedAt":"2026-04-20T01:38:44.533744Z"}],"repo":{"found":true,"owner":"paulieb89","repo":"property-shared","archived":false,"pushedAt":"2026-09-04T23:40:17Z","stars":16,"forks":4,"openIssues":4,"ownerType":"User","ownerAvatarUrl":"https://avatars.githubusercontent.com/u/6341227?v=4","ownerCreatedAt":"2014-01-07T16:37:08Z","license":"MIT"},"icon":{"url":"https://bouch.dev/favicon.ico?favicon.0x3dzn~oxb6tn.ico?dpl=dpl_7Nn4XZTh5BUg67Y4NGVpvE86g1Qd","source":"site","width":256,"height":256},"presence":{"stars":16,"forks":4,"downloadsWeek":75,"license":"MIT","lastPushAt":"2026-09-04T23:40:17.000Z","score":44}}}},"grade_history":[],"reviews":[]}