Latest News

Introducing the Landrecords.us Parcel MCP Server

← All news

Ask an AI assistant who owns the lot next door and it will guess, hedge, or hallucinate — because it has no parcel data to look at. Today we’re fixing that: the nationwide parcel layer is now live over the Model Context Protocol. Point Claude, or any MCP-aware client or agent, at https://api.landrecords.us/mcp/sse and it can query 157M+ U.S. parcels directly — ownership, assessed values, land use, acreage, building attributes, and geometry — through eight structured, read-only tools.

Why MCP instead of “just use the API”

Our WMS/WFS endpoints have always been available, but handing an LLM a raw OGC service means handing it CQL syntax, layer names, projections, and a 50-column schema it has to guess at. MCP flips that around: the server tells the model what tools exist, what arguments they take, and what the columns mean, and the model composes the query. There’s no SQL to write, no CQL to escape, and no client library to build — the assistant discovers the parcel layer the same way it discovers any other tool.

Eight tools

  • parcel_schema — lists every column with its type and a plain-language description. The model calls this first, so it learns that area is stored in square meters and that statefp is a two-digit FIPS code before it writes a filter.
  • parcel_query — a structured where filter over any non-spatial column, AND-ed together, with operators eq, ne, gt, ge, lt, le, like, ilike, in, and is_null.
  • parcel_count — the same filter, but returns only a number. Useful when the answer is “how many,” and it keeps rows out of the model’s context.
  • parcel_by_id — a single parcel by its lrid UUID.
  • parcel_by_address — give it a free-form address; it geocodes the string and returns the parcels around that point, along with the location it resolved so the assistant can confirm it matched the address you meant.
  • parcel_near_point — parcels within a radius (in meters) of a longitude/latitude, backed by PostGIS DWITHIN.
  • parcel_within_bbox — parcels intersecting a WGS84 bounding box, for viewport-shaped searches.
  • parcel_within_polygon — parcels intersecting a GeoJSON Polygon or MultiPolygon, for city limits, service areas, or any custom shape.

Every list-returning tool takes limit and offset for pagination, plus columns to select a subset of fields — so an assistant can ask for just parceladdr, ownername, and totalvalue instead of pulling 50 columns it doesn’t need.

What a session looks like

The interesting part is that the assistant chains the tools on its own. Ask “who owns 123 Main St in Oakland, and what’s it assessed at?” and it calls parcel_by_address, reads back the geocode it matched, and reports the owner and value from the parcel that came back. Ask a follow-up like “how many parcels in Alameda County are single-family homes built after 1950?” and it checks the schema, resolves the county to its FIPS codes, and reaches for parcel_count instead of dragging thousands of rows into the conversation. Hand it a GeoJSON boundary and ask what’s inside, and it uses parcel_within_polygon. The tools are deliberately small so the model can pick the cheapest one that answers the question.

Connecting a client

The transport is Server-Sent Events, and authentication is the same API token you already use for the /pro endpoints, passed as Authorization: Bearer <token>. Any client that speaks remote MCP and lets you set a header can connect directly. For clients that expect a local command — Claude Desktop, for instance — mcp-remote bridges the two:

{
  "mcpServers": {
    "landrecords-parcels": {
      "command": "npx",
      "args": [
        "-y", "mcp-remote",
        "https://api.landrecords.us/mcp/sse",
        "--header", "Authorization: Bearer ${LR_TOKEN}"
      ],
      "env": { "LR_TOKEN": "your-api-token" }
    }
  }
}

Restart the client and the parcel tools show up alongside its others. GET https://api.landrecords.us/mcp/health is an unauthenticated liveness check if you want to confirm the server is reachable before you wire anything up.

Built to be safe to hand an LLM

Giving a language model direct access to a production database is a legitimate thing to be nervous about, so the server is narrow by design:

  • Read-only. Every tool issues a select against the parcel layer. There is no tool that can write, update, or delete anything.
  • Bounded responses. limit is clamped at 1,000 rows no matter what the caller asks for, and geometry is excluded by default — the model gets centroids and the spatial tools instead of megabytes of WKT.
  • Schema allow-list. Column names in where and columns are checked against the published schema, and values are type-checked and escaped, so an invented column name fails cleanly instead of turning into a malformed query.
  • Plan-gated and metered. Access is checked against your plan at connection time, and every tool call is metered and logged with the token, tool name, and arguments — the same audit trail as the rest of the API.

Fresh by default

The MCP server reads the same serving layer as the rest of api.landrecords.us, which means it inherits the weekly refresh we shipped earlier this month. Ownership transfers, new assessments, and newly ingested county boundaries reach your assistant on the same cycle they reach the tile and WFS endpoints — no quarterly wait, and nothing to re-sync on your end.

Get access

The MCP server is included in the existing Pro API plan at no additional cost — there’s no new SKU, no add-on, and no upgrade to buy. Pro subscribers get an allowance of MCP tool calls on top of the parcel record, tile, and query quotas already on the plan, and it shows up as its own line alongside them on your account page. The 14-day free trial includes an MCP allowance too, so you can try it before you subscribe. If you already have a Pro token, there’s nothing to enable — add the server to your client and start with parcel_schema. New to Landrecords? The Parcel Layer Managed Web Service is where to start, and the Web API documentation covers the service underneath. Either way, reach us at hello@landrecords.us — we’re actively expanding the tool set, so tell us what you want your agent to be able to ask about a parcel.