Skip to main content
Glama
JDuRieu26

RoyceCo Victorian Property Data MCP

by JDuRieu26
README.md
# RoyceCo — Victorian Property Data MCP connector

An authless remote MCP server that gives Claude live access to **free, open
Victorian government spatial data** for property due diligence.

There are no API keys, no secrets and no accounts. Every upstream service is
public and keyless, and all of it is licensed **CC BY 4.0** — which means, unlike
commercial property data, you may reproduce it in a report you send to a
financier or a joint venture partner, with attribution.

## What it gives you

| Tool | What it answers |
|---|---|
| `vic_site_screen` | **Start here.** Everything below in one call, plus a `gating_items` list of issues that must be priced or conditioned before going unconditional. |
| `vic_find_address` | Resolve an address to Vicmap candidates with coordinates and property PFI. |
| `vic_planning_controls` | Zone, every overlay, urban growth boundary, urban growth area, bushfire prone area. |
| `vic_parcel_details` | Parcel SPI and PFI, plan and lot number, land area in true square metres, council property number, mapped easements, Crown land tenure. |
| `vic_contamination_screen` | EPA Priority Sites Register, EPA audits and licences, landfill register, PRSA, groundwater restricted use zones, Environmental Audit Overlay. |
| `vic_heritage_screen` | Victorian Heritage Register, Heritage Inventory, Heritage Overlay, Aboriginal cultural heritage sensitivity, Registered Aboriginal Parties. |
| `vic_flood_screen` | Statutory flood overlays (LSIO, SBO, FO, RFO, UFZ) and modelled extents with reliability and method. |
| `vic_growth_and_gaic_screen` | Urban growth boundary, land added since 2005, potential GAIC land, Precinct Structure Plan, Urban Growth Zone. |

Every response carries `caveats` and an `authoritative_source`. The caveats are
not boilerplate — they record where the data will mislead you. Read them.

## Install

You need [Node 20+](https://nodejs.org) and a free
[Cloudflare account](https://dash.cloudflare.com/sign-up).

```bash
cd royceco-vic-property-mcp
npm install
```

### Step 1 — run the smoke test FIRST

```bash
npm test
```

This calls the live Victorian services and checks the results are sane. **The
important assertion is the spatial filter test**: it queries two points in
different municipalities and proves they return different answers.

That test exists because during development a different fetch layer silently
ignored the point geometry and returned the first feature in the layer — a public
park in Banyule, for an address in Pakenham. It looked like a clean answer. A
tool that can do that is worse than no tool.

**If the spatial filter test fails, do not connect this to Claude.** A wrong
planning zone invalidates an entire due diligence report.

### Step 2 — deploy

```bash
npx wrangler login     # opens your browser, one time only
npm run deploy
```

Wrangler prints the deployed URL, something like:

```
https://royceco-vic-property.<your-subdomain>.workers.dev
```

Open that URL in a browser. You should see a RoyceCo-branded status page listing
the tools. If you do, it is running.

Cost: this sits inside Cloudflare's free tier — 100,000 requests a day. A busy
month of due diligence will not come close.

### Step 3 — connect it to Claude

1. Go to claude.ai → **Settings → Connectors → Add custom connector**
2. Paste the MCP endpoint, which is your deployed URL **with `/mcp` on the end**:
   `https://royceco-vic-property.<your-subdomain>.workers.dev/mcp`
3. Save. No authentication is required.
4. Start a new conversation and ask: *"Run a Victorian site screen on 75 Main
   Street, Pakenham."*

### Step 4 — verify it end to end

Ask Claude to screen an address you already know well — ideally a site RoyceCo
has transacted on. Check the zone, the overlays and the land area against your
own records before you rely on it for a live deal.

## Local development

```bash
npm run dev          # http://localhost:8787
npm run tail         # live logs from the deployed worker
```

Test the deployed endpoint directly:

```bash
curl -s https://<your-worker>/mcp \
  -H 'Content-Type: application/json' \
  -d '{"jsonrpc":"2.0","id":1,"method":"tools/list"}' | head -40
```

## What this is not

- **Not a substitute for the authoritative record.** A report cites a dated
  VicPlan planning property report and a LANDATA title search, not this
  connector. Use it to find the issue fast; cite the source that stands up.
- **Not a title search.** Easements here come from a mapping layer. Registered
  easements, restrictive covenants and s173 agreements come from the title and
  the s32, and nowhere else.
- **Not a title area.** Areas are computed from parcel geometry and are
  approximate. The plan of subdivision governs.
- **Not evidence of absence.** A nil result from a contamination or flood
  register means *not listed* or *not modelled*. It never means *not affected*.

## Data sources

All CC BY 4.0 via [DataVic](https://discover.data.vic.gov.au), verified live on
17 August 2026:

- **Vicmap** Address, Property, Parcel, Planning, Crown Land Tenure, Admin,
  Easements — Department of Transport and Planning
- **VicPlan** planning scheme overlays, heritage, growth areas
- **Victorian Flood Database** — CFA, DEECA
- **Victoria Unearthed** — EPA Victoria priority sites, audits, licences, landfills
- **Victorian Planning Authority** — precinct structure plans, potential GAIC land

Attribution is emitted with every tool response and must be carried into any
document that reproduces the data:

> Contains Vicmap data © State of Victoria (Department of Transport and
> Planning), licensed under CC BY 4.0.

## Maintenance

Government endpoints move. If a tool starts failing, run `npm test` — it will
tell you which service broke. Endpoint URLs and layer IDs are all in
`src/services.js`, one object per service, with a comment explaining the
coordinate reference system trap for each. Nothing else needs to change.

Re-run the smoke test quarterly alongside the statutory review in the
`royceco-property-analyst` skill.