Skip to content

Releases: cyanheads/fcc-broadband-mcp-server

v0.1.12: Fail-fast live provider-search timeout

Choose a tag to compare

@cyanheads cyanheads released this 02 Jul 14:31
v0.1.12
7e7dc78

Fail-fast live provider-search timeout

Stops fcc_search_providers from retrying a deterministic 30s live GROUP BY timeout 4x (#14).

Fixed:

  • OpenDataService.fetchJson classifies deadline aborts into McpError(Timeout) at the fetch choke point; the grouped provider search passes a retryable:false factory so it fails once instead of ~2min of amplified retries, while cheap point queries keep transient retries (#14)
  • New non-retryable live_search_timeout errors[] contract entry on fcc_search_providers with a recovery hint (state filter, longer name fragment, or FCC_MIRROR_ENABLED=true)

Changed:

  • Live name searches drop the 10x grouped-row headroom ($limit min(limit,200)*10 → min(limit,200)) so Socrata's GROUP BY short-circuits inside the 30s budget; on the live path statesServed/techCodes can be partial for multi-state providers — the mirror path keeps full fidelity

161 tests pass; bun run devcheck clean.

v0.1.11: Opt-in local SQLite mirror of the frozen Form 477 corpus

Choose a tag to compare

@cyanheads cyanheads released this 02 Jul 14:01
v0.1.11
cb0527f

Opt-in local SQLite mirror of the frozen Form 477 corpus

Form 477 queries can now be served from a local mirror instead of the live Socrata API (#8); the mirror is off by default and everything falls back to live behavior when disabled or uncovered.

Added:

  • FCC_MIRROR_ENABLED / FCC_MIRROR_PATH env vars — off by default; path defaults to data/fcc-mirror
  • mirror:init script — state-scoped (--states 11,53) or full-corpus (--full) one-time ingest; idempotent and resumable
  • mirror:verify script — per-store sync state, row counts, integrity checks, coverage roster
  • Coverage-gated serving with silent live-API fallback; provider search/summary and cbsa/tribal/nation geographies require a full ingest
  • FTS5 provider dimension backing fcc_search_providers (word-prefix name matching on the mirror)
  • better-sqlite3 ^12.0.0 optional peer dependency for the Node runtime; Bun uses the built-in bun:sqlite

Changed:

  • Dockerfile ships the mirror lifecycle scripts and a writable data/ directory for in-container bootstrap

156 tests pass; bun run devcheck clean.

v0.1.10: GEOID shape validation, area name resolution, audit refresh

Choose a tag to compare

@cyanheads cyanheads released this 02 Jul 12:32
v0.1.10
8d36c94

GEOID shape validation, area name resolution, audit refresh

Fail-fast input validation and readable geography names on the coverage-analysis tools, plus a dependency/security refresh.

Added:

  • invalid_geography_id_shapefcc_get_coverage_summary + fcc_compare_areas reject GEOIDs whose digit count doesn't match geography_type (state=2, county=5, cd=4, cbsa=5, place=7) before any upstream call; county-FIPS-as-state gets a cross-hint. nation/tribal exempt. (#13)
  • getGeographyNames() — batched GEOID→name resolution; fcc_find_underserved + fcc_compare_areas rows gain an optional name field and a Name (GEOID) table column; resolution failure never fails the call. (#12)

Fixed:

  • README: fcc-broadband://providers/list documented as hoconum-only; fcc_search_providers resolves names. (#5)

Security:

  • Lock refresh cleared 8 transitive advisories (2 high, 6 moderate): 7 hono, 1 js-yaml. bun audit clean.

Dependency bumps:

  • @cyanheads/mcp-ts-core ^0.10.9 → ^0.10.10
  • hono 4.12.26 → 4.12.27 (transitive)
  • js-yaml 3.14.2 → 3.15.0 (transitive, depcheck path)
  • @hono/node-server 2.0.5 → 2.0.6 (transitive)

129 tests pass; bun run devcheck clean.

v0.1.9: mcp-ts-core ^0.10.9 adoption

Choose a tag to compare

@cyanheads cyanheads released this 20 Jun 11:35
v0.1.9
89c7418

mcp-ts-core ^0.10.9 adoption

Framework maintenance — no server-side behavior change.

Changed:

  • mcp-ts-core ^0.10.6 → ^0.10.9: adds the ctx.content media collector, classifies SELECT-shaped Canvas SQL prepare failures as invalid_sql with DuckDB binder detail, fixes the DuckdbProvider.describe() ambiguous-column error, and skips git-dependent devcheck steps cleanly on fresh scaffolds.
  • devcheck toolchain synced to 0.10.9 — adds check-dependency-specifiers (floating latest/*/dist-tag specifiers) and plugin-manifest checks in lint:packaging; enabled via devcheck.config.json packaging.pluginManifests.
  • Vendored skills (13) and devcheck scripts (6) re-synced to the framework.

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.0
  • vitest ^4.1.8 → ^4.1.9

106 tests pass; bun run devcheck clean.

v0.1.8: mcp-ts-core ^0.10.6, BDC/Open Data credentials, MCPB bundle hardening

Choose a tag to compare

@cyanheads cyanheads released this 12 Jun 07:41
v0.1.8
85ca6a0

mcp-ts-core ^0.10.6, BDC/Open Data credentials, MCPB bundle hardening

Maintenance release: framework adoption, in-code identity, optional API
credentials, and bundle/packaging hardening.

Added:

  • fcc_find_underserved, fcc_search_providers: truncation enrichment (truncated/shown/cap) when results are capped at the limit.
  • Optional FCC_BDC_USERNAME, FCC_BDC_HASH_VALUE, FCC_OPENDATA_APP_TOKEN env vars in server.json and manifest.json — Form 477 stays keyless; BDC tools and higher Open Data rate limits opt in.
  • scripts/clean-mcpb.ts: strips dependency-shipped agent-docs from the MCPB bundle that root-anchored .mcpbignore cannot reach.
  • Docker /healthz HEALTHCHECK and image.version label.

Changed:

  • createApp() name/title set to the unscoped machine name fcc-broadband-mcp-server.
  • lint-packaging.ts: bundle-content and identity guards; check-framework-antipatterns.ts flags z.coerce.boolean() env flags.
  • .mcpbignore root dev-dir patterns anchored with a leading slash.
  • Vendored skills synced to mcp-ts-core 0.10.6.

Dependencies:

  • @cyanheads/mcp-ts-core ^0.9.21 → ^0.10.6
  • @types/node ^25.9.1 → ^25.9.3

106 tests pass; bun run devcheck clean.

v0.1.7: Error-contract fixes: recovery hints for block_not_found, geography_not_found, provider_not_found, and missing_geography_ids

Choose a tag to compare

@cyanheads cyanheads released this 04 Jun 08:34
v0.1.7
19c1ca6

Error-contract fixes: recovery hints for block_not_found, geography_not_found, provider_not_found, and missing_geography_ids

Service-layer notFound() throws omitted data.recovery.hint — agents received the correct error code but no structured recovery guidance. Handlers now own the guard via ctx.fail() + ctx.recoveryFor() so the full wire shape is always populated.

Fixed:

  • fcc_compare_areas: wrong reason invalid_all_states_combo reused when no geography_ids provided — now missing_geography_ids (#7)
  • fcc_search_availability, fcc_get_coverage_summary, fcc_get_provider: not-found guards moved from service to handler; recovery hints now on the wire (#9)
  • fcc_geocode_block: service returns null for off-US/water coords; handler throws block_not_found with recovery hint (#10)

106 tests pass; bun run devcheck clean.

v0.1.6: mcp-ts-core framework adoption ^0.9.21

Choose a tag to compare

@cyanheads cyanheads released this 02 Jun 14:17
v0.1.6
64263ac

mcp-ts-core framework adoption ^0.9.21

Adopts @cyanheads/mcp-ts-core ^0.9.16 → ^0.9.21. Key changes in this range:

Changed:

  • HTTP transport per-request log context fix — 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.21
  • vitest ^4.1.7 → ^4.1.8

105 tests pass; bun run devcheck clean.

v0.1.5: Enrichment adoption across search/coverage tools

Choose a tag to compare

@cyanheads cyanheads released this 30 May 09:41
v0.1.5
90c7d77

Enrichment adoption across search/coverage tools

Query echoes, result totals, and empty-result guidance now surface in a typed
enrichment block that reaches both the structuredContent JSON and the
content[] markdown trailer on all search, list, and coverage tools.

Changed:

  • fcc_search_availability, fcc_search_providers, fcc_find_underserved, fcc_get_coverage_summary, fcc_compare_areas, fcc_list_downloads — enrichment block with appliedFilters, totalFound (where applicable), and notice on empty results
  • fcc_find_underserved structuredContent — totalFound and notice moved from output to enrichment; value/presence preserved in both channels
  • fcc_search_providers structuredContent — notice moved from output to enrichment; value/presence preserved in both channels

Dependency bumps:

  • @cyanheads/mcp-ts-core ^0.9.13 → ^0.9.16

48 tests pass; bun run devcheck clean.

v0.1.4: mcp-ts-core ^0.9.9 → ^0.9.13, error-code reclassifications

Choose a tag to compare

@cyanheads cyanheads released this 29 May 05:13
v0.1.4
83d3671

mcp-ts-core ^0.9.9 → ^0.9.13, error-code reclassifications

Adopts @cyanheads/mcp-ts-core ^0.9.13 from ^0.9.9, picking up HTTP transport hardening, quieter logging for expected client errors, and GET /mcp keyword surfacing. Four error codes reclassified from InvalidParams to ValidationError on client-observable paths.

Changed:

  • @cyanheads/mcp-ts-core ^0.9.9 → ^0.9.13 (HTTP 413 body cap via MCP_HTTP_MAX_BODY_BYTES; session-init gate rejects non-initialize requests without Mcp-Session-Id; 401/403/400/404 log at warning instead of error; GET /mcp surfaces package.json keywords)
  • fcc_compare_areas reason invalid_all_states_combo — code InvalidParams → ValidationError
  • fcc_get_coverage_summary reason invalid_geography_combo — code InvalidParams → ValidationError
  • fcc_list_downloads reason invalid_as_of_date — code InvalidParams → ValidationError
  • geography-summary resource invalid-type path — invalidParams factory → validationError
  • landing.requireAuth: false set in createApp() for public-catalog behavior under 0.9.13 default change

Dependency bumps:

  • @cyanheads/mcp-ts-core ^0.9.9 → ^0.9.13
  • @biomejs/biome ^2.4.15 → ^2.4.16

47 tests pass; bun run devcheck clean.

v0.1.3: package metadata, install badges, bun scripts

Choose a tag to compare

@cyanheads cyanheads released this 26 May 07:42
v0.1.3
8a62620

package metadata, install badges, bun scripts

Aligns package.json and README to ecosystem standard.

Added:

  • .github/FUNDING.yml — GitHub Sponsors and Buy Me a Coffee
  • author and funding fields in package.json
  • bugs and homepage fields in package.json
  • Install badges (Claude Desktop, Cursor, VS Code) in README
  • Docker and MCP SDK badges in README badge row

Changed:

  • Scripts migrated from tsx to bun run scripts/*.ts
  • start:stdio / start:http now use bun ./dist/index.js
  • tsx removed from devDependencies
  • packageManager: bun@1.3.2 added

47 tests pass; bun run devcheck clean.