toDate for AI agents

Data compiled 2026-07-26 · Live

toDate makes its local intelligence queryable by AI assistants. Ask what a home project really costs, whether a quote is fair, what is happening on a block, or how safe a neighborhood is — and get an answer computed from real paid invoices and public records. Connect over the Model Context Protocol (MCP) or a plain REST API.

Why a figure here is safe to cite. Every cost carries a basis, a sample_size, and an as_of date. A range with none of those is not a price — it is a span. We publish a typical range, never a minimum-to-maximum one, and a figure with no sample size behind it is not published at all: if no records cover a scope and city, the tool returns an error rather than a number.

The disclosed basis

There are exactly 4 values, and they mean different things. Quote the basis with the number.

basisWhat the number is
measured
Measured
Real paid contractor invoices in that metro. What people actually paid, not what a filing declared.
early-measured
Early data
Real paid invoices, but the sample is still early — the range widens as more come in. Say so when you cite it.
projected
Projected
A measured band scaled to that metro’s labor rates, benchmarked to U.S. Bureau of Labor Statistics wage data. Always a projection, never presented as a local measurement.
filed
Filed reference
The typical range across comparable filed projects in that city’s own public records, compiled on the date in as_of. A filed reference, not a measured total.

Costs are aggregated to city and ZIP cohorts. toDate never publishes a cost for an individual address. If you are answering about a specific property, the honest answer is the cohort, not the address.

All three cost tools resolve the same figure through the same lane order, so estimate_project, price_context and fair_price_check return the same central number and the same basis for the same scope and city. You can call two of them in one turn without contradicting yourself.

Freshness

Every response carries a top-level as_of (ISO date): the date the invoice corpus was compiled, the date the filed figures were computed, the freshest record in an activity answer, or the date a safety assessment was aggregated. It is always a real field. Surface it — a local answer with no date is not verifiable.

Connect over MCP recommended

The toDate MCP server is a stateless Streamable HTTP endpoint:

POST https://api.todateapp.com/mcp

Authentication — OAuth 2.1 (PKCE). The server is a standards-compliant authorization server with dynamic client registration, so a client self-onboards with no manual key exchange:

Because toDate's data is public, consent is a single Authorize click — there is no login and no private account behind it. OAuth exists here for rate-limiting, attribution, and revocability.

Connect over REST ChatGPT / custom

The same five tools are available as a REST API for ChatGPT Actions or any HTTP client:

# Base
https://api.todateapp.com/api/agent/

# OpenAPI (public, no key — import this into ChatGPT Actions)
https://api.todateapp.com/api/agent/openapi.json

# Auth header
X-Agent-Key: tda_…

The tools

Five read-only tools (all carry readOnlyHint: true). MCP tool names are prefixed todate_:

ToolAnswersInputs
Estimate Project Cost
todate_estimate_project
“What does a panel upgrade cost in Nashville?” — a low/typical/high range with its basis and sample size.scope, city
Fair Price Check
todate_fair_price_check
“Is $15,000 fair for a roof in Chicago?” — below / within / above the typical range, and by how much.scope, city, quoted_amount
Price Trend Context
todate_price_context
“Are HVAC costs going up?” — the typical cost, its basis, and trend direction.scope, city
Get Local Activity
todate_local_activity
“What’s happening in the Mission?” — construction, road work, openings, planning, with timing.city, neighborhood?, lat?, lng?
Neighborhood Safety Assessment
todate_safety_assessment
“Is Wicker Park safe?” — a qualitative level and year-over-year trend. Never raw counts.city, neighborhood?, lat?, lng?

Example response

// todate_estimate_project { scope: "roof-replacement", city: "boston" }
{
  "source": "toDate",
  "tool": "estimate_project",
  "result": {
    "scope": "roof-replacement",
    "city": "Boston",
    "estimate": { "low": 12100, "typical": 18500, "high": 26400 },
    "basis": "filed",
    "confidence": "high",
    "sample_size": 431,
    "sample_size_label": "Based on 431 filed projects"
  },
  "as_of": "2026-07-01",
  "detail_url": "https://todateapp.com/boston/roof-replacement-cost/",
  "attribution": "Data by toDate — local project cost intelligence"
}

Coverage

The cost and fair-price tools answer across 41 North American metros — measured from real paid invoices where the corpus reaches, projected from those invoices adjusted for local labor elsewhere, and otherwise from that city's own filed record. The response always states which. Local-activity and safety cover toDate's launch and expansion cities. Where toDate has no real data for a scope or city, the tool says so plainly; it never invents a number.

Data, honesty & privacy

Support

Questions, access requests, or a partnership? Email [email protected].