fcc-broadband-mcp-server
Provides tools for accessing FCC broadband availability, coverage analysis, and digital divide data for US geographies and census blocks.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@fcc-broadband-mcp-serverShow me the broadband coverage summary for San Francisco County, California."
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Public Hosted Server: https://fcc-broadband.caseyjhand.com/mcp
Tools
9 tools for working with FCC broadband data — block-level availability, geography-level coverage analysis, provider search, and BDC bulk download manifests:
Tool | Description |
| 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 |
| 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. |
| 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. |
| Compares broadband coverage metrics across multiple geographies of the same type and returns a ranked table sorted by unserved or underserved population. |
| 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. |
| Searches for ISPs by holding company name, filtered by state and technology type. Returns a deduplicated list with |
| Returns a national-level coverage profile for a specific holding company — states served, technologies deployed, and locations covered at each speed tier. |
| Returns available data vintages: Form 477 filing periods (Jun 2015–Jun 2021) and BDC as-of dates (Jun 2022 onward, requires credentials). |
| 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_block
Convert geographic coordinates to a census block FIPS code for broadband availability lookups.
Calls the FCC Geo API — no auth required, no rate limit documented
Returns 15-digit block FIPS, 5-digit county FIPS, county name, state FIPS, 2-letter state code, and state name
Required first step before
fcc_search_availability— the broadband deployment dataset is indexed by census block, not address
fcc_search_availability
Query which ISPs serve a specific census block and what speeds they advertise.
Requires a 15-digit census block FIPS; use
fcc_geocode_blockto convert coordinates firstFilter by technology code (fiber=50, cable=40–43, DSL=10–12, satellite=60, fixed wireless=70)
Filter by minimum advertised download speed in Mbps
Filter to consumer-only or business-only service
Returns per-provider records with
hoconum,techcode,maxaddown,maxadup,consumer,businessCoverage is Form 477 data through June 2021 — reflects ISP-reported availability at census block granularity (not address-level)
fcc_get_coverage_summary
Analyze broadband access across any US geography at a given speed threshold.
Supports seven geography types:
nation,state,county,cd(congressional district),place(census-designated place),cbsa(metro area),tribalTechnology filter: any wired/fixed wireless (
acfosw), fiber only (f), cable (c), DSL (a), satellite (s), fixed wireless (w), or combinationsSpeed thresholds: 0.2, 4, 10, 25 (FCC legacy broadband definition), 100 (BEAD standard), 250, 1000 Mbps
Returns population breakdowns: zero providers (unserved), one (no competition), two, three-plus; coverage %, unserved %, competitive %
Per-segment breakdown by urban/rural and tribal/non-tribal for equity analysis
fcc_compare_areas
Rank geographies by broadband access metrics to identify where underservice is worst.
Compare up to 50 geographies of the same type, or all 50 states + DC via
compare_all_states: trueSort by unserved population share, raw unserved headcount (useful for BEAD funding allocation), coverage rate, or competitive share
Returns a ranked table with per-geography population and coverage metrics
Each row includes the resolved geography name alongside its GEOID when available
fcc_find_underserved
Find the most broadband-underserved areas within a state or nationwide.
Scope to a specific state or run nationwide (returns top areas only)
Geography granularity: county, congressional district, census place, or CBSA
Default filter: rural areas only — where underservice is most concentrated
Minimum unserved population threshold to exclude very small areas
Results ranked by unserved population percentage
Each row includes the resolved geography name alongside its GEOID when available
fcc_search_providers
Look up ISPs by name or state to get hoconum identifiers for follow-up queries.
Case-insensitive partial name match — e.g.,
"Comcast","T-Mobile","Frontier"Filter by 2-letter state abbreviation or technology code
Returns deduplicated holding companies with
hoconum, states served, and technology codesGeographic filtering is state-level; sub-state granularity requires cross-referencing block data via
fcc_search_availabilityUp to 200 results per call
fcc_list_filing_periods
Discover valid data vintages before querying download manifests.
Form 477 periods (Jun 2015–Jun 2021) are hardcoded — always available, no credentials needed
BDC as-of dates (Jun 2022 onward) are fetched live from the authenticated API — requires
FCC_BDC_USERNAMEandFCC_BDC_HASH_VALUECall before
fcc_list_downloadsto determine validas_of_datevalues
fcc_list_downloads
List BDC bulk data files available for download for a specific filing period.
Requires BDC API credentials (
FCC_BDC_USERNAME,FCC_BDC_HASH_VALUE)Filter by data type (availability or challenge), file category, technology type, state, or provider name
Returns file metadata — provider, state, technology, record count — plus download URLs
Returns file manifests, not file contents; BDC CSVs are large zipped files not suitable for inline API response
Related MCP server: census-mcp
Resources and prompts
Type | Name | Description |
Resource |
| Broadband coverage summary for a specific geography: provider counts by speed tier, urban/rural split, tribal breakdown. Addressable by type and GEOID. |
Resource |
| List of all Form 477 holding company numbers ( |
Prompt |
| Structures a digital divide analysis comparing broadband access across demographic groups — guides chaining with Census and BLS data. Accepts |
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.
Features
Built on @cyanheads/mcp-ts-core:
Declarative tool, resource, and prompt definitions — single file per primitive, framework handles registration and validation
Unified error handling — handlers throw, framework catches, classifies, and formats
Pluggable auth:
none,jwt,oauthSwappable storage backends:
in-memory,filesystem,Supabase,Cloudflare KV/R2/D1Structured logging with optional OpenTelemetry tracing
STDIO and Streamable HTTP transports
FCC broadband-specific:
Wraps three FCC data sources: Form 477 public data via Socrata (no auth, 2015–2021), BDC Public Data API (authenticated, Jun 2022 onward), and FCC Geo API (no auth)
Auth-optional design — BDC tools return a structured
credentials_requirederror with setup instructions when credentials are absent; all Form 477 and geocoding tools always work without credentialsArea Table aggregation for equity analysis — uses the pre-aggregated geography table (
xvwq-qtaj) instead of querying the 50M-row deployment table, enabling fast coverage analysis at county and state scaleAll data is US federal government public domain (17 USC §105) — safe to distribute and cache
Agent-friendly output:
Structured error contracts on every tool — typed error codes (
block_not_found,credentials_required,geography_not_found,invalid_as_of_date) with actionable next-step hints so agents can recover without parsing textPer-segment breakdowns in coverage tools — urban/rural and tribal/non-tribal split in
fcc_get_coverage_summaryoutputs so agents can target equity analysis without additional queriesTwo-era data coverage bridged transparently — Form 477 (2015–2021) and BDC (2022–present) exposed through a unified tool surface, with data ceiling documented in tool descriptions so agents can surface limitations accurately
Getting started
Public Hosted Instance
A 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"
}
}
}Self-Hosted / Local
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/mcpPrerequisites
Bun v1.3.0 or higher (or Node.js v24+).
Optional: FCC BDC credentials for
fcc_list_downloadsand BDC filing periods. Generate a token at broadbandmap.fcc.gov under "Manage API Access" — no OAuth, manual token generation only.Optional: Socrata app token (
FCC_OPENDATA_APP_TOKEN) for higher rate limits on Form 477 queries.
Installation
Clone the repository:
git clone https://github.com/cyanheads/fcc-broadband-mcp-server.gitNavigate into the directory:
cd fcc-broadband-mcp-serverInstall dependencies:
bun installConfigure environment:
cp .env.example .env
# edit .env and set required varsConfiguration
All configuration is validated at startup via Zod schemas in src/config/. Key environment variables:
Variable | Description | Default |
| Transport: |
|
| HTTP server port |
|
| HTTP endpoint path |
|
| Public origin override for TLS-terminating reverse-proxy deployments | none |
| Authentication: |
|
| Log level ( |
|
| Directory for log files (Node.js only) |
|
| Storage backend: |
|
| FCC account email for BDC API. Without this, | none |
| API token hash from broadbandmap.fcc.gov "Manage API Access". Paired with | none |
| Socrata app token. Increases rate limits on Form 477 queries; not required for functionality. | none |
| Serve Form 477 queries from a local SQLite mirror when its coverage allows (see Local Form 477 mirror). |
|
| Directory holding the Form 477 mirror SQLite files. |
|
|
|
See .env.example for the full list of optional overrides.
Local Form 477 mirror (opt-in)
The Form 477 corpus is frozen — June 2021 was the last filing period — so it can be mirrored locally once and served without touching the live Socrata API. The mirror is off by default; when disabled (or not yet bootstrapped), every tool behaves exactly as before.
The corpus is large: ~78M block-level deployment rows and ~24M area-summary rows, roughly 9 GB of source data. A full ingest is an hours-scale one-time job, so the bootstrap is state-scoped — you can mirror just the states you query:
# Ingest specific states by 2-digit FIPS (e.g. 11 = DC, 53 = WA)
bun run mirror:init -- --states 11,53
# Or ingest the whole corpus (~9 GB download, hours)
bun run mirror:init -- --full
# Inspect coverage, row counts, and SQLite integrity
bun run mirror:verifyThen set FCC_MIRROR_ENABLED=true. Serving rules:
Block/geography lookups (
fcc_search_availability,fcc_get_coverage_summary,fcc_compare_areas,fcc_find_underserved) serve from the mirror when the queried state is fully ingested; anything else falls back to the live API silently.Cross-state aggregations (
fcc_search_providers,fcc_get_provider) and geographies whose GEOID embeds no state (cbsa, tribal, nation) serve from the mirror only after a--fullingest.
One behavioral difference: provider name search (fcc_search_providers) uses word-prefix matching on the mirror (FTS5 — comc matches "Comcast") instead of the live API's arbitrary-substring match (mcast matches "Comcast" live but not on the mirror). Mid-word fragments may return fewer results from the mirror.
The ingest is idempotent and resumable: already-covered states are skipped, and an interrupted run resumes from its persisted cursor. Set FCC_OPENDATA_APP_TOKEN before a full ingest to raise Socrata's rate limits. Under Bun the mirror uses the built-in bun:sqlite; under Node.js install the optional better-sqlite3 peer dependency.
In Docker, the image ships the lifecycle scripts and a writable data/ directory:
docker exec <container> bun run mirror:init -- --states 11,53Running the server
Local development
Build and run:
# One-time build bun run rebuild # Run the built server bun run start:stdio # or bun run start:httpRun 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
docker build -t fcc-broadband-mcp-server .
docker run --rm -e MCP_TRANSPORT_TYPE=http -p 3010:3010 fcc-broadband-mcp-serverThe 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.
Project structure
Directory | Purpose |
|
|
| Server-specific environment variable parsing and validation with Zod. |
| Tool definitions ( |
| Resource definitions ( |
| Prompt definitions ( |
| FCC Open Data Socrata service — Form 477 deployment and area table queries. |
| BDC Public Data API service — authenticated filing period and download manifest endpoints. |
| FCC Geo API service — lat/lon to census block FIPS conversion. |
| Unit and integration tests mirroring |
Development guide
See CLAUDE.md for development guidelines and architectural rules. The short version:
Handlers throw, framework catches — no
try/catchin tool logicUse
ctx.logfor request-scoped logging,ctx.statefor tenant-scoped storageRegister new tools and resources via the barrels in
src/mcp-server/*/definitions/index.tsWrap external API calls: validate raw → normalize to domain type → return output schema; never fabricate missing fields
Socrata returns all numeric fields as strings — parse
has_0,has_1,has_2,has_3more,maxaddown,maxadupas integers
Contributing
Issues and pull requests are welcome. Run checks and tests before submitting:
bun run devcheck
bun run testLicense
Apache-2.0 — see LICENSE for details.
This server cannot be installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Servers
- Flicense-qualityCmaintenanceA production-grade MCP server for querying U.S. Census Bureau data (ACS 5-Year and Decennial) with tools for geographic fuzzy matching, variable search, and batched data retrieval, backed by a PostgreSQL cache for performance.Last updated
- Flicense-qualityCmaintenanceRemote MCP server exposing US Census (ACS 5-year) and FEMA flood data. Works as a connector in both Claude and ChatGPT.Last updated
- AlicenseBqualityBmaintenanceEnables access to high-value US public data sources via MCP, including federal agencies, state portals, and platforms like Socrata, ArcGIS, and CKAN, with tools for searching, querying, and geographic resolution.Last updated16MIT
- Alicense-qualityAmaintenanceSearch and query government open-data portals (Socrata SODA API) via MCP.Last updated1002Apache 2.0
Related MCP Connectors
FCC Open Data (opendata.fcc.gov) Socrata MCP.
DataDC MCP — Washington, DC open data (opendata.dc.gov, ArcGIS REST API).
Browse and query the EIA API v2 — electricity, petroleum, natural gas, coal, forecasts via MCP.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/cyanheads/fcc-broadband-mcp-server'
If you have feedback or need assistance with the MCP directory API, please join our Discord server