Releases: cyanheads/census-mcp-server
Release list
v0.1.11: mcp-ts-core ^0.10.9 maintenance
mcp-ts-core ^0.10.9 maintenance
Adopts the @cyanheads/mcp-ts-core 0.10.7–0.10.9 line: ctx.content media collector, Canvas SQL invalid_sql classification with DuckDB binder detail, the ambiguous-column describe() fix, and fresh-scaffold devcheck guards.
Dependency bumps:
@cyanheads/mcp-ts-core^0.10.6 → ^0.10.9@biomejs/biome^2.4.16 → ^2.5.0@types/node^25.9.3 → ^26.0.0vitest^4.1.8 → ^4.1.9
Changed:
devcheck.config.jsonenables the new plugin-manifest packaging check (packaging.pluginManifests); validates plugin descriptions, unscoped display names, and the scoped install arg..codex-plugin/plugin.jsonlongDescription filled with the tool-surface summary.- scripts re-synced — new
check-dependency-specifiers.tsfloating-specifier guard, plus skip-on-fresh-scaffold guards across the devcheck scripts. - 14 framework skills re-synced to upstream versions, mirrored into
.claude/skills/and.agents/skills/.
111 tests pass; bun run devcheck clean.
v0.1.10: mcp-ts-core 0.10.6 adoption + MCPB bundle hardening
mcp-ts-core 0.10.6 adoption + MCPB bundle hardening
Adopts @cyanheads/mcp-ts-core ^0.10.6 with explicit server identity and refined error/output contracts, and hardens MCPB bundle packaging.
Added:
- census_search_variables emits truncated/shown/cap output fields and a ctx.enrich.truncated() signal when matches exceed the limit
- scripts/clean-mcpb.ts (wired into bundle) strips dependency-shipped agent docs from MCPB bundles that root-anchored .mcpbignore cannot reach
- lint:packaging bundle-content + identity guards; check-framework-antipatterns flags z.coerce.boolean() on env flags
Changed:
- createApp() sets explicit name/title of census-mcp-server
- variable_not_found in census_query_data and census_compare_geographies: ValidationError → NotFound
- census_resolve_geography throws validationError() for a blank name
- .mcpbignore root dev-dir patterns anchored with a leading slash
Dependencies:
- @cyanheads/mcp-ts-core ^0.9.21 → ^0.10.6
- @types/node ^25.9.1 → ^25.9.3
111 tests pass; bun run devcheck clean.
v0.1.9: county-scoped tract queries, dataset_not_found contract, geography_type enum
county-scoped tract queries, dataset_not_found contract, geography_type enum
Adds county_fips / within_county fields to census_query_data and census_compare_geographies so tract and block-group queries can be scoped to a specific county. Fixes error contract and geography_type validation.
Fixed:
- census_query_data / census_compare_geographies: new county_fips / within_county fields; CensusApiService builds compound in=state:XX%20county:YYY clause when both state and county FIPS are supplied (#11)
- census_query_data: dataset_not_found added to errors[] contract; guard now uses ctx.fail('dataset_not_found') for consistent data.reason (#12)
- census_resolve_geography: geography_type changed from z.string() to z.enum(['state','county','place','tract']); invalid and whitespace-padded values rejected at schema boundary (#14)
- census_resolve_geography format(): county FIPS line annotates county_fips usage in census_query_data for tract-level results
110 tests pass; bun run devcheck clean.
v0.1.8: mcp-ts-core ^0.9.21 framework adoption
mcp-ts-core ^0.9.21 framework adoption
Adopts three framework fixes from @cyanheads/mcp-ts-core 0.9.17–0.9.21.
Changed:
- HTTP transport log context — per-request logs and traces now carry fresh request/trace/span IDs instead of the frozen boot context.
- fetchWithTimeout — strips query-string secrets (e.g. ?api_key=) from error messages and logs.
- withRetry — fails fast on non-retryable errors; ctx.fail auto-populates the retryable flag.
Dependencies:
@cyanheads/mcp-ts-core^0.9.16 → ^0.9.21vitest^4.1.7 → ^4.1.8
103 tests pass; bun run devcheck clean.
v0.1.7: Enrichment adoption on search/query/compare tools
Enrichment adoption on search/query/compare tools
Query echo, result totals, and empty-result guidance now surface in a typed enrichment block on all search/list/compare tools, reaching both structuredContent JSON and content[] markdown.
Changed:
- census_search_variables: effectiveQuery echo, totalMatches, dataset/year, notice on empty results in enrichment; total_matches/dataset/year removed from output
- census_query_data: totalRows, dataset, year moved to enrichment; total_rows removed from output
- census_list_datasets: totalCount, filterApplied, notice on empty results in enrichment; total_count removed from output
- census_list_geographies: totalLevels, dataset, year moved to enrichment; dataset/year removed from output
- census_compare_geographies: totalCount, truncated, sortVariable, dataset, year, notice when truncated in enrichment; output fields removed; total_count/sort_variable renamed to camelCase in enrichment
Dependency bumps:
- @cyanheads/mcp-ts-core ^0.9.13 → ^0.9.16
48 tests pass; bun run devcheck clean.
v0.1.6: mcp-ts-core ^0.9.13, TypeScript ^6, manifest user_config wiring, error code alignment
mcp-ts-core ^0.9.13, TypeScript ^6, manifest user_config wiring, error code alignment
Adopts @cyanheads/mcp-ts-core ^0.9.9 → ^0.9.13 and refreshes dev deps. Wires CENSUS_API_KEY into the MCPB bundle's user_config, aligns tool error codes, and adds landing.requireAuth: false for hosted deployments.
Changed:
- HTTP body cap — inbound requests over 1 MiB rejected with 413 (MCP_HTTP_MAX_BODY_BYTES, default 1 MiB)
- Session-init gate — stateful HTTP mode rejects non-initialize requests missing Mcp-Session-Id with 400
- Quieter client-error logging — 401/403/400/404 responses use logger.warning, not the full error pipeline
- GET /mcp keywords — package.json keywords now surfaced on the HTTP status endpoint
- manifest.json — CENSUS_API_KEY wired as ${user_config.CENSUS_API_KEY}; default: "" added for optional field safety
- Error codes — InvalidParams replaced with ValidationError across census_query_data, census_list_geographies, census_resolve_geography, census_compare_geographies
- landing.requireAuth: false set in src/index.ts
Dependency bumps:
@cyanheads/mcp-ts-core^0.9.9 → ^0.9.13typescript^5.9.3 → ^6.0.3@biomejs/biome^2.4.7 → ^2.4.16@types/node^25.6.0 → ^25.9.1tsc-alias^1.8.16 → ^1.8.17vitest^4.1.0 → ^4.1.7
50 tests pass; bun run devcheck clean.
v0.1.5: FUNDING.yml, Docker image, missing GH releases
FUNDING.yml, Docker image, missing GH releases
Metadata and infrastructure alignment release.
Added:
.github/FUNDING.yml— GitHub Sponsors and Buy Me a Coffee- Docker image — multi-arch linux/amd64 + linux/arm64 at ghcr.io/cyanheads/census-mcp-server:0.1.5
- GitHub releases for v0.1.0, v0.1.1, v0.1.2
50 tests pass; bun run devcheck clean.
v0.1.4: Drop tsx, align scripts to bun-native execution
Drop tsx, align scripts to bun-native execution
All build scripts switched from tsx to bun run; tsx removed from devDependencies.
start:stdio and start:http now run via bun directly. funding block added.
Changed:
- All scripts: tsx replaced with bun run
- test: vitest run → bunx vitest run
- start:stdio / start:http: node → bun ./dist/index.js
- start script removed (superseded by start:stdio / start:http)
- engines.bun: >=1.3.0 → >=1.3.2
Removed:
- tsx devDependency
Added:
- funding block (GitHub Sponsors, Buy Me a Coffee)
50 tests pass; bun run devcheck clean.
v0.1.3: Geography resolution fully operational — 8 bugs fixed (3 critical)
Geography resolution fully operational — 8 bugs fixed (3 critical)
Field-test pass that restored full geography resolution, removed the
CENSUS_API_KEY requirement from discovery-only tools, and simplified
service initialization across 10 files.
Fixed:
- census_resolve_geography: wrong geocoder endpoint (/address vs /onelineaddress) — address lookup always failed
- census_resolve_geography: STUSAB filter on county/place/tract layers (field absent) — all non-state resolution failed
- census_resolve_geography: two-letter state abbreviation now matched via STUSAB= directly
- census_resolve_geography: empty name now fails fast with no_match instead of upstream call
- census_resolve_geography: geocoder response parsing now covers Census Tracts, 2020 Census Blocks, Incorporated Places layers
- census_compare_geographies: invalid dataset now throws dataset_not_found (correct reason + contract entry)
- census_list_geographies / census_search_variables / census_get_variable: no longer require CENSUS_API_KEY at startup
- census_api_service: 404 from Census Data API now returns empty result (enables year_not_available path)
- TIGERweb place layer: corrected from Places_CouSub layer 0 to Places_CouSub_ConCity_SubMCD layer 4
Changed:
- DiscoveryConfig split from ServerConfig — tools that don't need the API key use getDiscoveryConfig()
- Service init signatures simplified — AppConfig and StorageService params removed
- Tool descriptions and error clauses tightened across all 7 tools
50 tests pass; bun run devcheck clean.
v0.1.2: Scope npm package to @cyanheads org
Scope npm package to @cyanheads org
Fixes the package name from the unscoped census-mcp-server to @cyanheads/census-mcp-server. Updates server.json identifiers, README badges, and normalizes the bundle script and author field to match ecosystem conventions.
Changed:
- package.json name: census-mcp-server → @cyanheads/census-mcp-server
- bundle script: npm run build → bun run build
- author: normalized to cyanheads casey@caseyjhand.com format
- server.json packages[].identifier: → @cyanheads/census-mcp-server
- README h1, npm badge, Cursor/VS Code install configs updated to scoped package
47 tests pass; bun run devcheck clean.