FastOpenData is a two-person project building one clean interface over U.S. geographic, demographic, and address data, in the two shapes callers actually want it: a REST API for programs, and an MCP server for agents — one dataset behind both, each metered in the units its callers think in. One API call geocodes an address, resolves it to its 2020 Census tract, and returns that tract's attributes along with its county's, state's, and PUMA's. The demo page runs the API live, no account needed; the MCP endpoint is deployed but not yet open for sign-in.
# One address in, its tract's attributes out curl -G https://fastopendata.com/address_data \ -H "Authorization: Bearer $TOKEN" \ --data-urlencode "street=1 W Court Sq" \ --data-urlencode "city=Decatur" \ --data-urlencode "state=GA"
{
"place_id": 127365481,
"licence": "Data © OpenStreetMap contributors, ODbL 1.0",
"osm_type": "way",
"lat": 33.7750619, "lon": -84.2971945,
"display_name": "1, West Court Square, Decatur, DeKalb County, Georgia, 30030",
"category": "building",
"importance": 0.35
// /structured_geocode returns this much: a thin pass-through
// of Nominatim. /address_data goes on to the tract attributes.
}
Both sit on the same joins and the same snapshot — the difference is who is asking. A program knows which endpoint it wants. An agent has to find out what exists, so the MCP side is built around naming variables rather than dumping them.
One GET with a bearer token. Address in, geocode plus the containing tract, county, state and PUMA out, with the response naming which geography each value came from.
# live, working today curl -G https://fastopendata.com/address_data \ -H "Authorization: Bearer $TOKEN" \ --data-urlencode "street=1 W Court Sq" \ --data-urlencode "city=Decatur" \ --data-urlencode "state=GA"
fastopendata-client, is the only client library so far.Seven tools over the same data, metered in cells rather than requests. An agent searches the variable dictionary, names the columns it wants, and gets those columns — not a 900-column row to reason through.
# host config: a URL and a token, once tokens exist { "mcpServers": { "fastopendata": { "url": "https://fastopendata.com/mcp", "headers": { "Authorization": "Bearer ${TOKEN}" } } } }
search_variables, describe_variable, lookup_location, get_location_data, describe_coverage — five of seven listed today.curl can.Address lookups work end to end today over HTTP. The agent interface is deployed but not yet open; the schema endpoint, the dashboard, and anything resembling a product around either do not exist.
Send a street, city and state; the address is geocoded, resolved to the 2020 Census tract that contains it, and returned with that tract's attributes plus its county's, state's and PUMA's. Geocode-only and tract-only endpoints exist too, for callers who want one step rather than all three.
The columns come out of the ETL pipeline in this repo — Census ACS/PUMS, FEMA's National Risk Index, NCES schools, USDA rural–urban codes, CJARS, and more. Coverage is uneven: some columns are complete, some are null for most tracts, and several describe the surrounding PUMA rather than the tract itself. The response names which geography each one came from.
There is no /fields endpoint describing the columns, no batch endpoint, and no account dashboard. On the agent side, the MCP endpoint is deployed but there is nothing to sign in with yet, and the variable dictionary it leans on is seeded rather than reviewed. The data catalog and pricing pages on this site are drafts, labeled as such.
These are the actual datasets the ETL pipeline in this repo ingests. Several are already joined into address lookups; others are ingested but not yet exposed as columns. There is no endpoint that tells you which is which — that is the missing /fields endpoint.
American Community Survey person and housing microdata, 1- and 5-year estimates.
Tract, county, state, PUMA, block-group, and address-point boundaries.
U.S. point-of-interest extract, updated via Geofabrik.
National housing survey data and value labels.
Survey of Income and Program Participation, person-level.
Geolocated entities and open places-of-interest data.
This is a two-person project, developed in public — both the API that works today and the agent interface that is not open yet. If you want to see where it's headed, or which parts are honestly finished, the source is the most honest place to look.