---
summary: "census_resolve_geography reaches census-designated places, ZIP codes as ZCTAs, and ecnbasic 2022 economic places, matches names case-insensitively with every state-suffix form and respelling retries, and returns an address's block group for census_query_data's new tract_fips scope."
breaking: true
security: false
---

# 0.5.0 — 2026-09-25

Breaking: `census_resolve_geography` now matches names case-insensitively and exact-name-first across the place → county chain. Some names 0.4.0 resolved to a row that only contained the name, or through case-sensitive `LIKE`, now return `ambiguous_name` — "Sunset, TX", and bare "Beatty", "Comfort", "DuBois", "Todd", and "Whitley". Others now resolve to a different, exactly named geography: "Ventura, CA" is Ventura County, not San Buenaventura (Ventura) city; "Chester, VA" is Chester CDP, not Chesterfield County; bare "Canon City" is Canon, GA. Input schemas only gained fields and enum values.

## Added

- **Census-designated places at the `place` level** — `census_resolve_geography` searches TIGERweb layer 5 alongside incorporated places and flags a CDP with `census_designated_place: true` ("Bethesda, MD" → `07125`). An incorporated place outranks a same-named CDP, and an exact county outranks a CDP-only exact match ("Arlington, VA" is Arlington County; "Arlington CDP, VA" or `geography_type: "place"` reaches the CDP). ([#55](https://github.com/cyanheads/census-mcp-server/issues/55))
- **ZIP codes resolve to their ZCTA** — a 5-digit ZIP or ZIP+4 auto-detects to the new `zip code tabulation area` type, with no `state_fips`; a miss says the ZIP was checked only as a ZCTA and that `cbp` takes the ZIP itself at `zip code`. ([#44](https://github.com/cyanheads/census-mcp-server/issues/44))
- **`economic place` geography type** — resolves a name to the 8-digit code `ecnbasic` 2022 publishes: the 3-digit county (`000` when the place spans counties) followed by the 5-digit place code (Seattle `03363000`). Never auto-detected. ([#22](https://github.com/cyanheads/census-mcp-server/issues/22))
- **`tract_fips` on `census_query_data`** — exactly 6 digits, with a concrete `county_fips`, it scopes a `block group` (and `dec/pl` `block`) query to one tract; a truncated county-wide result offers it as a narrowing scope. ([#42](https://github.com/cyanheads/census-mcp-server/issues/42))
- **Address resolution returns `block_group_fips` and `place_fips`** from the geocoder layers it already requests; `geography_type` and `fips_summary` stay at the tract. ([#42](https://github.com/cyanheads/census-mcp-server/issues/42))

## Changed

- **Case-insensitive, exact-name-first matching** — every level matches with `UPPER(NAME) LIKE`, and a level whose rows only contain the name yields to a later level with an exact row ("King, WA" is King County, not Kingston CDP). See the breaking note above. ([#44](https://github.com/cyanheads/census-mcp-server/issues/44))
- **Respelling retries** — when no level matches the name as given, `census_resolve_geography` retries Saint/St. spellings ("Saint Louis, MO"), unaccented spellings ("Dona Ana County, NM"), and on CBSA/CSA levels the leading city, so a 2020-delineation name ("Denver-Aurora-Lakewood, CO") resolves. ([#44](https://github.com/cyanheads/census-mcp-server/issues/44), [#30](https://github.com/cyanheads/census-mcp-server/issues/30))
- **`census_list_datasets` geography notes** — `ecnbasic` lists `economic place` as resolvable and gives the four region codes (Construction only); `cbp` says a congressional district is its zero-padded number under a state parent (`00` at large, `98` DC) and a zip code is the ZIP itself. ([#22](https://github.com/cyanheads/census-mcp-server/issues/22))

## Fixed

- **Every state-suffix form scopes the query** — a full state name ("Chatham County, Georgia"), a lowercase abbreviation ("Seattle, wa"), or a hyphenated list ("NE-IA", scoped by its first state); the `no_match` hint no longer appends a second state to input that already names one. ([#31](https://github.com/cyanheads/census-mcp-server/issues/31))
- **CBSA and CSA exact matching ignores the state list in `BASENAME`**, so "Bend, OR" is the Bend metro area rather than a tie with Coos Bay-North Bend. ([#30](https://github.com/cyanheads/census-mcp-server/issues/30))
- **Keyword auto-detection matches whole words** — "Marlborough, MA" and "Parishville, NY" reach the place level, and the word "borough" tries county, then place ("State College borough, PA"). ([#56](https://github.com/cyanheads/census-mcp-server/issues/56))

671 tests pass across 13 files; `bun run devcheck` clean.
