Developer reference

PropDocket API and MCP

Florida property, permit, hazard, and zoning data for your code and your AI agents. One endpoint, two ways in: OAuth for agents, API keys for servers and scripts.

AI agents

Point any MCP client at the endpoint. It discovers our sign-in, you approve it once, and every tool below is available to your agent. No key to paste.

Setup steps for each client →

Servers and scripts

Create an API key in the app and send it as a bearer token. Keys are scoped to your organization, shown once, and can be rotated or revoked at any time.

API key quickstart →

Endpoint

Agents and servers use the same endpoint. Requests are JSON-RPC over HTTPS; every request is authenticated on its own.

Endpoint

https://mcp.propdocket.com/mcp

Protocol

MCP 2026-07-28

Transport

Streamable HTTP · POST JSON-RPC

Accept header

application/json, text/event-stream

Authenticate with Authorization: Bearer … — an OAuth access token for agents, or an API key for servers. Sign-in discovery lives at https://mcp.propdocket.com/.well-known/oauth-protected-resource/mcp.

Connect an AI agent (OAuth)

Most clients only need the endpoint URL. The client registers itself, opens our sign-in page, and asks you to approve access for your organization. After that, the tools just work.

# OAuth 2.1 authorization-code + PKCE
	# Discover the sign-in server from the protected-resource metadata:
	curl -sS https://mcp.propdocket.com/.well-known/oauth-protected-resource/mcp
	
	# Example: Codex CLI
	codex mcp add propdocket --url https://mcp.propdocket.com/mcp
	codex mcp login propdocket
	
	# Steps for every other client: https://propdocket.com/mcp
	

Using Claude, ChatGPT, Cursor, Codex, or another client? The MCP page has the exact steps for each one.

Connect a server or script (API key)

Create a key in the app under Settings. The full key is shown once. Each key is bound to your organization, limited to the scopes you pick, marked test or live, and can be rotated or revoked on its own.

# Per-organization API key
	# Store the one-time value outside source control and shell history.
export PROPDOCKET_API_KEY='pd_test_<kid>_<secret>'

curl -sS -X POST https://mcp.propdocket.com/mcp \
  -H 'Authorization: Bearer '"$PROPDOCKET_API_KEY" \
  -H 'MCP-Protocol-Version: 2026-07-28' \
  -H 'Mcp-Method: tools/call' \
  -H 'Mcp-Name: get_property_basics' \
  -H 'Content-Type: application/json' \
  -H 'Accept: application/json, text/event-stream' \
  -d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"get_property_basics","arguments":{"address":"10109 Spyglass Ln, Port St Lucie, FL 34986"},"_meta":{"io.modelcontextprotocol/protocolVersion":"2026-07-28","io.modelcontextprotocol/clientInfo":{"name":"propdocket-quickstart","version":"0.1.0"},"io.modelcontextprotocol/clientCapabilities":{}}}}'

# The key is organization-bound, scope-limited, environment-bound, rotatable,
# and revocable. Do not use x-api-key or a query-string credential.

The example calls get_property_basics. Swap in any tool name from the list below.

Tools

Narrow by design. Ask for one thing and get one thing; ask for the full report only when you need it. Tool names are stable — we do not rename them or add version suffixes.

Property

  • get_property_reportThe full record for one parcel: ownership, valuation, structure, jurisdiction, flood, wind, elevation, permits, and zoning. Every value carries its source.
  • get_property_basicsOwner, year built, living area, valuation, and legal description.
  • get_property_floodFEMA flood zone, base flood elevation, and whether the parcel sits in a Special Flood Hazard Area.
  • get_property_windASCE 7-22 design wind speed by risk category.
  • get_property_seismicSeismic design parameters for the site class you choose.
  • search_propertiesFind parcels by address, parcel ID, owner, or coordinates. Returns candidates and how each one matched.

Permits

  • get_permitOne permit in full.
  • get_permit_statusWhere a permit stands today.
  • get_permit_inspectionsInspection history for a permit.
  • get_permit_documentsDocuments attached to a permit.
  • get_permit_workflowThe review steps for a permit and which are complete.
  • list_permits_at_propertyEvery permit on record at a property.
  • search_permits_by_licensePermits filed under a contractor's license number.

Zoning

  • resolve_zoningZoning district, future land use, and overlays for a parcel, from the jurisdiction's official GIS.
  • get_district_profileSetbacks, height, lot coverage, density, and permitted uses for a zoning district, each cited to the ordinance section.
  • check_useWhether a proposed use is permitted, conditional, or prohibited in a district, with the citation.
  • check_site_planCheck proposed setbacks, height, and coverage against the district's standards.

Florida business entities

  • get_entityA Florida business entity record by document number.
  • search_entitiesSearch Florida business entities by name.
  • search_by_officer_or_agentFind Florida business entities by officer or registered agent.
  • search_by_feiFind a Florida business entity by federal employer ID.
  • ingest_statusHow current the Florida business entity dataset is.

Feedback

  • submit_feedbackReport a wrong or missing value. Include the request ID and we investigate.

What every response carries

Source and date

Every value names the record it came from and when we retrieved it, and says whether it was verified against that record or compiled from the ordinance.

match_method

How the address resolved. An exact match says exact. Anything else says what it actually did, so a close match is never mistaken for certainty.

missing_sources

Any source we could not reach, named in the payload. A gap is a value you can read, not a field you have to notice is absent.

request_id

A reference for every call. Include it when you report a problem and we can trace exactly what happened.

Pricing

PropDocket is free during the beta. No card required. We'll email you before billing starts. See pricing.

Building with an AI agent?

Everything on this page is also published for agents at /llms.txt. Hand your agent that link and it can connect itself.