---
summary: "Bug fixes and code simplification — geography resolution now fully functional (8 bugs fixed, 3 critical)"
breaking: false
security: false
---

# 0.1.3 — 2026-05-24

Field-test pass that fixed 8 bugs (3 critical, 5 minor), 9 tool-definition improvements, and simplified 10 files.

## Changed

- **`census_list_datasets` description**: tightened wording; removed redundant framing
- **`census_list_datasets` filter description**: "Optional keyword" → "Keyword to filter … Omit to list all"
- **`census_query_data` description**: reworded for clarity; suppression note now says "decoded into human-readable reasons"
- **`census_query_data` `geography_fips` output description**: clarified match to `census_query_data` parameter name
- **`census_compare_geographies` description**: "Returns a sorted ranked table" → "Results are sorted and ranked"; suppression note updated to match query tool phrasing
- **`census_compare_geographies` `geography_fips` output description**: same cross-tool parameter name clarification as query tool
- **`census_resolve_geography` description**: consolidated address + name-lookup framing; parameter mapping made explicit
- **`census_resolve_geography` `no_match` `when` clause**: "TIGERweb or geocoder returned no matches" → "Place name not recognized or no matching geography found"
- **`census_resolve_geography` `resolution_unavailable` `when`/`recovery`**: removed TIGERweb/geocoder internals from user-facing text
- **`census_get_variable` `variable_code` output description**: added concrete example `"B19013_001E"`
- **`census_get_variable` `variables_unavailable` `when`**: "Variables.json endpoint" → "Variable metadata endpoint"
- **`DiscoveryConfig`** split from `ServerConfig` in `server-config.ts` — tools that don't call the Census Data API (`census_list_geographies`, `census_search_variables`, `census_get_variable`, `census_resolve_geography`, `census_compare_geographies` dataset validation path) now use `getDiscoveryConfig()` and no longer require `CENSUS_API_KEY` at startup ([#1](https://github.com/cyanheads/census-mcp-server/issues/1))
- **`initCensusApiService` / `initVariableCacheService` / `initGeographyService`**: removed unused `AppConfig` and `StorageService` parameters; `setup()` in `index.ts` updated accordingly
- **`index.ts` `instructions` string**: converted from multi-line concatenation to single template string
- **`index.ts` `createApp()`**: removed empty `resources: []` and `prompts: []` (framework defaults)
- **`index.ts`** barrel export block in `definitions/index.ts` consolidated to a single grouped `export { … }` statement

## Fixed

- **`census_resolve_geography`**: geocoder endpoint switched from `/geographies/address` to `/geographies/onelineaddress` — one-line address geocoding was always returning 404 ([#5](https://github.com/cyanheads/census-mcp-server/issues/5))
- **`census_resolve_geography`**: county, place, and tract TIGERweb queries now filter by `STATE` FIPS rather than `STUSAB` — non-state layers do not expose `STUSAB`, so all county/place/tract resolution was failing ([#4](https://github.com/cyanheads/census-mcp-server/issues/4))
- **`census_resolve_geography`**: two-letter state abbreviation input (e.g., `"WA"`) now matched via `STUSAB='WA'` on the state layer directly instead of `NAME LIKE '%WA%'`, which never returned results ([#7](https://github.com/cyanheads/census-mcp-server/issues/7))
- **`census_resolve_geography`**: empty or whitespace-only name input now throws `no_match` immediately with a descriptive message instead of making an upstream API call and returning `resolution_unavailable` ([#3](https://github.com/cyanheads/census-mcp-server/issues/3))
- **`census_resolve_geography`**: geocoder response parsing now checks `Census Tracts`, `2020 Census Blocks`, and `Incorporated Places` layers for `STATE`/`COUNTY`/`TRACT` fields; previously only checked `States` and `Counties`, which are absent from the default geocoder response ([#5](https://github.com/cyanheads/census-mcp-server/issues/5))
- **`census_compare_geographies`**: invalid dataset now throws `dataset_not_found` (NotFound) with proper `ctx.fail` routing; previously threw `geography_not_supported` (wrong reason, wrong contract entry) ([#2](https://github.com/cyanheads/census-mcp-server/issues/2))
- **`census_compare_geographies`**: dataset validation now only runs when `input.dataset` is explicitly provided; previously `KNOWN_DATASETS.has(undefined)` always evaluated false and threw on every call without an explicit dataset ([#2](https://github.com/cyanheads/census-mcp-server/issues/2))
- **`census_list_geographies` / `census_search_variables` / `census_get_variable`**: no longer throw `ConfigurationError` when `CENSUS_API_KEY` is unset — these tools use `getDiscoveryConfig()` which does not require the API key ([#1](https://github.com/cyanheads/census-mcp-server/issues/1))
- **`census_api_service`**: 404 responses from the Census Data API now return an empty result set for the caller to surface as `year_not_available` instead of propagating a generic `ServiceUnavailable` error ([#6](https://github.com/cyanheads/census-mcp-server/issues/6))
- **`geography/types.ts`**: removed unused `GeographyCandidate` interface and `VariableCacheKey` from `variable-cache/types.ts`
- **TIGERweb layers**: `place` layer corrected from `Places_CouSub` layer 0 (county subdivisions) to `Places_CouSub_ConCity_SubMCD` layer 4 (incorporated places); `outFields` now specified per-layer rather than computed inline
