---
summary: "census_search_variables matches every query word as a whole word and ranks by one documented rule, census_get_variable resolves annotation and flag columns with table universes and the published margin labels, every tool accepts dataset codes in any case or by two-part shorthand, and eight new datasets join the catalog."
breaking: true
security: false
---

# 0.6.0 — 2026-09-25

Breaking:

- `concept` is optional on `census_search_variables` and `census_get_variable`. It is absent on columns shared across tables (`GEO_ID`, the `ecnbasic` measures, `pep/charv` `POP`) and on columns the dataset publishes no concept for.
- `census_get_variable` no longer fabricates margin entries for geography columns (`STATM`, `PLACM`, and on 2009-era vintages `AITSCM`, `LSAD_NAMM`). They are now `variable_not_found`, matching upstream.
- `census_get_variable` also reads `groups.json`. A failure there other than a 404 fails the call with `variables_unavailable`.
- Margin-of-error `label` values changed on `census_search_variables`, `census_get_variable`, `census_query_data`, and `census_compare_geographies`, from `Margin of Error — Estimate!!…` to the published `Margin of Error!!…`. Synthesized margins of a `float` estimate report `predicate_type` `float`.
- `census_search_variables` `totalMatches` counts all-terms matches, or the most-terms tier when none hold every word, and result order changed throughout.

## Added

- **Eight datasets**: `dec/dhc`, `dec/dp`, `dec/sdhc`, `acs/acs1/subject`, `acs/acs5/cprofile`, `acs/acs1/cprofile`, `acs/acsse`, and `acs/acs1/spp`, listed by `census_list_datasets` and accepted by every tool. `acs/acs1/spp` filters on `POPGROUP`, and the comparison profiles get no inferred `M` codes because they publish none. ([#43](https://github.com/cyanheads/census-mcp-server/issues/43), [#52](https://github.com/cyanheads/census-mcp-server/issues/52))
- **Dataset-code resolution in every tool** (`resolveDataset`): a code is trimmed and matched regardless of case, and a two-part code resolves from its last segment alone (`acs5` → `acs/acs5`, `pl` → `dec/pl`). The response echoes the resolved code. A bare third segment (`profile`) fails and names the codes that end in it. ([#32](https://github.com/cyanheads/census-mcp-server/issues/32))
- **Annotation and flag columns in `census_get_variable`**: codes such as `B19013_001EA` and `EMP_F` resolve from the Census per-variable endpoint. They come back with new `attribute_of` and `attribute_type` fields. ([#48](https://github.com/cyanheads/census-mcp-server/issues/48))
- **`universe` from `groups.json`**: `census_get_variable` joins each variable's table universe from `groups.json`, cached with `variables.json`. ([#53](https://github.com/cyanheads/census-mcp-server/issues/53))

## Changed

- **`census_search_variables` matching and ranking**: every query word must match a whole word of the label or concept. When no variable holds them all, the most-terms tier comes back with a notice. Results rank by where the phrase appears, then by fewer `!!` segments, shorter concept, and code. ([#34](https://github.com/cyanheads/census-mcp-server/issues/34))
- **Shared columns lose their concept**: a column whose `group` names several tables is matched on its label only and returned without `concept`. ([#33](https://github.com/cyanheads/census-mcp-server/issues/33))
- **Case-insensitive lookups**: `census_get_variable` trims and uppercases `variables`, then echoes the dataset's own spelling. `census_list_predicate_values` trims and uppercases `predicate`. ([#50](https://github.com/cyanheads/census-mcp-server/issues/50))
- **Published margin-of-error records**: synthesized `M` entries carry the Census label, `attribute_of` naming the estimate, and `attribute_type` `MARGIN_OF_ERROR`. ([#58](https://github.com/cyanheads/census-mcp-server/issues/58))
- **`dec/ddhca` catalog name** is now "Detailed Demographic and Housing Characteristics File A (DDHC-A)". ([#43](https://github.com/cyanheads/census-mcp-server/issues/43))
- **`geography_not_supported`** in `census_query_data` and `census_compare_geographies` lists the dataset's levels when there are 12 or fewer. Otherwise it gives the count and points to `census_list_geographies`.
- **Docker image**: Bun 1.4.2 base images, plus an `org.opencontainers.image.version` label set from the `APP_VERSION` build arg. `packageManager` is `bun@1.4.2`.

## Fixed

- **`census_list_geographies` trims its `dataset`**, and a blank required `dataset` is reported as a missing code rather than `Unknown dataset: ""`. ([#32](https://github.com/cyanheads/census-mcp-server/issues/32))
- **`census_list_predicate_values` notices** group thousands in their declared and published counts.
