---
name: real-agent-property-data
description: "PropertyData UK market analytics — postcode-keyed valuation, asking prices, sold prices, £/sqft baselines and growth, demand (sales + rent), yields, area risk (crime, flood), council tax, planning precedent, UPRN resolution, property-type mix, national HPI. One encrypted API key per account."
tools:
  - name: property-data-key-register
    publicAllowlist: false
    adminAllowlist: false
    riskClass: write_local
  - name: property-data-key-deregister
    publicAllowlist: false
    adminAllowlist: false
    riskClass: write_local
  - name: property-data-key-list
    publicAllowlist: false
    adminAllowlist: false
    riskClass: read
  - name: property-data-valuation-sale
    publicAllowlist: false
    adminAllowlist: false
    riskClass: read
  - name: property-data-valuation-rent
    publicAllowlist: false
    adminAllowlist: false
    riskClass: read
  - name: property-data-prices
    publicAllowlist: false
    adminAllowlist: false
    riskClass: read
  - name: property-data-prices-rent
    publicAllowlist: false
    adminAllowlist: false
    riskClass: read
  - name: property-data-sold-prices
    publicAllowlist: false
    adminAllowlist: false
    riskClass: read
  - name: property-data-demand
    publicAllowlist: false
    adminAllowlist: false
    riskClass: read
  - name: property-data-yields
    publicAllowlist: false
    adminAllowlist: false
    riskClass: read
  - name: property-data-growth
    publicAllowlist: false
    adminAllowlist: false
    riskClass: read
  - name: property-data-national-hpi
    publicAllowlist: false
    adminAllowlist: false
    riskClass: read
  - name: property-data-prices-per-sqf
    publicAllowlist: false
    adminAllowlist: false
    riskClass: read
  - name: property-data-sold-prices-per-sqf
    publicAllowlist: false
    adminAllowlist: false
    riskClass: read
  - name: property-data-crime
    publicAllowlist: false
    adminAllowlist: false
    riskClass: read
  - name: property-data-flood-risk
    publicAllowlist: false
    adminAllowlist: false
    riskClass: read
  - name: property-data-council-tax
    publicAllowlist: false
    adminAllowlist: false
    riskClass: read
  - name: property-data-planning-applications
    publicAllowlist: false
    adminAllowlist: false
    riskClass: read
  - name: property-data-address-match-uprn
    publicAllowlist: false
    adminAllowlist: false
    riskClass: read
  - name: property-data-growth-psf
    publicAllowlist: false
    adminAllowlist: false
    riskClass: read
  - name: property-data-demand-rent
    publicAllowlist: false
    adminAllowlist: false
    riskClass: read
  - name: property-data-property-types
    publicAllowlist: false
    adminAllowlist: false
    riskClass: read
skills:
  - skills/property-data/SKILL.md
always: false
metadata: {"platform":{"optional":true,"embed":["admin"]}}
mcp:
  command: node
  args:
    - ${PLATFORM_ROOT}/lib/mcp-spawn-tee/dist/index.js
    - ${PREMIUM_PLUGINS_ROOT}/real-agent/plugins/property-data/mcp/dist/index.js
  env:
    MCP_SPAWN_TEE_NAME: property-data
    LOG_DIR: ${LOG_DIR}
    PLATFORM_ROOT: ${PLATFORM_ROOT}
    ACCOUNT_ID: ${ACCOUNT_ID}
    SESSION_ID: ${SESSION_ID}
mcp-manifest: auto
---

# Real Agent — PropertyData

Local stdio MCP that proxies the PropertyData UK market-analytics HTTP API (propertydata.co.uk). Postcode-keyed analytics powering valuer + negotiator workflows: comparable evidence, asking-price baselines, sold-price history, demand index, rental yield, growth signals, and the national house-price index.

## Capabilities

- **Key management** — register, deregister, and list a single PropertyData API key per account. AES-256-GCM encrypted at rest in Neo4j under the `PropertyDataKey` label.
- **Valuation** — point-estimate sale and rent valuations from postcode + property attributes (`valuation-sale`, `valuation-rent`).
- **Asking-price baselines** — live mean / median / 80th-percentile asking prices for sale and rent in a postcode (`prices`, `prices-rent`).
- **Sold-price history** — Land Registry sold transactions filtered by postcode, property type, and age (`sold-prices`).
- **Demand index** — number of properties currently for sale vs. average days to sell-STC for a postcode (`demand`).
- **Rental yield** — gross yield estimates by postcode and bedroom count (`yields`).
- **Growth signals** — short and long-term price growth by postcode (`growth`).
- **National house-price index** — UK-wide HPI series (`national-hpi`).
- **£/sqft baselines** — asking and achieved £/sqft distributions for a postcode (`prices-per-sqf`, `sold-prices-per-sqf`), plus a 7-year £/sqft growth series with year-on-year percent change (`growth-psf`).
- **Area risk** — recent crime statistics with breakdown by type (`crime`); river and sea flood-risk rating for a full postcode (`flood-risk`).
- **Cost of occupancy** — council-tax authority, rating, and per-band charges (`council-tax`).
- **Planning precedent** — planning applications near a postcode with references, proposals, decisions, appeals, distance (`planning-applications`). Costs 2 credits per call; upstream-throttled to ~4 calls / 10 s.
- **Address resolution** — full address → UPRN, classification, lat/lng (`address-match-uprn`). Costs 10 credits per call — call once per address you actually need to resolve.
- **Rental demand signals** — for-rent count, lets per month, turnover, months of inventory, days on market, rating (`demand-rent`).
- **Property-type mix** — output-area distribution by property class (`property-types`).

## Security

The PropertyData API key is encrypted at rest with AES-256-GCM. The encryption-key file lives at `~/<configDir>/.property-data-encryption-key` (platform mode) or `~/.claude/.realagent-property-data-encryption-key` (standalone mode), both with mode `0600`. Never include the key value in responses; identify the key by registration timestamp only. If the operator asks for the key value, explain that keys are encrypted and cannot be retrieved — they must be re-registered from the PropertyData dashboard.

## Standalone mode (`~/.claude/` spawn)

The same `mcp/dist/index.js` boots in two environments, selected by env flag:

| Env var | Platform mode | Standalone mode |
|---|---|---|
| `PROPERTY_DATA_STANDALONE` | unset | `"1"` |
| `ACCOUNT_ID` | platform tenant id | absent (defaults to `"local"`) |
| `NEO4J_URI` etc. | required | unused |
| `PROPERTY_DATA_API_KEY` | unused | optional one-shot bypass (skips the store entirely) |

In standalone mode keys live at `~/.claude/.realagent-property-data-key.enc`. See `.docs/realagent-mcps-standalone-mode.md` for the full contract.

## When to use these tools

### Pillar 1 — Comparable evidence for valuation

**Triggers** — operator says "comps for", "sold prices around", "what's gone for", "comparable evidence":
- `property-data-sold-prices` — Land Registry sold prices for the postcode

### Pillar 2 — Asking-price baselines and point valuations

**Triggers** — operator says "what's it worth", "asking prices in", "point estimate", "ballpark":
- `property-data-valuation-sale` — point sale estimate for postcode + attributes
- `property-data-valuation-rent` — point rent estimate
- `property-data-prices` — distribution of asking prices for sale
- `property-data-prices-rent` — distribution of asking prices for rent

### Pillar 3 — Demand + yield + growth (negotiation signals)

**Triggers** — operator says "demand in", "yield on", "growth", "is the market moving":
- `property-data-demand` — supply count + average days to sell-STC
- `property-data-demand-rent` — for-rent count, lets per month, months of inventory, days on market
- `property-data-yields` — gross rental yield by bedroom count
- `property-data-growth` — short and long-term price growth
- `property-data-growth-psf` — 7-year £/sqft series with YoY%
- `property-data-national-hpi` — national HPI context

### Pillar 4 — £/sqft baselines

**Triggers** — operator says "psf in", "price per square foot in", "£/sqft":
- `property-data-prices-per-sqf` — asking £/sqft distribution
- `property-data-sold-prices-per-sqf` — achieved £/sqft distribution

### Pillar 5 — Area risk + cost of occupancy + planning + UPRN + mix

**Triggers** — operator says "crime in", "flood risk for", "council tax band for", "planning applications near", "what's the UPRN of", "property-type mix in":
- `property-data-crime` — area-risk crime stats
- `property-data-flood-risk` — river/sea flood rating (full postcode only)
- `property-data-council-tax` — council, rating, A–H bands (full postcode only)
- `property-data-planning-applications` — planning precedent (2 credits/call, upstream-throttled)
- `property-data-address-match-uprn` — full address → UPRN (10 credits/call)
- `property-data-property-types` — output-area type distribution

### Key prerequisite

Every PropertyData tool requires a registered key. If `property-data-key-list` returns nothing for the account, surface the registration prompt before attempting any other call — every downstream tool will return `status=key-missing` otherwise.

## Tool error envelope

Every tool returns either the PropertyData `data` payload as JSON text or an `isError: true` envelope with deterministic text shape:

- `Error: key-not-registered. Register a PropertyData API key with property-data-key-register before calling this tool.`
- `Error: http-<status> from PropertyData. <message>`
- `Error: bad-response from PropertyData (non-JSON, length=<n>).`

Operators see the reason directly; downstream skills branch on the prefix.
