Server definition
- Hash
- sha256:f384c3408d8eb4fb74ee66e55627d87c272ff5c7d045c25b0811b1ab7cbeda0c
- What it is
- What a remote MCP server returned when asked what it offers: 14 tools
The blob, as servednamed by its sha256
{
"instructions": "UK property data tools. For a comprehensive single-property analysis, invoke the `full_property_analysis` prompt — it instructs you to call property_comps, property_yield, property_epc and rightmove_search and synthesise. For postcode-only data fetches use property_comps and property_yield separately. ppd_transactions for recent transactions at a postcode -- bounded by the stated coverage in each response's `provenance`, never a full property history; an empty result means 'no sales in coverage', not 'never sold'. rightmove_search to browse listings by postcode, rightmove_listing for full detail on one listing, property_epc for energy certificates, rental_analysis for rental market figures, stamp_duty for SDLT, property_blocks for block-buy analysis, planning_search for council planning portals, company_search to find a company by name. Price Paid Data: contains HM Land Registry data (c) Crown copyright and database right, licensed under the Open Government Licence v3.0; see GET /v1/meta.",
"tools": [
{
"description": "Search Companies House for a company by name.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"name": {
"type": "string"
}
},
"required": [
"name"
],
"type": "object"
},
"name": "company_search",
"outputSchema": {
"additionalProperties": true,
"type": "object"
}
},
{
"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.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"lmk_key": {
"type": "string"
}
},
"required": [
"lmk_key"
],
"type": "object"
},
"name": "epc_certificate",
"outputSchema": {
"properties": {
"result": {
"anyOf": [
{
"additionalProperties": true,
"type": "object"
},
{
"type": "null"
}
]
}
},
"required": [
"result"
],
"type": "object",
"x-fastmcp-wrap-result": true
}
},
{
"description": "Find the council planning portal URL for a postcode.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"postcode": {
"type": "string"
}
},
"required": [
"postcode"
],
"type": "object"
},
"name": "planning_search",
"outputSchema": {
"additionalProperties": true,
"type": "object"
}
},
{
"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`.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"limit": {
"default": 10,
"type": "integer"
},
"postcode": {
"type": "string"
},
"property_type": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null
}
},
"required": [
"postcode"
],
"type": "object"
},
"name": "ppd_transactions",
"outputSchema": {
"additionalProperties": true,
"type": "object"
}
},
{
"description": "Property block analysis — identify buildings with multiple flat sales (block-buy opportunities).",
"inputSchema": {
"additionalProperties": false,
"properties": {
"months": {
"default": 24,
"description": "Number of calendar months ending today; default 24. Results are limited to available coverage.",
"minimum": 1,
"type": "integer"
},
"postcode": {
"type": "string"
},
"search_level": {
"default": "sector",
"type": "string"
}
},
"required": [
"postcode"
],
"type": "object"
},
"name": "property_blocks",
"outputSchema": {
"additionalProperties": true,
"type": "object"
}
},
{
"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.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"address": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null
},
"enrich_epc": {
"default": false,
"type": "boolean"
},
"filter_outliers": {
"default": false,
"type": "boolean"
},
"limit": {
"default": 50,
"type": "integer"
},
"months": {
"default": 24,
"description": "Number of calendar months ending today; default 24. Results are limited to available coverage.",
"minimum": 1,
"type": "integer"
},
"postcode": {
"type": "string"
},
"property_type": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null
},
"search_level": {
"default": "sector",
"type": "string"
},
"transaction_category": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": "A"
}
},
"required": [
"postcode"
],
"type": "object"
},
"name": "property_comps",
"outputSchema": {
"additionalProperties": true,
"type": "object"
}
},
{
"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.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"address": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null
},
"postcode": {
"type": "string"
}
},
"required": [
"postcode"
],
"type": "object"
},
"name": "property_epc",
"outputSchema": {
"properties": {
"result": {
"anyOf": [
{
"additionalProperties": true,
"type": "object"
},
{
"type": "null"
}
]
}
},
"required": [
"result"
],
"type": "object",
"x-fastmcp-wrap-result": true
}
},
{
"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.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"postcode": {
"type": "string"
}
},
"required": [
"postcode"
],
"type": "object"
},
"name": "property_epc_search",
"outputSchema": {
"properties": {
"result": {
"anyOf": [
{
"items": {
"additionalProperties": true,
"type": "object"
},
"type": "array"
},
{
"type": "null"
}
]
}
},
"required": [
"result"
],
"type": "object",
"x-fastmcp-wrap-result": true
}
},
{
"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.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"page": {
"default": 1,
"type": "integer"
},
"postcode": {
"type": "string"
}
},
"required": [
"postcode"
],
"type": "object"
},
"name": "property_epc_summaries",
"outputSchema": {
"additionalProperties": true,
"type": "object"
}
},
{
"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.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"auto_escalate": {
"default": true,
"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.",
"type": "boolean"
},
"months": {
"default": 24,
"description": "Number of calendar months ending today; default 24. Results are limited to available coverage.",
"minimum": 1,
"type": "integer"
},
"postcode": {
"description": "UK postcode (e.g. \"NG1 2NS\").",
"type": "string"
},
"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."
},
"search_level": {
"default": "sector",
"description": "PPD search granularity — \"postcode\", \"sector\" (default),\nor \"district\".",
"type": "string"
}
},
"required": [
"postcode"
],
"type": "object"
},
"name": "property_yield",
"outputSchema": {
"additionalProperties": true,
"type": "object"
}
},
{
"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.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"auto_escalate": {
"default": true,
"type": "boolean"
},
"postcode": {
"type": "string"
},
"purchase_price": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"default": null
},
"radius": {
"default": 0.5,
"type": "number"
}
},
"required": [
"postcode"
],
"type": "object"
},
"name": "rental_analysis",
"outputSchema": {
"additionalProperties": true,
"type": "object"
}
},
{
"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.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"include_images": {
"default": false,
"type": "boolean"
},
"max_images": {
"default": 3,
"type": "integer"
},
"property_id": {
"type": "string"
}
},
"required": [
"property_id"
],
"type": "object"
},
"name": "rightmove_listing",
"outputSchema": null
},
{
"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.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"listing_type": {
"default": "sale",
"type": "string"
},
"max_pages": {
"default": 3,
"type": "integer"
},
"max_price": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"default": null
},
"min_bedrooms": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"default": null
},
"postcode": {
"type": "string"
},
"property_type": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null
},
"radius": {
"default": 0.5,
"type": "number"
},
"sort_by": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null
}
},
"required": [
"postcode"
],
"type": "object"
},
"name": "rightmove_search",
"outputSchema": {
"properties": {
"result": {
"items": {
"additionalProperties": true,
"type": "object"
},
"type": "array"
}
},
"required": [
"result"
],
"type": "object",
"x-fastmcp-wrap-result": true
}
},
{
"description": "UK Stamp Duty Land Tax (SDLT) calculation with full breakdown.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"additional_property": {
"default": false,
"type": "boolean"
},
"first_time_buyer": {
"default": false,
"type": "boolean"
},
"non_resident": {
"default": false,
"type": "boolean"
},
"price": {
"type": "integer"
}
},
"required": [
"price"
],
"type": "object"
},
"name": "stamp_duty",
"outputSchema": {
"additionalProperties": true,
"type": "object"
}
}
]
}Verify it yourself
curl -s https://api.teppi.xyz/v1/evidence/sha256:f384c3408d8eb4fb74ee66e55627d87c272ff5c7d045c25b0811b1ab7cbeda0c | sha256sum