@cyanheads/fcc-broadband-mcp-server

v0.1.4 pre-1.0

Access FCC broadband availability, coverage analysis, and digital divide data for US geographies and census blocks via MCP. STDIO or Streamable HTTP.

@cyanheads/fcc-broadband-mcp-server
claude mcp add --transport http fcc-broadband-mcp-server https://fcc-broadband.caseyjhand.com/mcp
codex mcp add fcc-broadband-mcp-server --url https://fcc-broadband.caseyjhand.com/mcp
{
  "mcpServers": {
    "fcc-broadband-mcp-server": {
      "url": "https://fcc-broadband.caseyjhand.com/mcp"
    }
  }
}
gemini mcp add --transport http fcc-broadband-mcp-server https://fcc-broadband.caseyjhand.com/mcp
{
  "mcpServers": {
    "fcc-broadband-mcp-server": {
      "command": "bunx",
      "args": [
        "@cyanheads/fcc-broadband-mcp-server@latest"
      ]
    }
  }
}
{
  "mcpServers": {
    "fcc-broadband-mcp-server": {
      "type": "http",
      "url": "https://fcc-broadband.caseyjhand.com/mcp"
    }
  }
}
curl -X POST https://fcc-broadband.caseyjhand.com/mcp \
  -H "Content-Type: application/json" \
  -H "MCP-Protocol-Version: 2025-11-25" \
  -d '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2025-11-25","capabilities":{},"clientInfo":{"name":"curl","version":"1.0.0"}}}'

Tools

9

fcc_geocode_block

Converts a latitude/longitude coordinate to a 15-digit census block FIPS code, plus county FIPS, county name, state FIPS, state code, and state name. This is the required prerequisite for fcc_search_availability since the broadband dataset is indexed by census block, not address. Uses the FCC public Geo API — no authentication required.

read
invocation
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "fcc_geocode_block",
    "arguments": {
      "latitude": "<latitude>",
      "longitude": "<longitude>"
    }
  }
}
schema
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "latitude": {
      "type": "number",
      "minimum": -90,
      "maximum": 90,
      "description": "Latitude of the location in decimal degrees (e.g., 47.6062 for Seattle, WA). Must be within the continental US, Alaska, Hawaii, or US territories."
    },
    "longitude": {
      "type": "number",
      "minimum": -180,
      "maximum": 180,
      "description": "Longitude of the location in decimal degrees (e.g., -122.3321 for Seattle, WA). Negative for western hemisphere."
    }
  },
  "required": [
    "latitude",
    "longitude"
  ],
  "additionalProperties": false
}
view source ↗

fcc_search_availability

Queries broadband providers and advertised speeds at a census block from FCC Form 477 data (as of June 2021). Answers "which ISPs serve this location and what speeds do they offer?" — the core tool for address-level broadband lookup. Requires a 15-digit census block FIPS code; use fcc_geocode_block to convert coordinates first. Data reflects ISP-reported availability at the block level, which may overstate actual coverage for some addresses.

read
invocation
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "fcc_search_availability",
    "arguments": {
      "block_fips": "<block_fips>"
    }
  }
}
schema
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "block_fips": {
      "type": "string",
      "pattern": "^\\d{15}$",
      "description": "15-digit census block FIPS code (e.g., \"530330081021016\"). Obtain from fcc_geocode_block using address coordinates."
    },
    "tech_filter": {
      "description": "Technology codes to filter. 50=Fiber to premises, 40–43=Cable modem, 10–12=DSL variants, 60=Satellite, 70=Fixed wireless. Omit to return all technologies.",
      "type": "array",
      "items": {
        "type": "string",
        "enum": [
          "10",
          "11",
          "12",
          "40",
          "41",
          "42",
          "43",
          "50",
          "60",
          "70"
        ]
      }
    },
    "min_speed_down": {
      "description": "Minimum advertised download speed in Mbps to include in results. Omit to return all providers regardless of speed.",
      "type": "number",
      "minimum": 0
    },
    "consumer": {
      "description": "Filter to consumer service (true) or business service (false). Omit to return both consumer and business offerings.",
      "type": "boolean"
    }
  },
  "required": [
    "block_fips"
  ],
  "additionalProperties": false
}
view source ↗

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 segments. The primary tool for digital divide and equity analysis. Supports state, county, congressional district, census place, CBSA (metro area), tribal area, and national level. Data is from FCC Form 477 (as of June 2021). Use 100 Mbps as the speed threshold for BEAD program policy analysis.

read
invocation
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "fcc_get_coverage_summary",
    "arguments": {
      "geography_type": "<geography_type>"
    }
  }
}
schema
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "geography_type": {
      "type": "string",
      "enum": [
        "nation",
        "state",
        "county",
        "cd",
        "place",
        "cbsa",
        "tribal"
      ],
      "description": "Geographic aggregation level. \"nation\" = US-wide totals (geography_id not needed). \"cd\" = congressional district. \"place\" = census-designated place. \"cbsa\" = core-based statistical area (metro area). \"tribal\" = tribal land area."
    },
    "geography_id": {
      "description": "FIPS GEOID for the geography. State: 2-digit (e.g., \"06\" for California). County: 5-digit (e.g., \"06037\" for LA County). Congressional district: 4-digit state+district (e.g., \"0601\"). CBSA: 5-digit code. Omit for nation-level queries.",
      "type": "string"
    },
    "tech_filter": {
      "default": "acfosw",
      "description": "Technology filter. \"acfosw\" = any wired or fixed wireless (recommended baseline). \"f\" = fiber only. \"c\" = cable only. \"a\" = ADSL/DSL only. \"s\" = satellite only. \"w\" = fixed wireless only. Mix letters for combinations, e.g., \"fc\" = fiber or cable.",
      "type": "string",
      "enum": [
        "acfosw",
        "f",
        "c",
        "a",
        "o",
        "s",
        "w"
      ]
    },
    "speed_down": {
      "default": "25",
      "description": "Minimum download speed threshold in Mbps. 25 = FCC legacy broadband definition. 100 = BEAD program standard (use this for current policy analysis). \"0.2\" = any service above 200 Kbps.",
      "type": "string",
      "enum": [
        "4",
        "10",
        "25",
        "100",
        "250",
        "1000",
        "0.2"
      ]
    },
    "urban_rural_filter": {
      "default": "all",
      "description": "Filter to urban (\"U\") or rural (\"R\") areas only, or \"all\" for both combined. Rural breakdown is key for BEAD program analysis.",
      "type": "string",
      "enum": [
        "all",
        "R",
        "U"
      ]
    },
    "tribal_filter": {
      "default": "all",
      "description": "Filter to tribal (\"T\") or non-tribal (\"N\") areas. Use \"T\" to assess Native American connectivity gaps.",
      "type": "string",
      "enum": [
        "all",
        "T",
        "N"
      ]
    }
  },
  "required": [
    "geography_type",
    "tech_filter",
    "speed_down",
    "urban_rural_filter",
    "tribal_filter"
  ],
  "additionalProperties": false
}
view source ↗

fcc_search_providers

Searches for ISPs by holding company name, filtered by state and technology type. Returns a deduplicated list of matching providers with hoconum identifiers for follow-up calls to fcc_get_provider. Answers "which ISPs serve Washington with fiber?" and "find all Comcast entities." Geographic filtering is state-level; sub-state granularity requires cross-referencing block data. Data is from FCC Form 477 (as of June 2021).

read
invocation
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "fcc_search_providers",
    "arguments": {}
  }
}
schema
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "name_search": {
      "description": "Partial holding company name to search (case-insensitive). e.g., \"Comcast\", \"T-Mobile\", \"Frontier\". Omit to list all providers in a state.",
      "type": "string"
    },
    "state": {
      "description": "2-letter state abbreviation (e.g., \"WA\") to limit results to providers serving that state.",
      "type": "string",
      "pattern": "^[A-Z]{2}$"
    },
    "tech_filter": {
      "description": "Technology codes to filter. 50=Fiber, 40–43=Cable, 10–12=DSL, 60=Satellite, 70=Fixed wireless. Omit for all technologies.",
      "type": "array",
      "items": {
        "type": "string",
        "enum": [
          "10",
          "11",
          "12",
          "40",
          "41",
          "42",
          "43",
          "50",
          "60",
          "70"
        ]
      }
    },
    "limit": {
      "default": 50,
      "description": "Maximum number of distinct providers to return.",
      "type": "integer",
      "minimum": 1,
      "maximum": 200
    }
  },
  "required": [
    "limit"
  ],
  "additionalProperties": false
}
view source ↗

fcc_get_provider

Returns a national-level coverage profile for a specific holding company (by hoconum): states served, technologies deployed, and the number of locations covered at each download speed tier. Use fcc_search_providers to find valid hoconum values. Data is from FCC Form 477 (as of June 2021).

read
invocation
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "fcc_get_provider",
    "arguments": {
      "hoconum": "<hoconum>"
    }
  }
}
schema
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "hoconum": {
      "type": "string",
      "description": "Holding company number from fcc_search_providers (e.g., \"130152\" for Comcast). Required identifier for the provider."
    }
  },
  "required": [
    "hoconum"
  ],
  "additionalProperties": false
}
view source ↗

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. Answers "which counties in this state have the worst broadband access?" and drives BEAD funding prioritization. Provide up to 50 geography IDs, or set compare_all_states=true for all 50 states + DC. Data is from FCC Form 477 (as of June 2021).

read
invocation
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "fcc_compare_areas",
    "arguments": {
      "geography_type": "<geography_type>"
    }
  }
}
schema
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "geography_type": {
      "type": "string",
      "enum": [
        "state",
        "county",
        "cd",
        "place",
        "cbsa",
        "tribal"
      ],
      "description": "Geographic level to compare. Must be uniform across all geographies in the comparison."
    },
    "geography_ids": {
      "description": "Array of FIPS GEOIDs to compare (up to 50). For all 50 states, omit and set compare_all_states=true.",
      "minItems": 2,
      "maxItems": 50,
      "type": "array",
      "items": {
        "type": "string"
      }
    },
    "compare_all_states": {
      "default": false,
      "description": "When true, compares all 50 states + DC. Overrides geography_ids. Requires geography_type=\"state\".",
      "type": "boolean"
    },
    "tech_filter": {
      "default": "acfosw",
      "description": "Technology filter. \"acfosw\" = any wired or fixed wireless. \"f\" = fiber only. \"c\" = cable only. \"a\" = DSL. \"s\" = satellite. \"w\" = fixed wireless.",
      "type": "string",
      "enum": [
        "acfosw",
        "f",
        "c",
        "a",
        "o",
        "s",
        "w"
      ]
    },
    "speed_down": {
      "default": "25",
      "description": "Download speed threshold in Mbps. 25 = FCC legacy standard. 100 = BEAD program standard.",
      "type": "string",
      "enum": [
        "4",
        "10",
        "25",
        "100",
        "250",
        "1000",
        "0.2"
      ]
    },
    "sort_by": {
      "default": "unserved_pct",
      "description": "\"unserved_pct\" = share of population with no broadband (default). \"unserved_pop\" = raw headcount for BEAD funding. \"coverage_pct\" = share with any coverage. \"competitive_pct\" = share with 2+ providers.",
      "type": "string",
      "enum": [
        "unserved_pct",
        "unserved_pop",
        "coverage_pct",
        "competitive_pct"
      ]
    }
  },
  "required": [
    "geography_type",
    "compare_all_states",
    "tech_filter",
    "speed_down",
    "sort_by"
  ],
  "additionalProperties": false
}
view source ↗

fcc_find_underserved

Finds geographic areas with limited or no broadband coverage at a given speed threshold, ranked by unserved population. The core tool for BEAD program analysis and broadband equity research. Accepts a state abbreviation to narrow scope or runs nationwide. Defaults to rural areas where underservice is most concentrated. Data is from FCC Form 477 (as of June 2021).

read
invocation
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "fcc_find_underserved",
    "arguments": {}
  }
}
schema
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "state": {
      "description": "2-letter state code (e.g., \"WY\", \"MS\") to limit scope. Omit for nationwide search — returns top areas only.",
      "type": "string",
      "pattern": "^[A-Z]{2}$"
    },
    "geography_type": {
      "default": "county",
      "description": "Geographic granularity for results. \"county\" is most useful for policy analysis and BEAD eligibility. \"cd\" = congressional district. \"place\" = census-designated place. \"cbsa\" = metro area.",
      "type": "string",
      "enum": [
        "county",
        "cd",
        "place",
        "cbsa"
      ]
    },
    "speed_down": {
      "default": "25",
      "description": "Download speed threshold in Mbps for defining \"underserved.\" 25 = FCC legacy standard. 100 = BEAD program standard.",
      "type": "string",
      "enum": [
        "4",
        "10",
        "25",
        "100",
        "250",
        "1000",
        "0.2"
      ]
    },
    "tech_filter": {
      "default": "acfosw",
      "description": "Technology filter. \"acfosw\" = any wired or fixed wireless. \"f\" = fiber only. \"c\" = cable only.",
      "type": "string",
      "enum": [
        "acfosw",
        "f",
        "c",
        "a",
        "o",
        "s",
        "w"
      ]
    },
    "min_unserved_pop": {
      "default": 0,
      "description": "Minimum population with no coverage to include. Use to filter out very small areas (e.g., 500 filters areas with fewer than 500 unserved residents).",
      "type": "integer",
      "minimum": 0,
      "maximum": 9007199254740991
    },
    "urban_rural_filter": {
      "default": "R",
      "description": "Defaults to rural (\"R\") — where underservice is most concentrated. Use \"U\" to find underserved urban areas (digital redlining research). Set to \"all\" for both.",
      "type": "string",
      "enum": [
        "all",
        "R",
        "U"
      ]
    },
    "limit": {
      "default": 20,
      "description": "Maximum number of areas to return, ranked by unserved population (descending).",
      "type": "integer",
      "minimum": 1,
      "maximum": 100
    }
  },
  "required": [
    "geography_type",
    "speed_down",
    "tech_filter",
    "min_unserved_pop",
    "urban_rural_filter",
    "limit"
  ],
  "additionalProperties": false
}
view source ↗

fcc_list_filing_periods

Returns available data vintages: Form 477 filing periods (hardcoded Jun 2015 – Jun 2021, always available) and BDC as-of dates from the authenticated API (Jun 2022 onward, requires credentials). Call this before fcc_list_downloads to determine valid as_of_date values. Note: there is a data gap between June 2021 (last Form 477) and June 2022 (first BDC filing period).

read
invocation
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "fcc_list_filing_periods",
    "arguments": {}
  }
}
schema
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "include_bdc": {
      "default": false,
      "description": "When true, also fetches BDC as-of dates from the authenticated API (requires FCC_BDC_USERNAME and FCC_BDC_HASH_VALUE). When false (default), returns only hardcoded Form 477 periods.",
      "type": "boolean"
    }
  },
  "required": [
    "include_bdc"
  ],
  "additionalProperties": false
}
view source ↗

fcc_list_downloads

Lists downloadable BDC data files for a specific as-of date — fixed availability by state and provider, mobile coverage, and challenge data — with file metadata (provider, state, technology, record count). Download URLs are included for each file. Requires FCC BDC API credentials (FCC_BDC_USERNAME and FCC_BDC_HASH_VALUE). Use fcc_list_filing_periods first to determine valid as_of_date values (BDC dates start June 2022).

read
invocation
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "fcc_list_downloads",
    "arguments": {
      "as_of_date": "<as_of_date>"
    }
  }
}
schema
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "as_of_date": {
      "type": "string",
      "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
      "description": "BDC as-of date in YYYY-MM-DD format (e.g., \"2024-06-30\"). Get valid dates from fcc_list_filing_periods with include_bdc=true."
    },
    "data_type": {
      "default": "availability",
      "description": "\"availability\" = ISP-reported coverage files (by state and provider). \"challenge\" = consumer and government dispute records.",
      "type": "string",
      "enum": [
        "availability",
        "challenge"
      ]
    },
    "category": {
      "description": "File category. \"State\" = per-state coverage files. \"Provider\" = per-provider files. \"Summary\" = aggregate coverage tables.",
      "type": "string",
      "enum": [
        "Summary",
        "State",
        "Provider"
      ]
    },
    "technology_type": {
      "description": "Filter to a specific technology type of coverage data.",
      "type": "string",
      "enum": [
        "Fixed Broadband",
        "Mobile Broadband",
        "Mobile Voice"
      ]
    },
    "state": {
      "description": "Filter to one state's files (2-letter abbreviation, e.g., \"WA\").",
      "type": "string",
      "pattern": "^[A-Z]{2}$"
    },
    "provider_name": {
      "description": "Partial provider holding company name to filter results (case-insensitive).",
      "type": "string"
    }
  },
  "required": [
    "as_of_date",
    "data_type"
  ],
  "additionalProperties": false
}
view source ↗

Resources

2

Broadband coverage summary for a specific geography: provider counts by speed tier, urban/rural split, tribal breakdown. Addressable by type and GEOID. Uses 25 Mbps speed threshold and acfosw technology filter.

uri fcc-broadband://geography/{type}/{id}/summary mime application/json

Complete list of all Form 477 holding company numbers (hoconum) from the provider summary table. Use as a directory of valid hoconum identifiers before calling fcc_get_provider. Names are not included — use fcc_search_providers to resolve a company name to its hoconum. Data is as of June 2021.

uri fcc-broadband://providers/list mime application/json

Prompts

1

Structures a digital divide analysis comparing broadband access across demographic groups. Guides chaining FCC broadband data with Census demographics and BLS labor statistics.

  • regionrequired — Geographic scope of the analysis — e.g., "Mississippi", "rural Appalachia", "King County WA", or "nationwide".
  • focusrequired — "underserved" = areas with no broadband. "rural" = rural-specific gap analysis. "tribal" = Native American connectivity. "all" = comprehensive analysis across all segments.