listClassesByDataGroup
List classes by data group
List classes for a property data group with names and descriptions
groupNamestringrequiredThe data group name, case-insensitive
The tool registry a client connects to: one definition set served over several transports, with a guarded query surface.
One registry is the single source both the standard-input entry and the HTTP entry read, so the two transports cannot drift apart. Every tool carries a title, a description, and a per-parameter description written for a model rather than for a reader who already knows the domain.
The query tools accept caller-written SQL, which is only safe because the guard is explicit. Four layers, in order: comments and string literals are stripped before any keyword matching, so a value like 'copy' inside a string cannot trip the filter; multiple statements are rejected; the statement must begin SELECT or WITH; and the caller's query is wrapped in an outer select with a row cap the caller cannot override.
Stripping literals before matching is what a plain keyword scan does not do. A scan over raw text rejects owners_text ILIKE '%copy%', which is a legitimate query, and a guard that rejects legitimate queries is one callers route around.
Tools that author their own SQL use a separate path with positional binding and skip the caller validator, because they are safe by construction rather than by inspection.
listClassesByDataGroupList classes by data group
List classes for a property data group with names and descriptions
groupNamestringrequiredThe data group name, case-insensitive
listPropertiesByClassNameList properties by class name
Lists JSON Schema property names for a property class (excludes source_http_request)
classNamestringrequiredThe class name, case-insensitive
getPropertySchemaGet property schema by class and property
Returns the full JSON Schema object for a class property
classNamestringrequiredClass name, case-insensitive
propertyNamestringrequiredProperty name, case-insensitive
getVerifiedScriptExamplesGet verified script examples
Get most relevant working examples of the code, that maps data to the canonical property schema
querystringrequiredDescription of the example meaning. Wll be used to search for similar examples.
topKnumberNumber of results (default 5)
listOraclePropertiesList Oracle open-data properties
Paginated discovery of properties for a county. Returns slim entries (propertyId, parcelIdentifier, cid, county, fileSizeBytes) plus summary fields (address, marketValue, ownerName) when served from the query table. Use getOracleProperty to fetch full consolidated data for a specific entry.
countystringFilter by county name (case-insensitive)
limitnumberNumber of results to return (default 50, max 500)
offsetnumberZero-based offset for pagination (default 0)
getOraclePropertyGet Oracle open-data property
Fetch the full consolidated property JSON (appraisal, permits, Sunbiz, BBB) from content-addressed storage. Provide exactly one of parcelIdentifier, propertyId, or cid.
parcelIdentifierstringThe property parcel identifier (digits) — looked up in the manifest to resolve its content-addressed storage content address
propertyIdstringThe property UUID — looked up in the manifest to resolve its content-addressed storage content address
cidstringcontent-addressed storage content address for the consolidated property JSON
countystringCounty to look up the parcel/property in (case-insensitive). Selects which county's open data to read when the deployment serves multiple counties.
getOracleDatasetInfoGet Oracle open-data dataset info
Returns dataset-level metadata for a county: county, propertyCount (live row count when served from the query table), state, and provenance/content address fields on the legacy path. When per-source coverage is configured, also returns datasets[] with, per source (appraisal, permits, sunbiz, bbb), ingestedCount, expectedCount, completionPercent, and first/last loaded timestamps — so callers can qualify partial answers by coverage. For a coverage-only county (no property dataset served) propertyCount is null and propertyDatasetAvailable is false, so callers can distinguish a missing property table from a county with zero properties.
countystringCounty to report dataset info for (case-insensitive). Selects which county's open data to read when the deployment serves multiple counties.
getPropertyPermitsGet property permits (on-demand)
Fetch permit records for a property by parcel ID. Returns cached permits immediately if available. If not cached, enqueues a harvest job (reuses the permit-harvest Lambda) and returns a status indicating the harvest is in progress — poll again after ~90 seconds. Permits are cached to content-addressed storage after harvest completes.
parcelIdstringrequiredThe property parcel identifier (digits, e.g. '1234567890000')
countyFipsstringCounty FIPS code (default: 12071 = Lee County FL)
findPropertiesInAreaFind properties in an area
Returns the set of properties whose centroid (latitude/longitude) falls inside a user-supplied bounding box or polygon. Provide exactly one of bbox or polygon. Reads the per-county property query table (falls back to the derived geo index); no NOAA/FEMA geometry is used.
sumPropertyValueInAreaSum property value in an area
Returns the exact sum of avm_value over the properties whose centroid falls inside a user-supplied bounding box or polygon, plus the in-area count. Null valuations are treated as 0. Provide exactly one of bbox or polygon. Reads the per-county property query table (falls back to the derived geo index).
queryPropertiesQuery properties (SQL)
Run a read-only SQL SELECT against a county's flat property query table (view name 'properties', one row per property) backed by embedded DuckDB. Use getPropertyQuerySchema first to see available columns. SAFETY: a single SELECT statement only (a leading WITH/CTE is allowed); multiple statements and any mutating or file/extension keyword (INSERT/UPDATE/DELETE/COPY/ATTACH/INSTALL/LOAD/PRAGMA/CALL/SET …) are rejected; results are always capped at 1000 rows.
countystringrequiredCounty to query (case-insensitive), e.g. 'Lee'.
sqlstringrequiredA single read-only SELECT statement over the 'properties' view.
limitnumberMax rows to return (default 100, max 1000). Always enforced.
getPropertyQuerySchemaGet property query schema
Returns the column list, DuckDB types, and a one-line description of each column of the 'properties' query table for a county, so queryProperties can be written without guessing. Notes that some coverage-dependent fields may be NULL.
countystringrequiredCounty to describe (case-insensitive), e.g. 'Lee'.
queryPermitsQuery permits (SQL)
Run a read-only SQL SELECT against a county's flat permit query table (view name 'permits', one row per building permit) backed by embedded DuckDB. Use getPermitQuerySchema first to see available columns and getPermitCoverage to qualify aggregate answers by source. SAFETY: a single SELECT statement only (a leading WITH/CTE is allowed); multiple statements and any mutating or file/extension keyword (INSERT/UPDATE/DELETE/COPY/ATTACH/INSTALL/LOAD/PRAGMA/CALL/SET …) are rejected; results are always capped at 1000 rows.
countystringrequiredCounty to query (case-insensitive), e.g. 'Lee'.
sqlstringrequiredA single read-only SELECT statement over the 'permits' view.
limitnumberMax rows to return (default 100, max 1000). Always enforced.
getPermitQuerySchemaGet permit query schema
Returns the column list, DuckDB types, and a one-line description of each column of the 'permits' query table for a county, so queryPermits can be written without guessing. Notes that date/value fields are frequently NULL depending on the permit source.
countystringrequiredCounty to describe (case-insensitive), e.g. 'Lee'.
getPermitCoverageGet permit coverage by source
Returns per-source-system permit coverage for a county from the 'permits' query table: each source_system with its permit_count and completion_date range (earliest/latest), plus the overall total. The donphan agent uses this to QUALIFY aggregate permit answers (permit data lags appraisals and some sources may have NULL dates).
countystringrequiredCounty to report permit coverage for (case-insensitive), e.g. 'Lee'.