compare_listings
ChatGPTReturn side-by-side normalized details for 1 to 5 listing IDs.
compare_markets
ChatGPTCompare 2 to 5 labeled filter segments side by side.
compare_organizations
ChatGPTCompare 2 to 5 organizations within a filtered market slice.
create_listings_export
ChatGPTReturn CSV content and a download URL for listings matching the supplied filters. This tool must produce at most one file per user request and supports no more than 20 listings in that file. Do not split, batch, segment, or create multipart exports to work around that limit; if more than 20 listings match, tell the user to narrow the filters and try again. Do not imply that a local file attachment was created unless the client explicitly shows one. state, city, county, and postalCode accept either a single string or an array of strings; arrays are treated as OR matches.
enrich_listings_with_parcels
ChatGPTBatch-enrich up to 20 Resimplifi listings with Regrid parcel data. Accepts exact listingIds or listing search filters, resolves listing coordinates, matches parcels, and returns listing summaries, parcel match confidence, selected parcel records, alternate parcel matches, due-diligence metrics, warnings, and match-rate summary. Use this when users ask to combine listings with parcel ownership, valuation, flood risk, zoning, building age, acreage discrepancy, opportunity-zone, vacancy, terrain, or demographic signals.
find_parcel_by_coordinates
ChatGPTFind Regrid parcel records for a latitude/longitude. By default this returns parcels whose polygon contains the point; provide radiusMeters to search nearby parcels when the point is near a boundary or road centerline. Returns parcel identifiers, situs address, owner text, use description, zoning, assessed/tax fields, acreage, centroid, county coverage metadata, and source freshness. Use this tool for parcel, APN, assessor, zoning, owner, tax, lot-size, or land-record questions; do not use listing tools for parcel-only questions.
find_parcel_by_listing
ChatGPTFind Regrid parcel records for a Resimplifi listing ID. Resolves the listing's coordinates, matches parcels by point containment, optionally falls back to radiusMeters, and returns listing summary, parcel match confidence, selected parcel, alternate parcels, and derived due-diligence metrics such as ownership tenure, assessed-value gap, acreage discrepancy, absentee owner flag, and flood risk.
get_broker_coverage
ChatGPTReturn broker-profile coverage for listings matching the supplied filters. state, city, county, and postalCode accept either a single string or an array of strings; arrays are treated as OR matches.
get_business_ownership_lookup_status
ChatGPTPoll an OpenSOSData async lookup job returned by lookup_business_ownership. Use this after a lookup returns status queued with a job_id. Returns pending/processing status or the completed Secretary of State entity/UCC result without holding the original MCP request open.
get_city_demographics
ChatGPTReturn a compact city demographics summary using city name plus state, resolved through census geography mapping before querying the configured demographics dataset.
get_county_demographics
ChatGPTReturn a compact county demographics summary using county name plus state, resolved through census geography mapping before querying the configured demographics dataset.
get_inventory_snapshot
ChatGPTGroup matching listings by a market dimension and return counts plus share of inventory.
get_listing_completeness
ChatGPTScore listing completeness either for explicit listing IDs or for a filtered market slice.
get_listing_radius_demographics
ChatGPTReturn a compact 1, 3, and 5 mile ACS demographics summary around a listing or site using weighted overlap across census block groups. Prefer listingId, then addressQuery, then latitude/longitude.
get_listings_near_coordinates
ChatGPTSearch listings near a point within a radius in miles using Mongo geospatial queries. The center can come from explicit latitude/longitude, a listingId, or an addressQuery (resolved from an existing listing or geocoded via Google Maps for arbitrary addresses). state, city, county, and postalCode accept either a single string or an array of strings; arrays are treated as OR matches.
get_market_overview
ChatGPTReturn a pre-shaped market overview for listings matching the supplied filters. state, city, county, and postalCode accept either a single string or an array of strings; arrays are treated as OR matches.
get_organization_overview
ChatGPTReturn an organization-focused dashboard for listings matching the supplied filters. state, city, county, and postalCode accept either a single string or an array of strings; arrays are treated as OR matches.
get_price_distribution
ChatGPTReturn price or lease-rate buckets for listings matching the supplied filters. state, city, county, and postalCode accept either a single string or an array of strings; arrays are treated as OR matches.
get_related_listings
ChatGPTReturn similar active-market listings related to a seed listing.
get_size_distribution
ChatGPTReturn size buckets for square footage or acreage across listings matching the supplied filters. state, city, county, and postalCode accept either a single string or an array of strings; arrays are treated as OR matches.
get_zip_demographics
ChatGPTReturn a compact ZIP-code demographics summary for population, households, age, income, and housing using the configured demographics dataset.
lookup_parcel_by_apn
ChatGPTLook up Regrid/county assessor parcel records by assessor parcel number/APN, matching formatted and unformatted parcel numbers. Provide state and optionally county. Use this when the user supplies an APN or parcel number directly.
poi_enrichment
ChatGPTRun POI enrichment for up to 25 listing coordinates. By default this returns nearby category counts, nearest POIs, top nearby POIs, and optional text search in one response. Use operations to request one or more focused POI analyses in a single tool call: enrichment, count_by_radius, nearest_by_category, top_by_category, search_by_text, count_by_text_radius, nearest_by_text.
screen_listings_by_parcel_signals
ChatGPTScreen commercial real estate listings using parcel records from Regrid/county assessor sources. Use this when the user asks to compare listings by ownership tenure, asking-price/assessed-value gap, flood risk, zoning availability, building age, acreage discrepancy, opportunity-zone status, absentee ownership/vacancy, terrain, or demographic growth. Accepts listing IDs or listing search filters; evaluates 10 listings by default, capped at 20. Returns matching signals and supporting values, parcel-match confidence, warnings, and summary counts and thresholds. Each matching signal contributes one point. Results are sorted by score, then asking-price/assessed-value ratio, within the selected batch; this is not a market-wide ranking. A higher score means more matching signals, which can include risks or merely available information, not better investment quality or confirmed feasibility. Missing parcel data is not evidence that a risk is absent. Parcel records may lag assessor updates.
search_by_text
ChatGPTFull-text search across Atlas Search listing fields using fuzzy matching and relevance scoring. Searches: address, property name, city, county, organization, description, highlights, price text, and zoning. USE THIS TOOL when the user provides a property name (e.g. 'Oak Grove Plaza'), an address, keywords (e.g. 'warehouse loading docks'), pricing text, zoning terms, or any free-text query. This is the preferred tool for name-based lookups and natural language searches. query is canonical; address and addressQuery are accepted aliases.
search_listings
ChatGPTSearch active-market listings by exact listing ID, geography, property type, size, price, lease rate, media, organization, and recency. This tool is paginated and is for retrieving listing rows, not for answering total-count questions. For "how many", "count", "total listings", or broad market totals, prefer summarizeListings. For broad nationwide or all-state requests, use summarizeListings first and only use searchListings when the user explicitly wants listing rows. Preferred tool for exact listing ID or UUID lookups; use listingId when the user already provides a listing identifier. listingType accepts: sale, lease, sale/lease (for properties listed for both sale and lease). Defaults to active, pending, and reduced statuses. state, city, county, and postalCode accept either a single string or an array of strings; arrays are treated as OR matches.
search_listings_by_bbox
ChatGPTSearch listings whose location falls inside a geographic bounding box. Provide west, south, east, and north coordinates. Use this when the user gives map viewport bounds or asks for listings inside a rectangular map area. This tool is paginated and returns listing rows, not broad market totals. state, city, county, and postalCode accept either a single string or an array of strings; arrays are treated as OR matches.
search_listings_by_polygon
ChatGPTSearch listings whose location falls inside a simple polygon search area. Provide coordinates as an array of [longitude, latitude] pairs only. Do not pass GeoJSON, shapefiles, holes, multipolygons, or other complex geometry formats. The polygon is limited to 100 coordinate pairs. This tool is paginated and returns listing rows, not broad market totals. state, city, county, and postalCode accept either a single string or an array of strings; arrays are treated as OR matches.
search_parcels
ChatGPTSearch Regrid/county assessor parcel records directly by state, optional county, APN, situs address, owner, city, ZIP, zoning, land-use description, acreage, assessed value, year built, and opportunity-zone status. Use this for parcel-only questions such as zoning searches without first searching listings. Returns parcel identifiers, owner text, situs address, use/zoning, valuation/tax fields, acreage, centroid, county coverage metadata, and source freshness.
summarize_listings
ChatGPTReturn a compact summary of listings matching the supplied filters. Prefer this tool for "how many", count, and total-inventory questions because it returns summary counts without paginating listing rows. If the user asks for all U.S. listings or all 50 states, use this tool first to answer with totals before offering paginated rows. state, city, county, and postalCode accept either a single string or an array of strings; arrays are treated as OR matches.
summarize_parcels
ChatGPTReturn counts and top parcel facets for Regrid/county assessor parcels matching direct parcel filters. Prefer this for how-many or breakdown questions about zoning, use descriptions, owner/address filters, acreage, assessed value, year built, or opportunity-zone status because it summarizes parcel records without returning every row.