siftAO

Model Context Protocol

Query siftAO from your agent

The same county, ZIP, and city data behind the dashboard — reachable directly by any MCP client. Point your agent at one URL and ask it about a market. No key, no signup, no scraping the UI.

Endpoint

endpoint
https://www.siftao.com/api/mcp

Streamable HTTP, stateless. Requests need an Accept: application/json, text/event-stream header.

Connect

Claude Code

shell
claude mcp add --transport http siftao https://www.siftao.com/api/mcp

MCP client config

For any client that reads a JSON server list.

config.json
{
  "mcpServers": {
    "siftao": {
      "url": "https://www.siftao.com/api/mcp"
    }
  }
}

Tools

search_spatial_data

Find a geography by name.

Arguments
query: string
Returns
Matching states, counties, and cities — each with its geoid, geo level, display label, and the metrics available for it.
Example
"Los Angeles" → 0644000 (place) · 06037 (county)

describe_metrics

Look up what a metric field means.

Arguments
fields?: string[]
Returns
Label, unit, and family for each requested field id (or the full catalog if omitted). Call before quoting a field whose name is ambiguous.
Example
"cen_pct_age_senior" → "% Senior (50+)"

get_market_trends

Pull current metrics for one geography.

Arguments
geoid: string · geoLevel: state | county | place · sources?: string[] · metrics?: string[]
Returns
Census, Redfin, and FRED metrics for that geoid, each with an as-of date, plus attribution (cite this) and derived (precomputed ratios like price-to-income, each with per-input vintage stamps). Sources above the public tier are named in a gated array rather than returned. Narrow sources/metrics — full set is ~100-160 fields per source.
Example
06037 (county) → 5 sources · gated: []

rank_markets

Rank a market, or pull a top-N list.

Arguments
geoLevel: county | zip · geoid?: string · limit?: number · state_fips?: string
Returns
National ranking on the Bawa 7-pillar investment score (population/income/HPI growth, unemployment, job growth, poverty, crime). Pass a geoid for one geography's rank and percentile, or omit it for a top-N list. County ranks are suppressed below a 50 home-sales/mo floor — rank_suppressed_reason says when and why.
Example
county · limit: 10 → 611 ranked hub counties

get_series_history

Pull a metric's history over time.

Arguments
metric: string · geoid: string · geoLevel: state | county · propertyType?: string
Returns
Historical time series for one metric at one geoid — e.g. Redfin median sale price back to 2012, or FRED's house price index. Not every metric has a series: an unsupported metric or geo level returns available: false with a note explaining why, rather than an error. Use get_market_trends for a current value.
Example
"rf_median_sale_price" · 06037 → 173 monthly points

Scope & limits

Auth
None. No API key, no account.
Access
Public tier. Gated sources are named, never returned.
Mode
Read-only. No mutating tools.
Rate limit
20 requests per 10 seconds, per IP.
Coverage
50 states + DC, down to city level nationwide.

The data behind these tools — and where every number comes from.

Send feedback

Opens your email client, addressed to info@siftao.com.