tool · mcp server

uk land registry mcp

thirty years of every property sale in england and wales, handed to claude as eighteen tools — and taught when to refuse to answer.

the land registry publishes all of this already. the problem is shape: sold prices come out of a sparql endpoint, the index is a linked-data cube, and company ownership is a 300mb monthly csv with no query api at all. so the server does the joining — you ask in english, it picks the endpoint, and every number below came back from a live query while this page was being written.

  • 18tools
  • ~30Mtransactions
  • 1995records from
  • 0keys to start

what it does

eighteen tools, four questions

install it and your assistant can answer four kinds of question about property in england and wales — what something sold for, how prices have moved, which company owns what, and what sits around a plot. ask in plain english; the server picks the endpoint, writes the query and hands back a table.

what it sold for

3 tools
no key needed

every sale registered since 1995 — one address’s full history with the appreciation worked out, everything that changed hands on a street or in a postcode, or the median, mean and type breakdown for a whole district.

  • what did 14 manvers street, bath sell for?
  • what sold on this street in 2023?
  • median flat price in ts1 2 last year, against the year before

how prices moved

3 tools
no key needed

the official house price index — mix-adjusted, so it is not thrown by which houses happened to sell. sliceable by property type, first-time-buyer status and cash-versus-mortgage, and it will restate an old price in any later month’s money.

  • how has middlesbrough tracked against england?
  • first-time buyer prices in wales over five years
  • £185,000 in march 2017 — what is that today?

who owns it

4 tools
free key + one download

the corporate and overseas ownership registers: titles held by a named company, every corporately-owned title in an area, and overseas holdings broken down by jurisdiction of incorporation. companies only — property held by individuals is not published in bulk.

  • what does this company own in england and wales?
  • who owns property in sw1 through offshore companies?
  • which jurisdictions own the most in westminster?

what surrounds it

5 tools
free key + one download

inspire title boundaries — a parcel’s geometry and area, what adjoins it, everything inside a radius filtered by size — plus registered lease and restrictive-covenant flags against a title. the polygons are indicative, not legal boundaries.

  • how big is this plot, and what adjoins it?
  • any corporately-owned land within 50m?
  • does this title carry a restrictive covenant?

three more tools do the plumbing: postcode → coordinates, district and ward; a status call that reports what is cached and what to fetch next; and the downloader for the bulk datasets. three bundled prompts wrap the common jobs — a due-diligence report on an address, an ownership investigation, a site analysis.

with a key, and without

the two halves

the split is not a paywall — it is how hm land registry publishes. sold prices and the index are live query endpoints, so those tools work the moment you install. ownership and boundaries ship only as monthly bulk files with no query api, so they need a free key and a one-off download that lands in a local duckdb cache. everything runs on your machine over stdio; nothing leaves it but the government queries.

no account · 8 tools

straight out of the box

nothing to sign up for

sold prices, the house price index and postcode lookups are live query endpoints — the server talks to them directly, so they answer the moment you have installed it. no key, no download, no waiting: the question goes out as sparql and the table comes back.

  • every registered sale in england and wales since 1995
  • one address’s history, with the appreciation worked out
  • medians and type breakdowns for a street, postcode or district
  • the official index, and old prices restated in today’s money

“what did 52 coates avenue, ts4 3aq sell for?”

52 COATES AVENUE, TS4 3AQ — 2 registered sales
29 jul 2022   £186,100    —       —
20 apr 2026   £195,000   +4.8%   +1.3%/yr

one round trip to the land registry’s sparql endpoint, no local state at all.

free key · 10 more tools

with a free land registry key

registration, plus one download per dataset

ownership, boundaries and the due-diligence flags are published only as monthly bulk files — there is no query api to point at. so the key is not a paywall, it is a licence acceptance: you register, tick the licence for each dataset, and the server pulls that file down once into a local duckdb cache. after that the queries are local and fast, and the datasets refresh monthly whenever you ask it to.

  • which companies — uk or overseas — hold title in an area
  • everything one named company owns, nationwide
  • overseas holdings ranked by jurisdiction of incorporation
  • a plot’s boundary, its area, and what adjoins it
  • registered lease and restrictive-covenant flags on a title

“who owns property in sw1 through offshore companies?”

→ hmlr_data_status   ocod cached · july 2026
→ hmlr_search_ownership_by_area
   title · proprietor · country of incorporation

answered from the local cache — the shape of the return, not a live figure. ask the server for the actual numbers.

one flat, twenty-three years

the flat that never caught up

flat 34, connaught mansions — a georgian block on great pulteney street in bath. five sales since 1995. the black line is what it actually changed hands for; the pink line is that first £170,000 carried forward on bath and north east somerset's own house price index. they part in 2006 and never rejoin.

£0£200k£400k£600k£800k19982006201220172021
sold forindex says
  • +210.6%over 22.87 years
  • +5.1%a year, compounded
  • −32%below the local index

the gap is the finding, not the explanation. a shortening lease, the condition of one flat, or simply a 1998 sale struck above the going rate would each produce this shape — and indexing from a single transaction inherits whatever that transaction got wrong. the server reports the divergence and stops there.

the market around it

bath, and everywhere else

the same question one level up. 2,568 arm's-length residential sales completed in bath and north east somerset during 2024 — median £400,000, up 1.6% on the year before.

bath and north east somerset, 2024
typesalesmedian
detached555£632,250
semi-detached652£387,500
terraced817£370,000
flat544£284,000

category a only — arm's-length residential sales at full market value. leave the repossessions and corporate transfers in and one £11m warehouse moves a whole district's mean.

average price, jan 2021 → jan 2026

and the counterintuitive one. over five years london added 4.5%; the north east added twenty. the index is mix-adjusted, so this is not a compositional trick — it is the gap closing.

  • london£553,088+4.5%
  • bath & n.e. somerset£414,276+17.4%
  • england£290,356+16.2%
  • north east£159,530+20.3%

the part i am proudest of

what it will not tell you

ask for the history of 33 st james's square in bath and an earlier build answered confidently: thirteen sales, a tidy appreciation column, one line reading +3,742.8% a year.

before

11 feb 2000£173,000+3,742.8%/yr

none of it was real. 33 st james's square is a georgian townhouse cut into flats, and the land registry recorded those flats without unit numbers — so "consecutive sales" were different flats. a 75% fall in a month was one flat being smaller than the last.

after

11 feb 2000£173,000

the server now checks whether a run of sales can belong to one dwelling before it does any arithmetic. when it cannot, the percentages come back empty and it says why. the sales are still listed — it just refuses to subtract them.

these 13 sales cannot be attributed to a single dwelling, because the sales are of flats and no saon was given, so this address may cover every flat in the building rather than one of them.

a tool that is wrong out loud is worse than one that is silent, because a table of percentages reads as fact. most of the work here was not adding tools — it was finding the places where confident output was fiction.

under it

the same query, 250× apart

the endpoint holds about thirty million transactions and evaluates patterns roughly in the order you write them. put the postcode filter after the optional blocks and it walks the lot.

filter written last> 70stimes out
filter written first0.27ssame answer

so the query builder emits the selective triples first, drops the type triple entirely — it alone matches every row — and keeps the optional projections last. searches too broad to be made selective are refused locally rather than sent off to time out. the ordering is asserted in the test suite, because nothing else would catch it going wrong.

run it yourself

setup, from nothing

it is not on npm yet, so there is no one-line install — you clone it and build it once. about two minutes, and you need nothing but node. the first three steps are the whole job; step four is only for the ownership and boundary tools.

  1. check you have node 22

    the server is a node process your client starts on demand. nothing else to install — no docker, no python, no account.

    node --version   # v22 or later

    older node will build and then fail at runtime; the test suite uses native typescript stripping.

  2. clone and build it

    one command, run wherever you keep repos. it compiles to dist/index.js — that file is what your client will run.

    git clone https://github.com/light-vp/uk-land-registry-mcp.git
    cd uk-land-registry-mcp
    npm install
    npm run build
  3. point your client at it

    stay in the repo directory for the claude code line — $PWD fills in the absolute path for you. for claude desktop, paste the block into claude_desktop_config.json and swap in the real path, then restart the app.

    claude code
    claude mcp add land-registry -- node "$PWD/dist/index.js"
    claude desktop · claude_desktop_config.json
    {
      "mcpServers": {
        "land-registry": {
          "command": "node",
          "args": ["/absolute/path/to/uk-land-registry-mcp/dist/index.js"]
        }
      }
    }

    that is it for sold prices, the index and postcode lookups. ask “how has the middlesbrough housing market moved over the last five years?” and you should get a table back.

  4. optional — turn on ownership and boundaries

    register free at use-land-property-data.service.gov.uk, then accept the licence for each dataset you want — access is granted per dataset, and a key that works for ccod will not fetch ocod until you accept ocod’s licence too. that one thing causes nearly every 403. add the key to the same config and restart.

    claude code
    claude mcp add land-registry --env HMLR_API_KEY=your-key-here -- node "$PWD/dist/index.js"
    claude desktop · alongside "args"
    "env": { "HMLR_API_KEY": "your-key-here" }

    then ask it to download the overseas ownership dataset — smallest of the bulk files, and a good first one. the downloader always reports the file name and size before fetching anything, so you see the cost before you commit; ccod is several hundred mb. everything lands in ~/.hmlr-mcp.

the readme covers the rest — every tool, the failure modes worth knowing, and why a boundary polygon can never be joined to its owner using open data alone.

source ↗MIT

contains hm land registry data © crown copyright and database right, licensed under the open government licence v3.0. not legal advice.