OpenSkagit MCP

Technical Endpoint Surface

Read-only MCP endpoints for parcel lookup, overlays, comps, and guarded NLQ.

spec: mcp_agent_openapi.json openapi 3.1.0 version 0.1.0

Execution Flow

Typical request sequence for deterministic parcel answers with documented fallback behavior.

1

Resolve parcel_id

Start with lookup to resolve a parcel from free text address or parcel fragment.

2

Load parcel context

Fetch bundle/history/flood/neighborhood/comps endpoints for deterministic parcel facts.

3

Expand with overlays and legal

Pull overlay layers or legal sections for jurisdiction and compliance context.

4

Fallback to NLQ

Use guarded natural-language SQL only when structured endpoints are insufficient.

Endpoint Domains

Grouped by API path families extracted from the OpenAPI document.

Service Health

1 ops

Ping endpoint used by clients to verify API availability before data calls.

GET

health

Parcel Discovery

1 ops

Search by parcel number or address text to resolve parcel_id.

GET

lookupParcel

Parcel Intelligence

8 ops

Core parcel context: bundle, valuation history, flood metrics, comps, and neighborhood trends.

GET POST

parcelBundle

parcelFloodMetrics

parcelHistoryRows

parcelImageryChangeCompare

parcelIntersect

parcelListing

parcelNeighborhoodMetrics

parcelSalesComps

Overlay Engine

2 ops

Layer catalog + parcel overlay extraction for mapped reference datasets.

GET

overlayGet

overlayList

Legal Code

3 ops

Jurisdiction-aware legal search and section retrieval from ingested code sources.

GET

legalGet

legalJurisdictions

legalSearch

Guarded NLQ

1 ops

Natural-language SQL fallback with schema/context and execution guardrails.

POST

nlq

Capability Coverage

Feature list inferred from endpoint paths, summaries, and descriptions.

Health check endpoint for API uptime verification
Parcel lookup by address or parcel number
Parcel bundle with site facts, geometry, and overlays in one payload
Valuation and tax roll history for a parcel
FEMA flood zone indicators and base flood elevations where available
Check a parcel against zoning, flood, shoreline, wetlands, city limits, and fire districts
Neighborhood ratios and trend context around a parcel
Comparable sales near a parcel with guardrails on fit
List and fetch overlays and reference layers for a location
Legal code search and section retrieval by jurisdiction
Guardrailed natural-language answers when structured tools are not enough

Guardrails

  • 14 of 16 operations use GET for read-only retrieval.
  • Search/list routes set explicit result caps (for example, limit <= 25).
  • Overlay intersection is constrained to allowlisted layer keys.
  • NLQ route is documented with SQL guardrails and execution checks.
  • Invalid or missing inputs return explicit 400-series responses.

Request Constraints

GET /agent/legal/search/

limit: 1..25, default 10

GET /agent/lookup/

limit: 1..25, default 10

POST /agent/nlq/

body.timeout_ms: 500..10000, default 3000

POST /agent/nlq/

body.max_tables: default 8

POST /agent/nlq/

body.refresh_schema: default False

GET /agent/parcel/{parcel_id}/imagery-change/

z: 0..22, default 19

GET /agent/parcel/{parcel_id}/imagery-change/

tile_span: 0..1, default 0

GET /agent/parcel/{parcel_id}/imagery-change/

analyze: default True

GET /agent/parcel/{parcel_id}/imagery-change/

model: default gemini-2.0-flash

GET /agent/parcel/{parcel_id}/imagery-change/

compact: default False

GET /agent/parcel/{parcel_id}/listing/

site: default redfin

GET /agent/parcel/{parcel_id}/listing/

model: default gemini-2.0-flash

Endpoint Matrix

Operation-level view generated from mcp_agent_openapi.json (updated 2026-02-26 14:19 UTC).

Method Path Operation Inputs Responses
GET /agent/health/

health

Health check for MCP agent

No input parameters

200
GET /agent/legal/get/

legalGet

Get full legal section by stable ID

id* jurisdiction*
200 400 404
GET /agent/legal/jurisdictions/

legalJurisdictions

List legal jurisdictions

No input parameters

200
GET /agent/legal/search/

legalSearch

Search legal code by jurisdiction

jurisdiction* q*
limit
200 400
GET /agent/lookup/

lookupParcel

Search parcels by number or address

q*
limit
200 400
POST /agent/nlq/

nlq

Natural language to SQL with guardrails

body.question*
body.max_tables body.refresh_schema body.timeout_ms
200 400 502
GET /agent/overlay/get/

overlayGet

Fetch overlay payload for a parcel

layers* parcel_id*
200 400 404 500
GET /agent/overlay/list/

overlayList

List enabled overlays from v_overlay_list

No input parameters

200
GET /agent/parcel/{parcel_id}/bundle/

parcelBundle

Parcel bundle from v_parcel_bundle_core

parcel_id*
200 404
GET /agent/parcel/{parcel_id}/flood/

parcelFloodMetrics

Parcel FEMA flood metrics

parcel_id*
200 404
GET /agent/parcel/{parcel_id}/history/

parcelHistoryRows

Parcel valuation history rows

parcel_id*
200 404
GET /agent/parcel/{parcel_id}/imagery-change/

parcelImageryChangeCompare

Parcel aerial imagery change detection (2019 vs current) with assessor sketch

parcel_id*
analyze compact include_ai_inputs include_raw_text include_tile_arrays model tile_span z
200 400 404
POST /agent/parcel/{parcel_id}/intersect/

parcelIntersect

Intersect parcel with allowed reference layers

body.layers* parcel_id*
200 400 404
GET /agent/parcel/{parcel_id}/listing/

parcelListing

Grounded parcel listing research (Gemini + Google Search)

parcel_id*
include_raw model site
200 400 404
GET /agent/parcel/{parcel_id}/neighborhood-metrics/

parcelNeighborhoodMetrics

Neighborhood metrics and trends for parcel

parcel_id*
200 404
GET /agent/parcel/{parcel_id}/sales-comps/

parcelSalesComps

Sales comparables near parcel

parcel_id*
base_radius_m limit max_radius_m months
200 400 404 500