Reported issues for census-mcp-server
Pod holds 16 of 30 problems reported by people outside the maintainer team. Issues filed by the project's own owners, members and collaborators are excluded entirely — a maintainer's release checklist is not a warning to a prospective user.
Back to census-mcp-server.
Most discussed
feat(census_get_variable): make predicate values discoverable
Use case
census_query_data and census_compare_geographies accept a predicates map, and when a dataset declares filter dimensions the query left unset the response notice names them by code and label — NAICS2017 (2017 NAICS code), LFO (Legal form of organization code), EMPSZES (Employment size of establishments code). A caller who reads that notice and wants to filter then has to supply a value, and no tool here can tell them what values are accepted.
What variables.json publi
Read the thread · 2026-07-31 · closed · 3 comments
feat(census_resolve_geography): resolve CBSA, CSA, and economic place names to codes
Use case
census_resolve_geography turns a place name into FIPS codes for four levels: state, county, place, tract. The business datasets publish levels outside that set, so a caller who has a name rather than a code cannot reach them.
Per-dataset levels, from each dataset's own geography.json:
| Level | cbp |
ecnbasic |
nonemp |
Resolvable from a name today |
|---|---|---|---|---|
us |
✅ | ✅ | ✅ | n/a — the for= value is always 1 |
| `sta |
Read the thread · 2026-07-31 · open · 3 comments
bug(census_query_data): string-valued variables such as GEO_ID return estimate null, indistinguishable from missing data
Server version
0.3.0
mcp-ts-core version
0.11.0
Runtime
Bun
Runtime version
Bun 1.3.14
Transport
stdio
OS
macOS
Description
CensusApiService.parseResponse coerces every requested variable with Number(rawValue) regardless of the variable's predicateType. A variable the Census publishes as a string — GEO_ID on the ACS datasets, INDLEVEL on nonemp and ecnbasic, SUMLEVEL — coerces to NaN, which is stored as the estimate and serialized to J
Read the thread · 2026-07-31 · closed · 2 comments
bug(census_list_datasets, census_query_data): pep/charv advertises three vintages the API does not publish, and the miss surfaces as raw 404 HTML
Server version
0.3.0
mcp-ts-core version
0.11.0
Runtime
Bun
Runtime version
Bun 1.3.14
Transport
stdio
OS
macOS
Description
census_list_datasets advertises pep/charv as having available_years: [2020, 2021, 2022, 2023], but 2023 is the only vintage the Census API publishes. 2020 through 2022 are values of the dataset's own YEAR dimension inside the 2023 vintage, not separate vintages — https://api.census.gov/data/2021/pep/charv/variables.json is
Read the thread · 2026-07-31 · closed · 2 comments
bug(census_query_data): pep/charv returns two indistinguishable rows per geography when YEAR is unset
Server version
0.2.0
mcp-ts-core version
0.11.0
Runtime
Bun
Runtime version
Bun 1.3.14
Transport
stdio
OS
macOS
Description
Related: #24
pep/charv declares YEAR a required filter dimension and defaults it to 2020 on the 2023 vintage. Two records share that default — an estimates base and an estimate — so a query that omits YEAR returns two rows for one geography carrying different numbers.
Nothing on the rows separates them. YEAR is the one dime
Read the thread · 2026-07-31 · closed · 2 comments
bug(census_list_predicate_values): dec/ddhca POPGROUP lists codes the dataset serves nothing for
Server version
0.2.0
mcp-ts-core version
0.11.0
Runtime
Bun
Runtime version
Bun 1.3.14
Transport
stdio
OS
macOS
Description
Related: #24
census_list_predicate_values reads a dimension's codes straight from the values.item map in variables.json when the dataset publishes one, and returns them unqualified. On dec/ddhca that map contains 001 — Total population, a code the dataset serves nothing for at any geography level. It is also the single cod
Read the thread · 2026-07-31 · closed · 2 comments
bug(census_query_data, census_compare_geographies): an unpadded FIPS code silently returns no_data
Server version
0.1.14
mcp-ts-core version
0.11.0
Runtime
Bun
Runtime version
Bun 1.3.14
Transport
stdio
Description
The Census Data API matches FIPS codes literally, so for=county:51 and for=county:051 are different queries — the first returns HTTP 204. census_query_data and census_compare_geographies pass parent_fips, county_fips, geography_fips, within, and within_county straight through as bare z.string() with no pattern and no padding, s
Read the thread · 2026-07-31 · closed · 2 comments
bug(census_query_data): dec/ddhca returns one population group's count where a total is implied
Server version
0.1.13
mcp-ts-core version
0.11.0
Runtime
Bun
Runtime version
Bun 1.3.14
Transport
stdio
OS
macOS
Description
dec/ddhca marks POPGROUP (Race/Ethnic Group) required in its variables.json, and the Census API answers a query that omits it by returning the first population group rather than a total. A census_query_data call for T01001_001N at state:06 returns 9,653,100 — the count for POPGROUP=1002, "European alone" — pres
Read the thread · 2026-07-31 · closed · 2 comments
Most recent
feat(datasets): normalize dataset-code case and resolve bare acs5/acs1 shorthand to canonical paths
census_query_data, census_compare_geographies, and census_list_geographies reject "acs5" and "ACS5" with Unknown dataset even though each maps unambiguously to acs/acs5. Callers routinely write the bare leaf or uppercase form; the hint (call census_list_datasets) recovers them, but the mapping is deterministic and the round-trip is avoidable.
Proposal
Normalize dataset codes before lookup, on every tool with a dataset parameter:
- Lowercase the input (
ACS5→acs5, `A
Read the thread · 2026-08-21 · open · 0 comments
bug(census_resolve_geography): spelled-out state suffix never splits, and the no_match hint appends ", WA" to the full input
Server version
0.3.2
mcp-ts-core version
0.11.0
Runtime
Bun
Runtime version
Bun 1.3.x
Transport
http
Description
Related: #15
census_resolve_geography fails on "<name>, <spelled-out state>" inputs. splitStateSuffix (src/services/geography/geography-service.ts) only recognizes a trailing two-letter abbreviation (/,?\s+([A-Z]{2})\s*$/), so a spelled-out state stays inside the name and the TIGERweb NAME LIKE '%…%' query includes the state text, which
Read the thread · 2026-08-21 · open · 0 comments
bug(census_resolve_geography): prior-vintage CBSA names fail to resolve despite an unambiguous city prefix
Server version
0.3.2
mcp-ts-core version
0.11.0
Runtime
Bun
Transport
http
Description
census_resolve_geography matches CBSA names against the current OMB delineation only. A caller supplying the previous official name for a metro area gets no_match, even though the leading tokens identify exactly one CBSA.
OMB renamed many CBSAs in the 2023 delineation. The prior names were official for roughly a decade and are what most reference material — and most model pr
Read the thread · 2026-08-02 · open · 0 comments
bug(census_query_data, census_compare_geographies): a parent the level does not accept still surfaces a raw 400
Server version
0.1.12
mcp-ts-core version
0.11.0
Runtime
Bun
Runtime version
Bun 1.3.14
Transport
HTTP
OS
macOS
Description
Related: #19
CensusApiService.checkGeography pre-validates that every parent a geography level requires was supplied, but not that every parent the caller supplied is one the level accepts. Passing parent_fips to census_query_data — or within to census_compare_geographies — for a level with no state parent builds an `i
Read the thread · 2026-07-31 · closed · 2 comments
feat(census_resolve_geography): add a county input so a tract name can be pinned to one county
census_resolve_geography takes only name and geography_type, but a census tract name is unique only within a county — not within a state. A tract name shared by two counties therefore has no input that can narrow it, so the call is unresolvable through this tool no matter how the caller phrases the name.
Related: #15, #18
Steps to reproduce
- Call
census_resolve_geographywith{ "name": "Census Tract 104.01, AR" } ambiguous_namecomes back with two candidates — Arkansas co
Read the thread · 2026-07-31 · closed · 2 comments
bug(census_query_data): missing-parent and no-data errors give poor recovery guidance
Server version
0.1.11
mcp-ts-core version
0.10.9
Runtime
Bun
Runtime version
Bun 1.3.11
Transport
stdio
OS
macOS
Description
Two error paths in census_query_data (and census_compare_geographies) hand the model unhelpful recovery guidance:
- Missing parent → opaque upstream error. Querying a sub-state level without its required parent (e.g.
geography_level: "tract"with noparent_fips) surfaces a rawFetch failed for … Status: 400(`upstrea
Read the thread · 2026-06-30 · closed · 2 comments
bug(census_resolve_geography): ambiguous_name hint omits state, candidates render as "Name, "
Server version
0.1.11
mcp-ts-core version
0.10.9
Runtime
Bun
Runtime version
Bun 1.3.11
Transport
stdio
OS
macOS
Description
When a name matches more than 3 geographies at the county/place/tract level, census_resolve_geography throws ambiguous_name with a recovery.hint of the form Use one of: "<name>, <state>". For non-state layers the state abbreviation comes from STUSAB, which is not in those layers' outFields (only NAME,STATE,COUNTY e
Read the thread · 2026-06-30 · closed · 2 comments
bug(census_search_variables, census_get_variable): MOE inference fabricates non-existent codes for non-ACS datasets
Server version
0.1.11
mcp-ts-core version
0.10.9
Runtime
Bun
Runtime version
Bun 1.3.11
Transport
stdio
OS
macOS
Description
The variable cache infers an M-suffix margin-of-error sibling for every code ending in E, then synthesizes a phantom variable entry for it. This is correct for ACS (B…E estimate / B…M MOE, where M codes are queryable but omitted from variables.json) but wrong for PEP and decennial datasets, which have no such pairing.
Read the thread · 2026-06-30 · closed · 2 comments
The remaining reports are on the project's issue tracker.