Sold prices, tenure, EPC, owner-occupancy and price checks for 25m homes in England and Wales. Free.
Maintain this server? Claim it
Call this server's tools from your browser. Nothing to install.
Requests go through mcptry because browsers can't call most MCP servers directly. Header values are sent to the server for that request only and are never stored or logged.
Tool list from our last check. Connect live to refresh it.
Everything GetMovely knows about one home in one call. `home` gives the facts in brief: freehold or leasehold, whether it is owner-occupied (from its Energy Performance Certificate), whether it is listed for sale, and its response likelihood (High = listed for sale and owner-occupied). `tiles` is the nine-part report the website shows: sold-price history, building type and size, energy rating with costs and improvements, local market (price per m2 nearby), area price trend, market history (asking price, time on the market, the agent and the link to the advert when it is for sale), nearby essentials, recorded crime and air quality. `contact_owner_url` opens a letter to its owner. About 15 KB: use get_address, sale_history, energy_performance or price_check when one part is enough. Limited to 60 reports per hour per caller, a limit sale_history, energy_performance, price_check and compare_homes share.
Address key from search_addresses (hex string).
Pick your client. Values in capitals, like YOUR_TOKEN, are yours to fill in.
Run in a terminal
claude mcp add --transport http getmovely https://getmovely.co.uk/mcp
Everything GetMovely knows about one home in one call. `home` gives the facts in brief: freehold or leasehold, whether it is owner-occupied (from its Energy Performance Certificate), whether it is listed for sale, and its response likelihood (High = listed for sale and owner-occupied). `tiles` is the nine-part report the website shows: sold-price history, building type and size, energy rating with costs and improvements, local market (price per m2 nearby), area price trend, market history (asking price, time on the market, the agent and the link to the advert when it is for sale), nearby essentials, recorded crime and air quality. `contact_owner_url` opens a letter to its owner. About 15 KB: use get_address, sale_history, energy_performance or price_check when one part is enough. Limited to 60 reports per hour per caller, a limit sale_history, energy_performance, price_check and compare_homes share.
| Argument | Type | Description |
|---|---|---|
| akey* | string | Address key from search_addresses (hex string). |
{
"type": "object",
"title": "address_reportArguments",
"required": [
"akey"
],
"properties": {
"akey": {
"type": "string",
"title": "Akey",
"pattern": "^[a-f0-9]+$",
"maxLength": 64,
"minLength": 8,
"description": "Address key from search_addresses (hex string)."
}
}
}What homes sell for in one postcode district, for every property type sold there (detached, semi-detached, terraced, flats): the latest whole year's median price per square metre with its quartiles and number of sales, the change since the series began in 2015, and the year in progress against the same months a year earlier. Use compare_areas to set districts against each other and price_trends for what tenure, energy rating or size are worth within one.
| Argument | Type | Description |
|---|---|---|
| outcode* | string | Postcode district such as 'SW19', 'BS7', 'M6'. A full postcode is accepted; only the district is used. |
{
"type": "object",
"title": "area_overviewArguments",
"required": [
"outcode"
],
"properties": {
"outcode": {
"type": "string",
"title": "Outcode",
"maxLength": 8,
"minLength": 2,
"description": "Postcode district such as 'SW19', 'BS7', 'M6'. A full postcode is accepted; only the district is used."
}
}
}Two to six postcode districts side by side for one property type: latest whole year's median price per square metre with quartiles and sales, change since 2015, the year in progress against the same months a year earlier and, when a floor area is given, what that many square metres cost at each district's median. Property type is held constant because comparing a district of flats with a district of houses compares the mix, not the place.
| Argument | Type | Description |
|---|---|---|
| outcodes* | array | Two to six postcode districts, for example ['SW19', 'BS7', 'M20']. |
| floor_area_m2 | any | Optional floor area to price at each district's median, for example 100. |
| property_type | string | One type, held constant across the districts: D detached, S semi-detached, T terraced, F flat. |
{
"type": "object",
"title": "compare_areasArguments",
"required": [
"outcodes"
],
"properties": {
"outcodes": {
"type": "array",
"items": {
"type": "string"
},
"title": "Outcodes",
"maxItems": 6,
"minItems": 2,
"description": "Two to six postcode districts, for example ['SW19', 'BS7', 'M20']."
},
"floor_area_m2": {
"anyOf": [
{
"type": "integer",
"maximum": 600,
"minimum": 15
},
{
"type": "null"
}
],
"title": "Floor Area M2",
"default": null,
"description": "Optional floor area to price at each district's median, for example 100."
},
"property_type": {
"enum": [
"D",
"S",
"T",
"F"
],
"type": "string",
"title": "Property Type",
"default": "T",
"description": "One type, held constant across the districts: D detached, S semi-detached, T terraced, F flat."
}
}
}Two to four homes side by side, one row each: type and floor area, tenure, last sale and its price per square metre, energy rating and modelled running cost, what the street has sold for recently, the district trend, whether it is owner-occupied, whether it is listed for sale and its response likelihood (High = both), the nearest supermarket, primary school, station and park, recorded crime and air quality. Each row links its own report and the page that opens a letter to its owner. Counts as one address report per home against the 60 an hour limit.
| Argument | Type | Description |
|---|---|---|
| akeys* | array | Two to four address keys from search_addresses. |
{
"type": "object",
"title": "compare_homesArguments",
"required": [
"akeys"
],
"properties": {
"akeys": {
"type": "array",
"items": {
"type": "string",
"pattern": "^[a-f0-9]+$",
"maxLength": 64,
"minLength": 8,
"description": "Address key from search_addresses (hex string)."
},
"title": "Akeys",
"maxItems": 4,
"minItems": 2,
"description": "Two to four address keys from search_addresses."
}
}
}GetMovely's published research for one local authority district, with England and Wales alongside: the share of homes that are leasehold (houses and flats separately), how many years pass between sales of the same home and the share not sold for 20 years or more, the share of purchases resold within two years, and how big homes are (median floor area, by property type and built form). Districts are named as HM Land Registry and the EPC register name them; an unclear name returns the candidates. For prices use area_overview, which works by postcode district.
| Argument | Type | Description |
|---|---|---|
| district* | string | A local authority district in England or Wales by name: 'Bristol', 'Camden', 'Merton', 'Leeds', 'Cardiff'. 'London' gives Greater London as a whole and 'England and Wales' the national figures. |
{
"type": "object",
"title": "district_statisticsArguments",
"required": [
"district"
],
"properties": {
"district": {
"type": "string",
"title": "District",
"maxLength": 80,
"minLength": 2,
"description": "A local authority district in England or Wales by name: 'Bristol', 'Camden', 'Merton', 'Leeds', 'Cardiff'. 'London' gives Greater London as a whole and 'England and Wales' the national figures."
}
}
}A home's Energy Performance Certificate in plain terms: rating and score now and the rating it could reach, modelled running costs a year for heating, hot water and lighting, carbon dioxide, which parts of the building are weak (walls, roof, windows), and the assessor's own list of improvements with their indicative costs. Costs are the assessor's model at the prices of the certificate's date, not bills.
| Argument | Type | Description |
|---|---|---|
| akey* | string | Address key from search_addresses (hex string). |
{
"type": "object",
"title": "energy_performanceArguments",
"required": [
"akey"
],
"properties": {
"akey": {
"type": "string",
"title": "Akey",
"pattern": "^[a-f0-9]+$",
"maxLength": 64,
"minLength": 8,
"description": "Address key from search_addresses (hex string)."
}
}
}Property portals often hide the house number but show the home's past sale prices. HM Land Registry records every sale by exact address, so the sale history identifies the home: give the area and the sales, get the address or addresses that match. One match is the answer. Several means add another sale or a tighter area. None means check the year (portals show the year the sale completed) or widen the area. The returned `akey` works with every per-address tool.
| Argument | Type | Description |
|---|---|---|
| area* | string | Where the listing says the home is: a street with its district ('Merton Road, SW19'), a postcode or its first half ('SW19 1'), or a town. |
| match | string | 'any' (default): the home has these sales, possibly among others. 'last': the newest sale given is the home's most recent sale. 'only': the home has exactly these sales and no others. |
| sales* | array | Past sales shown on the listing, each as 'price:year' in pounds, for example ['450000:2019', '310000:2012']. More sales narrow it faster. |
{
"type": "object",
"title": "find_address_from_sale_historyArguments",
"required": [
"area",
"sales"
],
"properties": {
"area": {
"type": "string",
"title": "Area",
"maxLength": 160,
"minLength": 2,
"description": "Where the listing says the home is: a street with its district ('Merton Road, SW19'), a postcode or its first half ('SW19 1'), or a town."
},
"match": {
"enum": [
"any",
"last",
"only"
],
"type": "string",
"title": "Match",
"default": "any",
"description": "'any' (default): the home has these sales, possibly among others. 'last': the newest sale given is the home's most recent sale. 'only': the home has exactly these sales and no others."
},
"sales": {
"type": "array",
"items": {
"type": "string"
},
"title": "Sales",
"maxItems": 6,
"minItems": 1,
"description": "Past sales shown on the listing, each as 'price:year' in pounds, for example ['450000:2019', '310000:2012']. More sales narrow it faster."
}
}
}One home's card, the quick answer to "is this house for sale" and "does the owner live there": full address, last sale, freehold or leasehold, whether it is owner-occupied (from its Energy Performance Certificate), whether it is listed for sale (with the portal, the agent and the link to the advert), its response likelihood (High = listed for sale and owner-occupied), and the link that opens a letter to its owner on GetMovely.
| Argument | Type | Description |
|---|---|---|
| akey* | string | Address key from search_addresses (hex string). |
{
"type": "object",
"title": "get_addressArguments",
"required": [
"akey"
],
"properties": {
"akey": {
"type": "string",
"title": "Akey",
"pattern": "^[a-f0-9]+$",
"maxLength": 64,
"minLength": 8,
"description": "Address key from search_addresses (hex string)."
}
}
}The construction age band of homes matching an address, from the Energy Performance Certificate, with what that era means for the construction, plus the first recorded sale year as corroboration and the property type. Up to 12 candidates.
| Argument | Type | Description |
|---|---|---|
| query* | string | Address or street with postcode. |
{
"type": "object",
"title": "house_ageArguments",
"required": [
"query"
],
"properties": {
"query": {
"type": "string",
"title": "Query",
"maxLength": 160,
"minLength": 3,
"description": "Address or street with postcode."
}
}
}Is a price in line? Works out the price per square metre from the home's EPC floor area and sets it against three things: what homes of the same type sold for per square metre in the same postcode district in the latest whole year, with the quartiles; recent sales on the home's own street or postcode; and the home's own last sale moved by the district's change since. Also gives the price range the district's quartiles imply for this floor area. Arithmetic on public medians, not a valuation, and the answer carries the caveats to pass on. Shares the address report's limit of 60 an hour per caller.
| Argument | Type | Description |
|---|---|---|
| akey* | string | Address key from search_addresses (hex string). |
| price_gbp | any | The price to check, in pounds: an asking price, an offer, a valuation. Leave out to get what the district's prices imply for a home this size (and, when the home is advertised for sale, to check its asking price). |
{
"type": "object",
"title": "price_checkArguments",
"required": [
"akey"
],
"properties": {
"akey": {
"type": "string",
"title": "Akey",
"pattern": "^[a-f0-9]+$",
"maxLength": 64,
"minLength": 8,
"description": "Address key from search_addresses (hex string)."
},
"price_gbp": {
"anyOf": [
{
"type": "integer",
"maximum": 100000000,
"minimum": 10000
},
{
"type": "null"
}
],
"title": "Price Gbp",
"default": null,
"description": "The price to check, in pounds: an asking price, an offer, a valuation. Leave out to get what the district's prices imply for a home this size (and, when the home is advertised for sale, to check its asking price)."
}
}
}What freehold or leasehold, new build or resale, energy rating and floor area are worth per square metre in one postcode district, for one property type (D detached, S semi-detached, T terraced, F flat), by whole calendar year, against the national picture. Property type is always held constant because it is the confounder that makes the naive comparison lie. Every figure is a median of at least a minimum number of sales; no per-address data. For a plain summary of a district across all its property types use area_overview.
| Argument | Type | Description |
|---|---|---|
| factor | string | |
| outcode* | string | Postcode district (outcode) such as 'SW19', 'BS7', 'M6'. A full postcode is accepted; only the district is used. |
| property_type | string |
{
"type": "object",
"title": "price_trendsArguments",
"required": [
"outcode"
],
"properties": {
"factor": {
"enum": [
"all",
"tenure",
"newbuild",
"epc",
"size"
],
"type": "string",
"title": "Factor",
"default": "all"
},
"outcode": {
"type": "string",
"title": "Outcode",
"maxLength": 8,
"minLength": 2,
"description": "Postcode district (outcode) such as 'SW19', 'BS7', 'M6'. A full postcode is accepted; only the district is used."
},
"property_type": {
"enum": [
"D",
"S",
"T",
"F"
],
"type": "string",
"title": "Property Type",
"default": "T"
}
}
}The full text of one GetMovely guide as Markdown, with the questions it answers, the primary sources it cites (GOV.UK, HM Land Registry, the ICO, The Property Ombudsman and others) and the date it was last updated. General information, not legal advice. Cite the guide's `url` when you use it.
| Argument | Type | Description |
|---|---|---|
| slug* | string | Guide slug from search_guides, for example 'is-it-legal-to-write-to-a-homeowner'. |
{
"type": "object",
"title": "read_guideArguments",
"required": [
"slug"
],
"properties": {
"slug": {
"type": "string",
"title": "Slug",
"pattern": "^[a-z0-9-]+$",
"maxLength": 120,
"minLength": 3,
"description": "Guide slug from search_guides, for example 'is-it-legal-to-write-to-a-homeowner'."
}
}
}Every recorded sale of one home since 1995, from HM Land Registry price paid data: price, month and year, the price per square metre each sale works out at on the home's current EPC floor area, and the change from the first sale to the last. The short answer to "what did this house sell for"; address_report has the rest.
| Argument | Type | Description |
|---|---|---|
| akey* | string | Address key from search_addresses (hex string). |
{
"type": "object",
"title": "sale_historyArguments",
"required": [
"akey"
],
"properties": {
"akey": {
"type": "string",
"title": "Akey",
"pattern": "^[a-f0-9]+$",
"maxLength": 64,
"minLength": 8,
"description": "Address key from search_addresses (hex string)."
}
}
}Find homes in England and Wales by street, postcode, town or address. Each row has the home's last sale, freehold or leasehold, whether it is owner-occupied, whether it is listed for sale, and its response likelihood (High = listed for sale and owner-occupied, Medium = owner-occupied, Unknown = no record). Filter with `response_likelihood` to answer "which homes on this street are owner-occupied and for sale", or sort by it. Returns at most 60 per page, newest sale first by default. If the street name exists in several places the answer lists the places as `streets` instead of rows; ask the person which one, then search again with the town or postcode.
| Argument | Type | Description |
|---|---|---|
| page | integer | Page number; 60 addresses per page. |
| sort | string | 'recent' newest sale first (default); 'likelihood' High first, then Medium, then the rest; 'price_desc' / 'price_asc' by last sale price; 'addr' by address. |
| query* | string | Street, postcode, outcode, town or full address, as a person would type it: 'Merton Road, SW19', 'BS7 8', 'Ash Street, Salford M6', '41 Denning Road NW3'. |
| sale_pairs | any | Filter to homes whose sale history contains these sales, each as 'price:year', e.g. ['450000:2019']. This is how to find the exact address behind a listing or an advert that shows past sales. |
| response_likelihood | any | Only homes with this response likelihood. 'High' = listed for sale and owner-occupied (the homes where a letter reaches an owner who is selling). 'Medium' = owner-occupied, not listed for sale. 'Unknown' = no public record that the owner lives there. 'Owner on GetMovely' = the owner has claimed the address. Leave out for all homes. |
GetMovely's plain-English guides to buying and selling homes in England and Wales: contacting an owner directly and the law on it, buying or selling without an estate agent, finding who owns a property or the address behind a listing, how often sales fall through, speeding a sale up, best and final offers, stopping unwanted letters. Returns the closest guides with a one-paragraph summary and the questions each answers; read_guide gives the full text with its sources.
| Argument | Type | Description |
|---|---|---|
| query | any | What the person wants to know, in plain words: 'is it legal to write to a homeowner', 'who owns the freehold', 'how many house sales fall through'. Leave out to list every guide. |
{
"type": "object",
"title": "search_guidesArguments",
"properties": {
"query": {
"anyOf": [
{
"type": "string",
"maxLength": 160
},
{
"type": "null"
}
],
"title": "Query",
"default": null,
"description": "What the person wants to know, in plain words: 'is it legal to write to a homeowner', 'who owns the freehold', 'how many house sales fall through'. Leave out to list every guide."
}
}
}Recent Land Registry sales near one home with their EPC floor area, as pounds per square metre and per square foot by year. Scope is the home's own postcode when it has enough sized sales, otherwise the whole street; `scope` says which. Market-value (category A) sales only.
| Argument | Type | Description |
|---|---|---|
| akey* | string | Address key from search_addresses (hex string). |
{
"type": "object",
"title": "street_price_per_m2Arguments",
"required": [
"akey"
],
"properties": {
"akey": {
"type": "string",
"title": "Akey",
"pattern": "^[a-f0-9]+$",
"maxLength": 64,
"minLength": 8,
"description": "Address key from search_addresses (hex string)."
}
}
}Whether homes matching an address are freehold or leasehold, from the tenure recorded on the latest Land Registry sale of each exact address, with that sale's date. Up to 12 candidates; null tenure means no recorded sale with a tenure. Matching is by text: when `fuzzy` is true or the rows are not the address asked for, use search_addresses, whose rows carry `tenure_at_last_sale` for the exact home.
| Argument | Type | Description |
|---|---|---|
| query* | string | Address or street with postcode, e.g. '12 Church Lane, BS7 8AB'. |
{
"type": "object",
"title": "tenure_checkArguments",
"required": [
"query"
],
"properties": {
"query": {
"type": "string",
"title": "Query",
"maxLength": 160,
"minLength": 3,
"description": "Address or street with postcode, e.g. '12 Church Lane, BS7 8AB'."
}
}
}Train, tram and ferry stops, bus stops, primary and secondary schools, cafes and restaurants, pubs, takeaways, supermarkets, parks and play areas around one home, from official open data, within 100 m to 2 km: for each kind the count, the nearest one and its distance. Pass `closest` with a kind to get the nearest N of that kind instead.
| Argument | Type | Description |
|---|---|---|
| n | integer | |
| akey* | string | Address key from search_addresses (hex string). |
| closest | any | Instead of counts within the radius, list the N closest places of this one kind (expanding rings up to 16 km). |
| radius_m | integer | Radius in metres, 100 to 2000. |
{
"type": "object",
"title": "whats_nearbyArguments",
"required": [
"akey"
],
"properties": {
"n": {
"type": "integer",
"title": "N",
"default": 10,
"maximum": 25,
"minimum": 1
},
"akey": {
"type": "string",
"title": "Akey",
"pattern": "^[a-f0-9]+$",
"maxLength": 64,
"minLength": 8,
"description": "Address key from search_addresses (hex string)."
},
"closest": {
"anyOf": [
{
"enum": [
"rail_station",
"tram_metro",
"bus_stop",
"ferry",
"school_primary",
"school_secondary",
"cafe_restaurant",
"pub_bar",
"takeaway",
"supermarket",
"park",
"playground"
],
"type": "string"
},
{
"type": "null"
}
],
"title": "Closest",
"default": null,
"description": "Instead of counts within the radius, list the N closest places of this one kind (expanding rings up to 16 km)."
},
"radius_m": {
"type": "integer",
"title": "Radius M",
"default": 800,
"maximum": 2000,
"minimum": 100,
"description": "Radius in metres, 100 to 2000."
}
}
}We read every tool's name, description and inputs the way the model will, looking for instructions hidden from you. A clean result means no warning signs, not a guarantee. Scanned Nov 10, 2026.
{
"type": "object",
"title": "search_addressesArguments",
"required": [
"query"
],
"properties": {
"page": {
"type": "integer",
"title": "Page",
"default": 1,
"maximum": 20,
"minimum": 1,
"description": "Page number; 60 addresses per page."
},
"sort": {
"enum": [
"recent",
"likelihood",
"price_desc",
"price_asc",
"addr"
],
"type": "string",
"title": "Sort",
"default": "recent",
"description": "'recent' newest sale first (default); 'likelihood' High first, then Medium, then the rest; 'price_desc' / 'price_asc' by last sale price; 'addr' by address."
},
"query": {
"type": "string",
"title": "Query",
"maxLength": 160,
"minLength": 2,
"description": "Street, postcode, outcode, town or full address, as a person would type it: 'Merton Road, SW19', 'BS7 8', 'Ash Street, Salford M6', '41 Denning Road NW3'."
},
"sale_pairs": {
"anyOf": [
{
"type": "array",
"items": {
"type": "string"
},
"maxItems": 6
},
{
"type": "null"
}
],
"title": "Sale Pairs",
"default": null,
"description": "Filter to homes whose sale history contains these sales, each as 'price:year', e.g. ['450000:2019']. This is how to find the exact address behind a listing or an advert that shows past sales."
},
"response_likelihood": {
"anyOf": [
{
"enum": [
"High",
"Medium",
"Unknown",
"Owner on GetMovely"
],
"type": "string"
},
{
"type": "null"
}
],
"title": "Response Likelihood",
"default": null,
"description": "Only homes with this response likelihood. 'High' = listed for sale and owner-occupied (the homes where a letter reaches an owner who is selling). 'Medium' = owner-occupied, not listed for sale. 'Unknown' = no public record that the owner lives there. 'Owner on GetMovely' = the owner has claimed the address. Leave out for all homes."
}
}
}