Wraps the FCC's broadband deployment and coverage APIs for address-level availability lookups, census block geocoding, and digital divide analysis across US geographies. The nine tools cover block-to-FIPS conversion, provider search by coordinates or holding company, coverage summaries at state/county/congressional district/tribal land levels, and comparative ranking by unserved population. Speed thresholds go up to gigabit, with filters for technology type and urban/rural/tribal segments. Includes BDC bulk download manifests for researchers who need raw extracts. Built for BEAD program eligibility work, broadband equity research, and ISP competitive analysis where you need FCC Form 477 or BDC data without writing your own API client.
Access FCC broadband availability, coverage analysis, and digital divide data for US geographies and census blocks via MCP. STDIO or Streamable HTTP.
Public Hosted Server: https://fcc-broadband.caseyjhand.com/mcp
9 tools for working with FCC broadband data — block-level availability, geography-level coverage analysis, provider search, and BDC bulk download manifests:
| Tool | Description |
|---|---|
fcc_geocode_block | Converts a latitude/longitude coordinate to a census block FIPS code (15-digit), county FIPS, county name, state FIPS, state code, and state name. Required prerequisite for fcc_search_availability. |
fcc_search_availability | Queries broadband providers and advertised speeds at a census block, filtered by technology type and speed threshold. The starting point for any address-level broadband lookup. |
fcc_get_coverage_summary | Returns a broadband coverage summary for a geography — population with zero, one, two, or three-plus providers at a given speed threshold, split by urban/rural and tribal/non-tribal. |
fcc_compare_areas | Compares broadband coverage metrics across multiple geographies of the same type and returns a ranked table sorted by unserved or underserved population. |
fcc_find_underserved | Finds geographic areas with limited or no broadband coverage at a given speed threshold, ranked by underserved population. The core tool for BEAD program analysis and broadband equity research. |
fcc_search_providers | Searches for ISPs by holding company name, filtered by state and technology type. Returns a deduplicated list with hoconum identifiers for follow-up calls. |
fcc_get_provider | Returns a national-level coverage profile for a specific holding company — states served, technologies deployed, and locations covered at each speed tier. |
fcc_list_filing_periods | Returns available data vintages: Form 477 filing periods (Jun 2015–Jun 2021) and BDC as-of dates (Jun 2022 onward, requires credentials). |
fcc_list_downloads | Lists downloadable BDC data files for a specific as-of date — availability by state and provider, mobile coverage, and challenge data. Requires BDC API credentials. |
fcc_geocode_blockConvert geographic coordinates to a census block FIPS code for broadband availability lookups.
fcc_search_availability — the broadband deployment dataset is indexed by census block, not addressfcc_search_availabilityQuery which ISPs serve a specific census block and what speeds they advertise.
fcc_geocode_block to convert coordinates firsthoconum, techcode, maxaddown, maxadup, consumer, businessfcc_get_coverage_summaryAnalyze broadband access across any US geography at a given speed threshold.
nation, state, county, cd (congressional district), place (census-designated place), cbsa (metro area), tribalacfosw), fiber only (f), cable (c), DSL (a), satellite (s), fixed wireless (w), or combinationsfcc_compare_areasRank geographies by broadband access metrics to identify where underservice is worst.
compare_all_states: truefcc_find_underservedFind the most broadband-underserved areas within a state or nationwide.
fcc_search_providersLook up ISPs by name or state to get hoconum identifiers for follow-up queries.
"Comcast", "T-Mobile", "Frontier"hoconum, states served, and technology codesfcc_search_availabilityfcc_list_filing_periodsDiscover valid data vintages before querying download manifests.
FCC_BDC_USERNAME and FCC_BDC_HASH_VALUEfcc_list_downloads to determine valid as_of_date valuesfcc_list_downloadsList BDC bulk data files available for download for a specific filing period.
FCC_BDC_USERNAME, FCC_BDC_HASH_VALUE)| Type | Name | Description |
|---|---|---|
| Resource | fcc-broadband://geography/{type}/{id}/summary | Broadband coverage summary for a specific geography: provider counts by speed tier, urban/rural split, tribal breakdown. Addressable by type and GEOID. |
| Resource | fcc-broadband://providers/list | List of all Form 477 holding companies with hoconum identifiers and names. Reference for resolving hoconum before calling fcc_get_provider. |
| Prompt | broadband_equity_analysis | Structures a digital divide analysis comparing broadband access across demographic groups — guides chaining with Census and BLS data. Accepts region and focus (underserved, rural, tribal, all). |
All resource data is also reachable via tools. The providers/list resource is derived from the deployment table via $group aggregation — use fcc_search_providers for filtered lookups.
Built on @cyanheads/mcp-ts-core:
none, jwt, oauthin-memory, filesystem, Supabase, Cloudflare KV/R2/D1FCC broadband-specific:
credentials_required error with setup instructions when credentials are absent; all Form 477 and geocoding tools always work without credentialsxvwq-qtaj) instead of querying the 50M-row deployment table, enabling fast coverage analysis at county and state scaleAgent-friendly output:
block_not_found, credentials_required, geography_not_found, invalid_as_of_date) with actionable next-step hints so agents can recover without parsing textfcc_get_coverage_summary outputs so agents can target equity analysis without additional queriesA public instance is available at https://fcc-broadband.caseyjhand.com/mcp — no installation required. Point any MCP client at it via Streamable HTTP:
{
"mcpServers": {
"fcc-broadband-mcp-server": {
"type": "streamable-http",
"url": "https://fcc-broadband.caseyjhand.com/mcp"
}
}
}
Add the following to your MCP client configuration file.
{
"mcpServers": {
"fcc-broadband-mcp-server": {
"type": "stdio",
"command": "bunx",
"args": ["@cyanheads/fcc-broadband-mcp-server@latest"],
"env": {
"MCP_TRANSPORT_TYPE": "stdio",
"MCP_LOG_LEVEL": "info"
}
}
}
}
Or with npx (no Bun required):
{
"mcpServers": {
"fcc-broadband-mcp-server": {
"type": "stdio",
"command": "npx",
"args": ["-y", "@cyanheads/fcc-broadband-mcp-server@latest"],
"env": {
"MCP_TRANSPORT_TYPE": "stdio",
"MCP_LOG_LEVEL": "info"
}
}
}
}
For Streamable HTTP, set the transport and start the server:
MCP_TRANSPORT_TYPE=http MCP_HTTP_PORT=3010 bun run start:http
# Server listens at http://localhost:3010/mcp
fcc_list_downloads and BDC filing periods. Generate a token at broadbandmap.fcc.gov under "Manage API Access" — no OAuth, manual token generation only.FCC_OPENDATA_APP_TOKEN) for higher rate limits on Form 477 queries.git clone https://github.com/cyanheads/fcc-broadband-mcp-server.git
cd fcc-broadband-mcp-server
bun install
cp .env.example .env
# edit .env and set required vars
All configuration is validated at startup via Zod schemas in src/config/. Key environment variables:
| Variable | Description | Default |
|---|---|---|
MCP_TRANSPORT_TYPE | Transport: stdio or http | stdio |
MCP_HTTP_PORT | HTTP server port | 3010 |
MCP_HTTP_ENDPOINT_PATH | HTTP endpoint path | /mcp |
MCP_PUBLIC_URL | Public origin override for TLS-terminating reverse-proxy deployments | none |
MCP_AUTH_MODE | Authentication: none, jwt, or oauth | none |
MCP_LOG_LEVEL | Log level (debug, info, warning, error, etc.) | info |
LOGS_DIR | Directory for log files (Node.js only) | <project-root>/logs |
STORAGE_PROVIDER_TYPE | Storage backend: in-memory, filesystem, supabase, cloudflare-kv/r2/d1 | in-memory |
FCC_BDC_USERNAME | FCC account email for BDC API. Without this, fcc_list_downloads and BDC-era fcc_list_filing_periods return a credentials_required error. | none |
FCC_BDC_HASH_VALUE | API token hash from broadbandmap.fcc.gov "Manage API Access". Paired with FCC_BDC_USERNAME. | none |
FCC_OPENDATA_APP_TOKEN | Socrata app token. Increases rate limits on Form 477 queries; not required for functionality. | none |
OTEL_ENABLED | Enable OpenTelemetry instrumentation | false |
See .env.example for the full list of optional overrides.
Build and run:
# One-time build
bun run rebuild
# Run the built server
bun run start:stdio
# or
bun run start:http
Run checks and tests:
bun run devcheck # Lint, format, typecheck, security
bun run test # Vitest test suite
bun run lint:mcp # Validate MCP definitions against spec
docker build -t fcc-broadband-mcp-server .
docker run --rm -e MCP_TRANSPORT_TYPE=http -p 3010:3010 fcc-broadband-mcp-server
The Dockerfile defaults to HTTP transport and stateless session mode, logging to /var/log/fcc-broadband-mcp-server. OpenTelemetry peer dependencies are installed by default — build with --build-arg OTEL_ENABLED=false to omit them.
| Directory | Purpose |
|---|---|
src/index.ts | createApp() entry point — registers tools, resources, and prompts and inits services. |
src/config | Server-specific environment variable parsing and validation with Zod. |
src/mcp-server/tools | Tool definitions (*.tool.ts). Nine tools across FCC Open Data, BDC API, and Geo API. |
src/mcp-server/resources | Resource definitions (*.resource.ts). Geography summary and provider list resources. |
src/mcp-server/prompts | Prompt definitions (*.prompt.ts). Broadband equity analysis prompt. |
src/services/open-data | FCC Open Data Socrata service — Form 477 deployment and area table queries. |
src/services/bdc-api | BDC Public Data API service — authenticated filing period and download manifest endpoints. |
src/services/geo-api | FCC Geo API service — lat/lon to census block FIPS conversion. |
tests/ | Unit and integration tests mirroring src/. |
See CLAUDE.md for development guidelines and architectural rules. The short version:
try/catch in tool logicctx.log for request-scoped logging, ctx.state for tenant-scoped storagesrc/mcp-server/*/definitions/index.tshas_0, has_1, has_2, has_3more, maxaddown, maxadup as integersIssues and pull requests are welcome. Run checks and tests before submitting:
bun run devcheck
bun run test
Apache-2.0 — see LICENSE for details.
MCP_LOG_LEVELdefault: infoSets the minimum log level for output (e.g., 'debug', 'info', 'warn').
MCP_HTTP_HOSTdefault: 127.0.0.1The hostname for the HTTP server.
MCP_HTTP_PORTdefault: 3010The port to run the HTTP server on.
MCP_HTTP_ENDPOINT_PATHdefault: /mcpThe endpoint path for the MCP server.
MCP_AUTH_MODEdefault: noneAuthentication mode to use: 'none', 'jwt', or 'oauth'.
com.mcparmory/google-sheets
domdomegg/google-sheets-mcp
henilcalagiya/google-sheets-mcp
cct15/war-dashboard-data
moooonad/mcp-google-sheets-full
io.github.br0ski777/csv-to-json