Koskamo

fcc-broadband-mcp-server

An MCP server that provides access to FCC broadband availability, coverage analysis, and digital divide data for US geographies and census blocks. It allows agents to geocode coordinates to census blocks, search for ISP availability and advertised speeds, find geographies, and summarize coverage data for equity research.

Endpoint and access

No sign-in to connect and list tools. Individual tools may still need a vendor account, credentials, or permissions; check the documented prerequisites.

fcc-broadband-mcp-server logo, by cyanheadsCommunity listingStreamable HTTPNo sign-inEndpoint checked 2026-11-07Published by cyanheads
MCP endpoint (Streamable HTTP)
https://fcc-broadband.caseyjhand.com/mcp
Vendor documentation

What its tools do

9 tools, grouped by the hints the server advertises. Hints are self-declared, not verified behavior.

9 of 9 have a description · 9 of 9 declare behavior hints · 9 of 9 with parameters document them all

Checks and signals

Each line is separate evidence, not a trust score.

  • Passed Endpoint answered the live check ·
  • Availability 1 of 1 checks passed in 30 days

What you can do with it

  • Geocode latitude/longitude to a 15-digit census block FIPS code
  • Search broadband providers and advertised speeds at a specific census block
  • Find states, counties, or congressional districts by name substring
  • Summarize population coverage by provider count for a geography

Source and maintenance

Community listingRegistry 0.4.0
Maintenance checked

Protocol and capabilities

Server
fcc-broadband-mcp-server 0.4.0
MCP protocol negotiated in check
2025-11-25
Tools
9 advertised
Resources
2 advertised
Resource templates
3 advertised
Prompts
1 advertised
Server-advertised capabilities
{
  "tools": {
    "listChanged": true
  },
  "logging": {},
  "prompts": {
    "listChanged": true
  },
  "resources": {
    "subscribe": true,
    "listChanged": true
  },
  "extensions": {
    "io.modelcontextprotocol/skills": {
      "directoryRead": true
    }
  }
}

Server-provided instructions

Untrusted server output shown for inspection. It is not Koskamo guidance and is excluded from knowledge search.

FCC fixed broadband analysis uses keyless June 2021 Form 477 data. Resolve named geographies with fcc_search_geographies before coverage analysis; for location evidence, chain fcc_geocode_block to fcc_search_availability using its 2010-vintage blockFips, then use hoconum with fcc_get_provider for a national holding-company profile. Historical block coverage cannot establish current address service or funding eligibility. Area tools default to terrestrial coverage; their 100 Mbps tier is 100/10, not 100/20. BDC bulk-file manifests are unavailable in this deployment.

Tools

9 advertised

fcc_geocode_block — Geocode Census Block
Advertised by the server during the last successful anonymous check.
Advertised read-only

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. The block is resolved against 2010 census boundaries, the vintage the Form 477 deployment dataset is keyed by, so the returned blockFips can be passed straight to fcc_search_availability; a 2020-vintage block ID from another source will not match. Uses the FCC public Geo API — no authentication required.

fcc_geocode_block input schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "latitude",
    "longitude"
  ],
  "properties": {
    "latitude": {
      "type": "number",
      "maximum": 90,
      "minimum": -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",
      "maximum": 180,
      "minimum": -180,
      "description": "Longitude of the location in decimal degrees (e.g., -122.3321 for Seattle, WA). Negative for western hemisphere."
    }
  },
  "additionalProperties": false
}
fcc_geocode_block output schema
{
  "type": "object",
  "anyOf": [
    {
      "not": {
        "required": [
          "error"
        ]
      },
      "required": [
        "blockFips",
        "censusVintage",
        "countyFips",
        "countyName",
        "stateFips",
        "stateCode",
        "stateName"
      ]
    },
    {
      "required": [
        "error"
      ]
    }
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "properties": {
    "error": {
      "type": "object",
      "required": [
        "code",
        "message"
      ],
      "properties": {
        "code": {
          "type": "integer",
          "maximum": 9007199254740991,
          "minimum": -9007199254740991,
          "description": "JSON-RPC error code for this failure."
        },
        "data": {
          "type": "object",
          "properties": {
            "reason": {
              "type": "string",
              "examples": [
                "geo_backend_unavailable",
                "block_not_found"
              ],
              "description": "Machine-readable failure mode. Declared by this tool: `geo_backend_unavailable`: The FCC Geo API reports a structured backend fault with HTTP 400. `block_not_found`: No census block found at the given coordinates — may be over water or outside US coverage. Other values are possible when a failure originates below the handler."
            },
            "recovery": {
              "type": "object",
              "required": [
                "hint"
              ],
              "properties": {
                "hint": {
                  "type": "string"
                }
              },
              "description": "Actionable next step for the caller.",
              "additionalProperties": {}
            },
            "retryable": {
              "type": "boolean",
              "description": "Whether retrying may succeed."
            }
          },
          "additionalProperties": {}
        },
        "message": {
          "type": "string",
          "description": "Human-readable description of what went wrong."
        }
      },
      "description": "Present when the call failed. Absent on success.",
      "additionalProperties": {}
    },
    "blockFips": {
      "type": "string",
      "description": "15-digit census block FIPS code on 2010 census boundaries (e.g., \"530330081002024\"). Pass this to fcc_search_availability to look up broadband providers."
    },
    "stateCode": {
      "type": "string",
      "description": "2-letter state abbreviation (e.g., \"WA\")."
    },
    "stateFips": {
      "type": "string",
      "description": "2-digit state FIPS code (e.g., \"53\" for Washington)."
    },
    "stateName": {
      "type": "string",
      "description": "Full state name (e.g., \"Washington\")."
    },
    "countyFips": {
      "type": "string",
      "description": "5-digit county FIPS code (e.g., \"53033\" for King County, WA)."
    },
    "countyName": {
      "type": "string",
      "description": "Human-readable county name (e.g., \"King\")."
    },
    "censusVintage": {
      "type": "string",
      "description": "Decennial census whose block boundaries blockFips belongs to. Always \"2010\" — the vintage the Form 477 deployment dataset behind fcc_search_availability is keyed by."
    }
  },
  "additionalProperties": false
}
fcc_geocode_block annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true
}
fcc_search_availability — Search Broadband Availability
Advertised by the server during the last successful anonymous check.
Advertised read-only

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.

fcc_search_availability input schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "block_fips"
  ],
  "properties": {
    "consumer": {
      "type": "boolean",
      "description": "Filter to consumer service (true) or business service (false). Omit to return both consumer and business offerings."
    },
    "block_fips": {
      "type": "string",
      "pattern": "^\\d{15}$",
      "description": "15-digit census block FIPS code on 2010 census boundaries, the vintage this Form 477 dataset is keyed by (e.g., \"530330081002024\"). Obtain from fcc_geocode_block using address coordinates — a 2020-vintage block ID matches no deployment row."
    },
    "tech_filter": {
      "type": "array",
      "items": {
        "enum": [
          "0",
          "10",
          "11",
          "12",
          "20",
          "30",
          "40",
          "41",
          "42",
          "43",
          "50",
          "60",
          "70",
          "90"
        ],
        "type": "string"
      },
      "description": "Technology codes to filter, from the complete Form 477 taxonomy: 0=All other, 10=Asymmetric xDSL, 11=ADSL2, 12=VDSL, 20=Symmetric xDSL, 30=Other copper wireline, 40=Cable modem, 41=Cable modem DOCSIS 1/1.1/2.0, 42=Cable modem DOCSIS 3.0, 43=Cable modem DOCSIS 3.1, 50=Fiber to the end user, 60=Satellite, 70=Terrestrial fixed wireless, 90=Electric power line. Omit to return all technologies."
    },
    "min_speed_down": {
      "type": "number",
      "minimum": 0,
      "description": "Minimum advertised download speed in Mbps to include in results. Omit to return all providers regardless of speed."
    }
  },
  "additionalProperties": false
}
fcc_search_availability output schema
{
  "type": "object",
  "anyOf": [
    {
      "not": {
        "required": [
          "error"
        ]
      },
      "required": [
        "blockFips",
        "providers",
        "totalProviders",
        "dataVintage",
        "appliedFilters"
      ]
    },
    {
      "required": [
        "error"
      ]
    }
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "properties": {
    "error": {
      "type": "object",
      "required": [
        "code",
        "message"
      ],
      "properties": {
        "code": {
          "type": "integer",
          "maximum": 9007199254740991,
          "minimum": -9007199254740991,
          "description": "JSON-RPC error code for this failure."
        },
        "data": {
          "type": "object",
          "properties": {
            "reason": {
              "type": "string",
              "examples": [
                "block_not_found"
              ],
              "description": "Machine-readable failure mode. Declared by this tool: `block_not_found`: No providers in the FCC dataset for this census block. Other values are possible when a failure originates below the handler."
            },
            "recovery": {
              "type": "object",
              "required": [
                "hint"
              ],
              "properties": {
                "hint": {
                  "type": "string"
                }
              },
              "description": "Actionable next step for the caller.",
              "additionalProperties": {}
            },
            "retryable": {
              "type": "boolean",
              "description": "Whether retrying may succeed."
            }
          },
          "additionalProperties": {}
        },
        "message": {
          "type": "string",
          "description": "Human-readable description of what went wrong."
        }
      },
      "description": "Present when the call failed. Absent on success.",
      "additionalProperties": {}
    },
    "notice": {
      "type": "string",
      "description": "Recovery hint when no providers are found — suggests how to broaden the query. Absent on successful results."
    },
    "blockFips": {
      "type": "string",
      "description": "The queried census block FIPS code."
    },
    "providers": {
      "type": "array",
      "items": {
        "type": "object",
        "required": [
          "providerId",
          "providerName",
          "holdingCompanyName",
          "hoconum",
          "stateAbbr",
          "techCode",
          "techLabel",
          "maxDownloadMbps",
          "maxUploadMbps",
          "consumer",
          "business"
        ],
        "properties": {
          "hoconum": {
            "type": "string",
            "description": "Holding company number — use with fcc_get_provider for a national profile."
          },
          "business": {
            "type": "boolean",
            "description": "Whether this offering serves businesses."
          },
          "consumer": {
            "type": "boolean",
            "description": "Whether this offering serves consumers."
          },
          "techCode": {
            "type": "string",
            "description": "FCC Form 477 technology code (e.g., \"50\" = fiber, \"43\" = cable DOCSIS 3.1, \"60\" = satellite)."
          },
          "stateAbbr": {
            "type": "string",
            "description": "State where coverage is reported."
          },
          "techLabel": {
            "type": "string",
            "description": "Human-readable technology description."
          },
          "providerId": {
            "type": "string",
            "description": "FCC provider registration number (FRN)."
          },
          "providerName": {
            "type": "string",
            "description": "Registered provider name."
          },
          "maxUploadMbps": {
            "type": "number",
            "description": "Maximum advertised upload speed in Mbps."
          },
          "maxDownloadMbps": {
            "type": "number",
            "description": "Maximum advertised download speed in Mbps."
          },
          "holdingCompanyName": {
            "type": "string",
            "description": "Parent holding company name (e.g., \"Comcast\")."
          }
        },
        "description": "One ISP offering at this census block.",
        "additionalProperties": false
      },
      "description": "ISP offerings reported for this census block."
    },
    "dataVintage": {
      "type": "string",
      "description": "Data vintage — all Form 477 data on FCC Open Data is as of June 2021. BDC bulk-file manifests for newer data require a deployment with BDC credentials."
    },
    "appliedFilters": {
      "type": "object",
      "properties": {
        "techFilter": {
          "type": "array",
          "items": {
            "type": "string"
          },
          "description": "Technology codes applied as a filter. Absent when no tech filter was used."
        },
        "minSpeedDown": {
          "type": "number",
          "description": "Minimum advertised download speed filter in Mbps. Absent when no speed filter was used."
        },
        "consumerFilter": {
          "type": "boolean",
          "description": "Consumer/business filter applied. true = consumer only, false = business only. Absent when both were returned."
        }
      },
      "description": "Filters applied to this query.",
      "additionalProperties": false
    },
    "totalProviders": {
      "type": "number",
      "description": "Total number of distinct holding companies offering service at this block."
    }
  },
  "additionalProperties": false
}
fcc_search_availability annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true
}
fcc_search_geographies — Search Geographies
Advertised by the server during the last successful anonymous check.
Advertised read-only

Find states, counties, congressional districts (cd), census places, CBSAs (metro areas), and tribal areas by case-insensitive literal name substring in the 2021 FCC geography lookup. Keep ambiguous matches distinct and choose the geography_type and geography_id to pass to fcc_get_coverage_summary. Include a location qualifier in name to narrow results; names do not establish exhaustive state membership. Always queries live FCC Open Data, even with the Form 477 mirror enabled, and needs no BDC credentials. Follow nextOffset until absent; no total match count is computed.

fcc_search_geographies input schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "name"
  ],
  "properties": {
    "name": {
      "type": "string",
      "minLength": 1,
      "description": "Nonblank literal name fragment, such as \"Casper, WY\". Apostrophes, percent signs and underscores are literal characters."
    },
    "limit": {
      "type": "integer",
      "default": 20,
      "maximum": 100,
      "minimum": 1,
      "description": "Maximum matches per page (1–100), default 20."
    },
    "offset": {
      "type": "integer",
      "default": 0,
      "maximum": 9007199254740991,
      "minimum": 0,
      "description": "Zero-based match offset; start at 0, then use nextOffset."
    },
    "geography_type": {
      "anyOf": [
        {
          "type": "string",
          "const": ""
        },
        {
          "enum": [
            "state",
            "county",
            "cd",
            "place",
            "cbsa",
            "tribal"
          ],
          "type": "string",
          "description": "Geography type to discover."
        }
      ],
      "description": "Limit to state, county, cd, place, cbsa, or tribal; omit or leave blank to search all six."
    }
  },
  "additionalProperties": false
}
fcc_search_geographies output schema
{
  "type": "object",
  "anyOf": [
    {
      "not": {
        "required": [
          "error"
        ]
      },
      "required": [
        "geographies",
        "count",
        "offset",
        "dataVintage"
      ]
    },
    {
      "required": [
        "error"
      ]
    }
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "properties": {
    "cap": {
      "type": "number",
      "description": "Page limit applied."
    },
    "count": {
      "type": "number",
      "description": "Number of matches on this page, not a total."
    },
    "error": {
      "type": "object",
      "required": [
        "code",
        "message"
      ],
      "properties": {
        "code": {
          "type": "integer",
          "maximum": 9007199254740991,
          "minimum": -9007199254740991,
          "description": "JSON-RPC error code for this failure."
        },
        "data": {
          "type": "object",
          "properties": {
            "reason": {
              "type": "string",
              "description": "Machine-readable failure mode."
            },
            "recovery": {
              "type": "object",
              "required": [
                "hint"
              ],
              "properties": {
                "hint": {
                  "type": "string"
                }
              },
              "description": "Actionable next step for the caller.",
              "additionalProperties": {}
            },
            "retryable": {
              "type": "boolean",
              "description": "Whether retrying may succeed."
            }
          },
          "additionalProperties": {}
        },
        "message": {
          "type": "string",
          "description": "Human-readable description of what went wrong."
        }
      },
      "description": "Present when the call failed. Absent on success.",
      "additionalProperties": {}
    },
    "shown": {
      "type": "number",
      "description": "Matches shown on this page."
    },
    "notice": {
      "type": "string",
      "description": "Empty-page guidance or notice that more matches remain."
    },
    "offset": {
      "type": "number",
      "description": "Zero-based match offset applied."
    },
    "truncated": {
      "type": "boolean",
      "description": "More matches remain after this page."
    },
    "nextOffset": {
      "type": "number",
      "description": "Offset for the next page; absent on a final or empty page."
    },
    "dataVintage": {
      "type": "string",
      "description": "Geography lookup year."
    },
    "geographies": {
      "type": "array",
      "items": {
        "type": "object",
        "required": [
          "geography_type",
          "geography_id",
          "name"
        ],
        "properties": {
          "name": {
            "type": "string",
            "description": "Name as recorded in the FCC lookup."
          },
          "geography_id": {
            "type": "string",
            "description": "GEOID to pass to fcc_get_coverage_summary."
          },
          "geography_type": {
            "enum": [
              "state",
              "county",
              "cd",
              "place",
              "cbsa",
              "tribal"
            ],
            "type": "string",
            "description": "Type to pass to fcc_get_coverage_summary."
          }
        },
        "description": "One distinct named geography.",
        "additionalProperties": false
      },
      "description": "Distinct named matches ordered by name, type, and GEOID."
    }
  },
  "additionalProperties": false
}
fcc_search_geographies annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true
}
fcc_get_coverage_summary — Get Broadband Coverage Summary
Advertised by the server during the last successful anonymous check.
Advertised read-only

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), for historical population screening; it cannot establish current BEAD eligibility or address service.

fcc_get_coverage_summary input schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "geography_type"
  ],
  "properties": {
    "speed_down": {
      "enum": [
        "4",
        "10",
        "25",
        "100",
        "250",
        "1000",
        "0.2"
      ],
      "type": "string",
      "default": "25",
      "description": "Download key for a download/upload threshold pair in Mbps: 0.2=0.2/0.2, 4=4/1, 10=10/1, 25=25/3, 100=100/10, 250=250/25, 1000=1000/100. These historical population aggregates cannot establish current BEAD eligibility or address service; 100/10 does not establish 100/20 availability."
    },
    "tech_filter": {
      "enum": [
        "a",
        "ac",
        "acf",
        "acfo",
        "acfos",
        "acfosw",
        "acfow",
        "acfs",
        "acfsw",
        "acfw",
        "aco",
        "acos",
        "acosw",
        "acow",
        "acs",
        "acsw",
        "acw",
        "af",
        "afo",
        "afos",
        "afosw",
        "afow",
        "afs",
        "afsw",
        "afw",
        "ao",
        "aos",
        "aosw",
        "aow",
        "as",
        "asw",
        "aw",
        "c",
        "cf",
        "cfo",
        "cfos",
        "cfosw",
        "cfow",
        "cfs",
        "cfsw",
        "cfw",
        "co",
        "cos",
        "cosw",
        "cow",
        "cs",
        "csw",
        "cw",
        "f",
        "fo",
        "fos",
        "fosw",
        "fow",
        "fs",
        "fsw",
        "fw",
        "o",
        "os",
        "osw",
        "ow",
        "s",
        "sw",
        "w"
      ],
      "type": "string",
      "default": "acfow",
      "description": "Any nonempty alphabetical combination of a=ADSL/DSL, c=cable, f=fiber, o=other (symmetric DSL, other copper, power line), s=satellite, w=fixed wireless. Default acfow excludes satellite; explicit acfosw includes every technology. acfow includes all fixed wireless and is not an exact program-technology eligibility filter."
    },
    "geography_id": {
      "type": "string",
      "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. Place: 7-digit state+place (e.g., \"0644000\"). Omit for nation-level queries."
    },
    "tribal_filter": {
      "enum": [
        "all",
        "T",
        "N"
      ],
      "type": "string",
      "default": "all",
      "description": "Filter to tribal (\"T\") or non-tribal (\"N\") areas. Use \"T\" to assess Native American connectivity gaps."
    },
    "geography_type": {
      "enum": [
        "nation",
        "state",
        "county",
        "cd",
        "place",
        "cbsa",
        "tribal"
      ],
      "type": "string",
      "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."
    },
    "urban_rural_filter": {
      "enum": [
        "all",
        "R",
        "U"
      ],
      "type": "string",
      "default": "all",
      "description": "Filter to urban (\"U\") or rural (\"R\") areas only, or \"all\" for both combined. An empty segment in a confirmed geography returns zero population with a notice."
    }
  },
  "additionalProperties": false
}
fcc_get_coverage_summary output schema
{
  "type": "object",
  "anyOf": [
    {
      "not": {
        "required": [
          "error"
        ]
      },
      "required": [
        "geography",
        "techFilter",
        "speedDownMbps",
        "population",
        "coveragePct",
        "unservedPct",
        "competitivePct",
        "breakdown",
        "dataVintage",
        "appliedFilters"
      ]
    },
    {
      "required": [
        "error"
      ]
    }
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "properties": {
    "error": {
      "type": "object",
      "required": [
        "code",
        "message"
      ],
      "properties": {
        "code": {
          "type": "integer",
          "maximum": 9007199254740991,
          "minimum": -9007199254740991,
          "description": "JSON-RPC error code for this failure."
        },
        "data": {
          "type": "object",
          "properties": {
            "reason": {
              "type": "string",
              "examples": [
                "coverage_timeout",
                "geography_not_found",
                "invalid_geography_combo",
                "invalid_geography_id_shape"
              ],
              "description": "Machine-readable failure mode. Declared by this tool: `coverage_timeout`: Required coverage reads exceed the shared 48 second deadline. `geography_not_found`: No Area Table rows exist for the geography at the requested technology and speed, including the unfiltered confirmation of an empty demographic selection. `invalid_geography_combo`: geography_id is omitted for a non-nation type, or geography_type is \"nation\" but geography_id is provided. `invalid_geography_id_shape`: geography_id digit count does not match the geography_type (state=2, county=5, cd=4, cbsa=5, place=7). Other values are possible when a failure originates below the handler."
            },
            "recovery": {
              "type": "object",
              "required": [
                "hint"
              ],
              "properties": {
                "hint": {
                  "type": "string"
                }
              },
              "description": "Actionable next step for the caller.",
              "additionalProperties": {}
            },
            "retryable": {
              "type": "boolean",
              "description": "Whether retrying may succeed."
            }
          },
          "additionalProperties": {}
        },
        "message": {
          "type": "string",
          "description": "Human-readable description of what went wrong."
        }
      },
      "description": "Present when the call failed. Absent on success.",
      "additionalProperties": {}
    },
    "notice": {
      "type": "string",
      "description": "Explains an empty requested population segment after confirming geography rows exist."
    },
    "breakdown": {
      "type": "array",
      "items": {
        "type": "object",
        "required": [
          "urbanRural",
          "tribal",
          "population",
          "coveragePct",
          "unservedPct"
        ],
        "properties": {
          "tribal": {
            "enum": [
              "T",
              "N"
            ],
            "type": "string",
            "description": "\"T\" = tribal land, \"N\" = non-tribal."
          },
          "population": {
            "type": "object",
            "required": [
              "noCoverage",
              "oneProvider",
              "twoProviders",
              "threeOrMore",
              "total"
            ],
            "properties": {
              "total": {
                "type": "number",
                "description": "Total population in this segment."
              },
              "noCoverage": {
                "type": "number",
                "description": "Population with no coverage in this segment."
              },
              "oneProvider": {
                "type": "number",
                "description": "Population with one provider in this segment."
              },
              "threeOrMore": {
                "type": "number",
                "description": "Population with three or more providers in this segment."
              },
              "twoProviders": {
                "type": "number",
                "description": "Population with two providers in this segment."
              }
            },
            "description": "Population breakdown for this urban/rural × tribal segment.",
            "additionalProperties": false
          },
          "urbanRural": {
            "enum": [
              "R",
              "U"
            ],
            "type": "string",
            "description": "\"R\" = rural, \"U\" = urban."
          },
          "coveragePct": {
            "type": "number",
            "description": "Coverage percentage for this segment."
          },
          "unservedPct": {
            "type": "number",
            "description": "Unserved percentage for this segment."
          }
        },
        "description": "One urban/rural × tribal/non-tribal segment.",
        "additionalProperties": false
      },
      "description": "Per-segment breakdown by urban/rural and tribal/non-tribal."
    },
    "geography": {
      "type": "object",
      "required": [
        "type",
        "id"
      ],
      "properties": {
        "id": {
          "type": "string",
          "description": "FIPS GEOID (e.g., \"06\"), or \"0\" for United States national coverage."
        },
        "name": {
          "type": "string",
          "description": "Human-readable name if available."
        },
        "type": {
          "type": "string",
          "description": "Geography type (e.g., \"state\")."
        }
      },
      "description": "The queried geography.",
      "additionalProperties": false
    },
    "population": {
      "type": "object",
      "required": [
        "noCoverage",
        "oneProvider",
        "twoProviders",
        "threeOrMore",
        "total"
      ],
      "properties": {
        "total": {
          "type": "number",
          "description": "Total population in the geography."
        },
        "noCoverage": {
          "type": "number",
          "description": "Population where zero providers offer service at the given speed."
        },
        "oneProvider": {
          "type": "number",
          "description": "Population with exactly one provider — no competitive choice."
        },
        "threeOrMore": {
          "type": "number",
          "description": "Population with three or more providers."
        },
        "twoProviders": {
          "type": "number",
          "description": "Population with exactly two providers."
        }
      },
      "description": "Population counts by provider availability tier.",
      "additionalProperties": false
    },
    "techFilter": {
      "type": "string",
      "description": "Technology filter applied."
    },
    "coveragePct": {
      "type": "number",
      "description": "Percentage of population with at least one provider at the given speed."
    },
    "dataVintage": {
      "type": "string",
      "description": "Data vintage — Form 477 data as of June 2021."
    },
    "unservedPct": {
      "type": "number",
      "description": "Percentage with zero providers in the selected historical technology and speed view."
    },
    "speedDownMbps": {
      "type": "number",
      "description": "Download speed threshold used in Mbps."
    },
    "appliedFilters": {
      "type": "object",
      "required": [
        "geographyType",
        "techFilter",
        "speedDownMbps",
        "urbanRuralFilter",
        "tribalFilter"
      ],
      "properties": {
        "techFilter": {
          "type": "string",
          "description": "Technology filter applied."
        },
        "geographyId": {
          "type": "string",
          "description": "FIPS GEOID queried. Absent for nation-level."
        },
        "tribalFilter": {
          "type": "string",
          "description": "Tribal/non-tribal filter applied."
        },
        "geographyType": {
          "type": "string",
          "description": "Geographic aggregation level queried."
        },
        "speedDownMbps": {
          "type": "number",
          "description": "Download speed threshold in Mbps."
        },
        "urbanRuralFilter": {
          "type": "string",
          "description": "Urban/rural filter applied."
        }
      },
      "description": "Filters applied to this query.",
      "additionalProperties": false
    },
    "competitivePct": {
      "type": "number",
      "description": "Percentage with two or more providers."
    }
  },
  "additionalProperties": false
}
fcc_get_coverage_summary annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true
}
fcc_search_providers — Search Broadband Providers
Advertised by the server during the last successful anonymous check.
Advertised read-only

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. Against the live FCC API the search reads a bounded window of deployment rows to find which holding companies match, so when scanTruncated comes back true the providers are a sample of the matches rather than every one of them and no true match count is available; a narrower filter raises the share of matches the sample surfaces but cannot make it complete, and only a deployment running the local Form 477 mirror returns every match. The sample is of which companies come back — every company that does carries its complete national footprint, since statesServed and techCodes are resolved per company rather than read off the window, at the cost of one lookup per provider returned. Data is from FCC Form 477 (as of June 2021).

fcc_search_providers input schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "properties": {
    "limit": {
      "type": "integer",
      "default": 50,
      "maximum": 200,
      "minimum": 1,
      "description": "Maximum number of distinct providers to return."
    },
    "state": {
      "type": "string",
      "pattern": "^[A-Z]{2}$",
      "description": "2-letter state abbreviation (e.g., \"WA\") to limit results to providers serving that state. Matches individual deployment filings, so every filter given must hold on one filing together — a provider is returned for state=\"WA\" with tech_filter=[\"50\"] only if it filed fiber in Washington, not if it filed fiber elsewhere and something else in Washington."
    },
    "offset": {
      "type": "integer",
      "default": 0,
      "maximum": 9007199254740991,
      "minimum": 0,
      "description": "Number of sorted distinct providers to skip. Live continuation covers the sampled set only; samples may differ between calls."
    },
    "name_search": {
      "type": "string",
      "description": "Partial holding company name to search (case-insensitive). e.g., \"Comcast\", \"T-Mobile\", \"Frontier\". Omit to list all providers in a state."
    },
    "tech_filter": {
      "type": "array",
      "items": {
        "enum": [
          "0",
          "10",
          "11",
          "12",
          "20",
          "30",
          "40",
          "41",
          "42",
          "43",
          "50",
          "60",
          "70",
          "90"
        ],
        "type": "string"
      },
      "description": "Technology codes to filter, from the complete Form 477 taxonomy: 0=All other, 10=Asymmetric xDSL, 11=ADSL2, 12=VDSL, 20=Symmetric xDSL, 30=Other copper wireline, 40=Cable modem, 41=Cable modem DOCSIS 1/1.1/2.0, 42=Cable modem DOCSIS 3.0, 43=Cable modem DOCSIS 3.1, 50=Fiber to the end user, 60=Satellite, 70=Terrestrial fixed wireless, 90=Electric power line. Omit for all technologies. Matches individual deployment filings like state does, so pairing this with name_search narrows to filings made under the matched name — a holding company that files some technologies under an acquired brand name can come back empty here while its techCodes list the technology. To ask what one company deploys, search the name alone and read techCodes off the result."
    }
  },
  "additionalProperties": false
}
fcc_search_providers output schema
{
  "type": "object",
  "anyOf": [
    {
      "not": {
        "required": [
          "error"
        ]
      },
      "required": [
        "offset",
        "providers",
        "totalFound",
        "dataVintage",
        "appliedFilters"
      ]
    },
    {
      "required": [
        "error"
      ]
    }
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "properties": {
    "cap": {
      "type": "number",
      "description": "The limit that was applied. Present when capped."
    },
    "error": {
      "type": "object",
      "required": [
        "code",
        "message"
      ],
      "properties": {
        "code": {
          "type": "integer",
          "maximum": 9007199254740991,
          "minimum": -9007199254740991,
          "description": "JSON-RPC error code for this failure."
        },
        "data": {
          "type": "object",
          "properties": {
            "reason": {
              "type": "string",
              "examples": [
                "unknown_state",
                "live_search_timeout"
              ],
              "description": "Machine-readable failure mode. Declared by this tool: `unknown_state`: The state input is not a USPS state or territory abbreviation. `live_search_timeout`: A live FCC Open Data provider search exceeded its 30-second budget, on either the bounded windowed read or one of the per-provider footprint lookups; both are shapes that answer in seconds or not at all, so a retry reaches the same result. Other values are possible when a failure originates below the handler."
            },
            "recovery": {
              "type": "object",
              "required": [
                "hint"
              ],
              "properties": {
                "hint": {
                  "type": "string"
                }
              },
              "description": "Actionable next step for the caller.",
              "additionalProperties": {}
            },
            "retryable": {
              "type": "boolean",
              "description": "Whether retrying may succeed."
            }
          },
          "additionalProperties": {}
        },
        "message": {
          "type": "string",
          "description": "Human-readable description of what went wrong."
        }
      },
      "description": "Present when the call failed. Absent on success.",
      "additionalProperties": {}
    },
    "shown": {
      "type": "number",
      "description": "Number of providers returned. Present when capped."
    },
    "notice": {
      "type": "string",
      "description": "Guidance about the result set — that the list was capped at the limit, that the upstream scan returned a sample rather than every match, and how to broaden the search when nothing matched. Absent when none applies."
    },
    "offset": {
      "type": "number",
      "description": "Number of sorted providers skipped."
    },
    "providers": {
      "type": "array",
      "items": {
        "type": "object",
        "required": [
          "hoconum",
          "holdingCompanyName",
          "statesServed",
          "techCodes"
        ],
        "properties": {
          "hoconum": {
            "type": "string",
            "description": "Holding company number — use with fcc_get_provider for a national profile."
          },
          "techCodes": {
            "type": "array",
            "items": {
              "type": "string",
              "description": "FCC technology code (e.g., \"50\" = fiber)."
            },
            "description": "Every technology code this holding company deployed nationally — its complete set, resolved per company. Not narrowed by tech_filter, and complete even when the provider list is a sample. Drawn from block-level deployment filings, so it can exceed the technologies fcc_get_provider reports, which counts only those with reported covered population."
          },
          "statesServed": {
            "type": "array",
            "items": {
              "type": "string",
              "description": "State abbreviation (e.g., \"WA\")."
            },
            "description": "Every state, district, and territory this holding company filed deployments in nationally — its complete footprint, resolved per company. Not narrowed by the state filter, and complete even when the provider list is a sample."
          },
          "holdingCompanyName": {
            "type": "string",
            "description": "Holding company name as filed on the deployment rows this search matched. One holding company number can carry more than one name in Form 477 — an acquired brand still filing under the parent number — and this is the name the matched rows carry, not necessarily every name filed under the number."
          }
        },
        "description": "A deduplicated ISP holding company entry.",
        "additionalProperties": false
      },
      "description": "Matching providers, deduplicated by holding company."
    },
    "truncated": {
      "type": "boolean",
      "description": "True when results were capped at the limit and more providers may exist. Absent when not capped."
    },
    "nextOffset": {
      "type": "number",
      "description": "Next offset when another page remains in the computed match set."
    },
    "scanRowCap": {
      "type": "number",
      "description": "Raw upstream row ceiling that bound the scan. Present only when scanTruncated is true."
    },
    "totalCount": {
      "type": "number",
      "description": "Distinct providers matching the query, before the limit. Present only when the scan read every matching row — absent when scanTruncated is true, because the true match count is then unknown."
    },
    "totalFound": {
      "type": "number",
      "description": "Providers in this response. Not the number matching the query — that is totalCount, and it is only knowable when the scan read every matching row."
    },
    "dataVintage": {
      "type": "string",
      "description": "Data vintage — Form 477 data as of June 2021."
    },
    "scanTruncated": {
      "type": "boolean",
      "description": "True when the upstream row scan stopped at its ceiling before reaching the end of the matching data, so the providers returned are a sample of the matches rather than the complete set. Bounds which companies came back, not what each one reports — statesServed and techCodes are resolved per company and stay complete. Absent when the scan read every matching row."
    },
    "appliedFilters": {
      "type": "object",
      "properties": {
        "state": {
          "type": "string",
          "description": "State filter applied. Absent for nationwide searches."
        },
        "nameSearch": {
          "type": "string",
          "description": "Name fragment searched. Absent when no name search was used."
        },
        "techFilter": {
          "type": "array",
          "items": {
            "type": "string"
          },
          "description": "Technology code filter applied. Absent when no tech filter was used."
        }
      },
      "description": "Filters applied to this query.",
      "additionalProperties": false
    }
  },
  "additionalProperties": false
}
fcc_search_providers annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true
}
fcc_get_provider — Get Provider Profile
Advertised by the server during the last successful anonymous check.
Advertised read-only

Returns a national-level coverage profile for a specific holding company (by hoconum): technologies deployed and the population covered at each download speed tier. Population figures come from the FCC provider summary table and count each person once, regardless of how many technologies the provider uses to reach them. Use fcc_search_providers to find valid hoconum values. Data is from FCC Form 477 (as of June 2021).

fcc_get_provider input schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "hoconum"
  ],
  "properties": {
    "hoconum": {
      "type": "string",
      "pattern": "^\\d+$",
      "description": "Holding company number from fcc_search_providers — digits only, e.g. \"130317\" for Comcast Corporation."
    }
  },
  "additionalProperties": false
}
fcc_get_provider output schema
{
  "type": "object",
  "anyOf": [
    {
      "not": {
        "required": [
          "error"
        ]
      },
      "required": [
        "hoconum",
        "holdingCompanyName",
        "techCodes",
        "techLabels",
        "speedTierPopulation",
        "dataVintage"
      ]
    },
    {
      "required": [
        "error"
      ]
    }
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "properties": {
    "error": {
      "type": "object",
      "required": [
        "code",
        "message"
      ],
      "properties": {
        "code": {
          "type": "integer",
          "maximum": 9007199254740991,
          "minimum": -9007199254740991,
          "description": "JSON-RPC error code for this failure."
        },
        "data": {
          "type": "object",
          "properties": {
            "reason": {
              "type": "string",
              "examples": [
                "provider_not_found",
                "live_provider_timeout"
              ],
              "description": "Machine-readable failure mode. Declared by this tool: `provider_not_found`: No provider found with the given hoconum. `live_provider_timeout`: A live FCC Open Data lookup exceeded its 30-second budget; the queries are point lookups, so a retry reaches the same result. Other values are possible when a failure originates below the handler."
            },
            "recovery": {
              "type": "object",
              "required": [
                "hint"
              ],
              "properties": {
                "hint": {
                  "type": "string"
                }
              },
              "description": "Actionable next step for the caller.",
              "additionalProperties": {}
            },
            "retryable": {
              "type": "boolean",
              "description": "Whether retrying may succeed."
            }
          },
          "additionalProperties": {}
        },
        "message": {
          "type": "string",
          "description": "Human-readable description of what went wrong."
        }
      },
      "description": "Present when the call failed. Absent on success.",
      "additionalProperties": {}
    },
    "hoconum": {
      "type": "string",
      "description": "Holding company number."
    },
    "techCodes": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "Technology codes this provider reports nationally. Empty when the provider reports no population coverage (e.g. business-only carriers)."
    },
    "techLabels": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "Human-readable technology descriptions."
    },
    "dataVintage": {
      "type": "string",
      "description": "Data vintage — Form 477 data as of June 2021."
    },
    "holdingCompanyName": {
      "type": "string",
      "description": "Holding company name."
    },
    "speedTierPopulation": {
      "type": "array",
      "items": {
        "type": "object",
        "required": [
          "tier",
          "population"
        ],
        "properties": {
          "tier": {
            "type": "string",
            "description": "Download speed threshold (e.g., \"25 Mbps\")."
          },
          "population": {
            "type": "number",
            "description": "People covered at or above this download speed, counted once each."
          }
        },
        "description": "A speed tier with its covered population.",
        "additionalProperties": false
      },
      "description": "National covered population by download speed tier, from the FCC all-technology rollup. Tiers with no coverage are omitted; empty when the provider reports no population coverage."
    }
  },
  "additionalProperties": false
}
fcc_get_provider annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true
}
fcc_compare_areas — Compare Broadband Coverage Across Areas
Advertised by the server during the last successful anonymous check.
Advertised read-only

Compares broadband coverage metrics across multiple geographies of the same type and returns a ranked table sorted by unserved or underserved population. Compares historical population coverage gaps; it cannot establish current BEAD eligibility or address service. Compares the first 300 distinct geography IDs and discloses duplicates, unmatched IDs and excluded IDs, or set compare_all_states=true for all 50 states + DC. Data is from FCC Form 477 (as of June 2021).

fcc_compare_areas input schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "geography_type"
  ],
  "properties": {
    "sort_by": {
      "enum": [
        "unserved_pct",
        "unserved_pop",
        "coverage_pct",
        "competitive_pct"
      ],
      "type": "string",
      "default": "unserved_pct",
      "description": "\"unserved_pct\" = share of population with no broadband (default). \"unserved_pop\" = raw headcount. \"coverage_pct\" = share with any coverage. \"competitive_pct\" = share with 2+ providers. Every option ranks worst-first, so rank 1 is the highest unserved share or headcount, or the lowest coverage or competitive share."
    },
    "speed_down": {
      "enum": [
        "4",
        "10",
        "25",
        "100",
        "250",
        "1000",
        "0.2"
      ],
      "type": "string",
      "default": "25",
      "description": "Download key for a download/upload threshold pair in Mbps: 0.2=0.2/0.2, 4=4/1, 10=10/1, 25=25/3, 100=100/10, 250=250/25, 1000=1000/100. These historical population aggregates cannot establish current BEAD eligibility or address service; 100/10 does not establish 100/20 availability."
    },
    "tech_filter": {
      "enum": [
        "a",
        "ac",
        "acf",
        "acfo",
        "acfos",
        "acfosw",
        "acfow",
        "acfs",
        "acfsw",
        "acfw",
        "aco",
        "acos",
        "acosw",
        "acow",
        "acs",
        "acsw",
        "acw",
        "af",
        "afo",
        "afos",
        "afosw",
        "afow",
        "afs",
        "afsw",
        "afw",
        "ao",
        "aos",
        "aosw",
        "aow",
        "as",
        "asw",
        "aw",
        "c",
        "cf",
        "cfo",
        "cfos",
        "cfosw",
        "cfow",
        "cfs",
        "cfsw",
        "cfw",
        "co",
        "cos",
        "cosw",
        "cow",
        "cs",
        "csw",
        "cw",
        "f",
        "fo",
        "fos",
        "fosw",
        "fow",
        "fs",
        "fsw",
        "fw",
        "o",
        "os",
        "osw",
        "ow",
        "s",
        "sw",
        "w"
      ],
      "type": "string",
      "default": "acfow",
      "description": "Any nonempty alphabetical combination of a=ADSL/DSL, c=cable, f=fiber, o=other (symmetric DSL, other copper, power line), s=satellite, w=fixed wireless. Default acfow excludes satellite; explicit acfosw includes every technology. acfow includes all fixed wireless and is not an exact program-technology eligibility filter."
    },
    "geography_ids": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "minItems": 2,
      "description": "FIPS GEOIDs to compare. The first 300 distinct IDs are queried; remaining distinct IDs are disclosed as excluded. For all 50 states, omit and set compare_all_states=true."
    },
    "geography_type": {
      "enum": [
        "state",
        "county",
        "cd",
        "place",
        "cbsa",
        "tribal"
      ],
      "type": "string",
      "description": "Geographic level to compare. Must be uniform across all geographies in the comparison."
    },
    "compare_all_states": {
      "type": "boolean",
      "default": false,
      "description": "When true, compares all 50 states + DC. Overrides geography_ids. Requires geography_type=\"state\"."
    }
  },
  "additionalProperties": false
}
fcc_compare_areas output schema
{
  "type": "object",
  "anyOf": [
    {
      "not": {
        "required": [
          "error"
        ]
      },
      "required": [
        "unmatchedIds",
        "excludedIds",
        "duplicateIds",
        "geographyType",
        "techFilter",
        "speedDownMbps",
        "sortBy",
        "areas",
        "totalAreas",
        "dataVintage",
        "appliedFilters"
      ]
    },
    {
      "required": [
        "error"
      ]
    }
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "properties": {
    "areas": {
      "type": "array",
      "items": {
        "type": "object",
        "required": [
          "id",
          "rank",
          "noCoverage",
          "oneProvider",
          "twoProviders",
          "threeOrMore",
          "total",
          "unservedPct",
          "coveragePct",
          "competitivePct"
        ],
        "properties": {
          "id": {
            "type": "string",
            "description": "FIPS GEOID."
          },
          "name": {
            "type": "string",
            "description": "Human-readable geography name if resolved (e.g., \"Pontotoc County, MS\")."
          },
          "rank": {
            "type": "number",
            "description": "Rank in the sorted comparison (1 = worst/lowest)."
          },
          "total": {
            "type": "number",
            "description": "Total population."
          },
          "noCoverage": {
            "type": "number",
            "description": "Population with no providers at the given speed."
          },
          "coveragePct": {
            "type": "number",
            "description": "Percentage with at least one provider."
          },
          "oneProvider": {
            "type": "number",
            "description": "Population with exactly one provider."
          },
          "threeOrMore": {
            "type": "number",
            "description": "Population with three or more providers."
          },
          "unservedPct": {
            "type": "number",
            "description": "Percentage with no coverage."
          },
          "twoProviders": {
            "type": "number",
            "description": "Population with two providers."
          },
          "competitivePct": {
            "type": "number",
            "description": "Percentage with two or more providers."
          }
        },
        "description": "Coverage metrics for one geography in the comparison.",
        "additionalProperties": false
      },
      "description": "Ranked comparison of geographies by the selected sort field."
    },
    "error": {
      "type": "object",
      "required": [
        "code",
        "message"
      ],
      "properties": {
        "code": {
          "type": "integer",
          "maximum": 9007199254740991,
          "minimum": -9007199254740991,
          "description": "JSON-RPC error code for this failure."
        },
        "data": {
          "type": "object",
          "properties": {
            "reason": {
              "type": "string",
              "examples": [
                "no_data_found",
                "invalid_all_states_combo",
                "missing_geography_ids",
                "invalid_geography_id_shape"
              ],
              "description": "Machine-readable failure mode. Declared by this tool: `no_data_found`: No area table data found for any of the requested geography IDs. `invalid_all_states_combo`: compare_all_states=true used with geography_type other than \"state\". `missing_geography_ids`: No geography_ids provided and compare_all_states is false. `invalid_geography_id_shape`: A geography_ids entry has a digit count that does not match the geography_type (state=2, county=5, cd=4, cbsa=5, place=7). Other values are possible when a failure originates below the handler."
            },
            "recovery": {
              "type": "object",
              "required": [
                "hint"
              ],
              "properties": {
                "hint": {
                  "type": "string"
                }
              },
              "description": "Actionable next step for the caller.",
              "additionalProperties": {}
            },
            "retryable": {
              "type": "boolean",
              "description": "Whether retrying may succeed."
            }
          },
          "additionalProperties": {}
        },
        "message": {
          "type": "string",
          "description": "Human-readable description of what went wrong."
        }
      },
      "description": "Present when the call failed. Absent on success.",
      "additionalProperties": {}
    },
    "notice": {
      "type": "string",
      "description": "Composed disclosure naming unmatched retained IDs, excluded unqueried IDs and duplicate IDs with their counts. Absent when none applies."
    },
    "sortBy": {
      "type": "string",
      "description": "Ranking field used."
    },
    "techFilter": {
      "type": "string",
      "description": "Technology filter applied."
    },
    "totalAreas": {
      "type": "number",
      "description": "Total number of areas compared."
    },
    "dataVintage": {
      "type": "string",
      "description": "Data vintage — Form 477 data as of June 2021."
    },
    "excludedIds": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "Distinct geography IDs beyond the first 300, which were not queried."
    },
    "duplicateIds": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "IDs repeated in the input, listed once in first repeated-occurrence order."
    },
    "unmatchedIds": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "Retained geography IDs without matching Area Table data."
    },
    "geographyType": {
      "type": "string",
      "description": "Geography type compared."
    },
    "speedDownMbps": {
      "type": "number",
      "description": "Speed threshold in Mbps."
    },
    "appliedFilters": {
      "type": "object",
      "required": [
        "geographyType",
        "techFilter",
        "speedDownMbps",
        "sortBy",
        "areasCompared"
      ],
      "properties": {
        "sortBy": {
          "type": "string",
          "description": "Field used for ranking."
        },
        "techFilter": {
          "type": "string",
          "description": "Technology filter applied."
        },
        "areasCompared": {
          "type": "number",
          "description": "Total number of geographies compared."
        },
        "geographyType": {
          "type": "string",
          "description": "Geographic level compared."
        },
        "speedDownMbps": {
          "type": "number",
          "description": "Download speed threshold in Mbps."
        }
      },
      "description": "Filters and parameters applied to this comparison.",
      "additionalProperties": false
    }
  },
  "additionalProperties": false
}
fcc_compare_areas annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true
}
fcc_find_underserved — Find Underserved Areas
Advertised by the server during the last successful anonymous check.
Advertised read-only

Finds geographic areas with limited or no broadband coverage at a given speed threshold, ranked by unserved population. Supports historical population screening and broadband equity research; it cannot establish current BEAD eligibility or address service. 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).

fcc_find_underserved input schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "properties": {
    "limit": {
      "type": "integer",
      "default": 20,
      "maximum": 100,
      "minimum": 1,
      "description": "Maximum number of areas to return, ranked by unserved population (descending)."
    },
    "state": {
      "type": "string",
      "pattern": "^[A-Z]{2}$",
      "description": "2-letter USPS state or territory code (e.g., \"WY\", \"MS\", \"PR\") to limit scope. An unrecognized code is rejected, not ignored. Omit for nationwide search — returns top areas only."
    },
    "offset": {
      "type": "integer",
      "default": 0,
      "maximum": 9007199254740991,
      "minimum": 0,
      "description": "Number of globally ranked matching areas to skip."
    },
    "speed_down": {
      "enum": [
        "4",
        "10",
        "25",
        "100",
        "250",
        "1000",
        "0.2"
      ],
      "type": "string",
      "default": "25",
      "description": "Download key for a download/upload threshold pair in Mbps: 0.2=0.2/0.2, 4=4/1, 10=10/1, 25=25/3, 100=100/10, 250=250/25, 1000=1000/100. These historical population aggregates cannot establish current BEAD eligibility or address service; 100/10 does not establish 100/20 availability."
    },
    "tech_filter": {
      "enum": [
        "a",
        "ac",
        "acf",
        "acfo",
        "acfos",
        "acfosw",
        "acfow",
        "acfs",
        "acfsw",
        "acfw",
        "aco",
        "acos",
        "acosw",
        "acow",
        "acs",
        "acsw",
        "acw",
        "af",
        "afo",
        "afos",
        "afosw",
        "afow",
        "afs",
        "afsw",
        "afw",
        "ao",
        "aos",
        "aosw",
        "aow",
        "as",
        "asw",
        "aw",
        "c",
        "cf",
        "cfo",
        "cfos",
        "cfosw",
        "cfow",
        "cfs",
        "cfsw",
        "cfw",
        "co",
        "cos",
        "cosw",
        "cow",
        "cs",
        "csw",
        "cw",
        "f",
        "fo",
        "fos",
        "fosw",
        "fow",
        "fs",
        "fsw",
        "fw",
        "o",
        "os",
        "osw",
        "ow",
        "s",
        "sw",
        "w"
      ],
      "type": "string",
      "default": "acfow",
      "description": "Any nonempty alphabetical combination of a=ADSL/DSL, c=cable, f=fiber, o=other (symmetric DSL, other copper, power line), s=satellite, w=fixed wireless. Default acfow excludes satellite; explicit acfosw includes every technology. acfow includes all fixed wireless and is not an exact program-technology eligibility filter."
    },
    "geography_type": {
      "enum": [
        "county",
        "cd",
        "place",
        "cbsa"
      ],
      "type": "string",
      "default": "county",
      "description": "Geographic granularity for historical population screening. \"county\" = county. \"cd\" = congressional district. \"place\" = census-designated place. \"cbsa\" = metro area."
    },
    "min_unserved_pop": {
      "type": "integer",
      "default": 1,
      "maximum": 9007199254740991,
      "minimum": 0,
      "description": "Minimum population with no coverage to include. Defaults to 1, which keeps fully covered areas out of a ranking of underserved ones. Set to 0 to rank every area regardless of unserved population, or higher to drop small gaps (e.g., 500 keeps only areas with at least 500 unserved residents)."
    },
    "urban_rural_filter": {
      "enum": [
        "all",
        "R",
        "U"
      ],
      "type": "string",
      "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."
    }
  },
  "additionalProperties": false
}
fcc_find_underserved output schema
{
  "type": "object",
  "anyOf": [
    {
      "not": {
        "required": [
          "error"
        ]
      },
      "required": [
        "offset",
        "areas",
        "geographyType",
        "speedDownMbps",
        "urbanRuralFilter",
        "dataVintage",
        "totalFound",
        "appliedFilters"
      ]
    },
    {
      "required": [
        "error"
      ]
    }
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "properties": {
    "cap": {
      "type": "number",
      "description": "The limit that was applied. Present when truncated."
    },
    "areas": {
      "type": "array",
      "items": {
        "type": "object",
        "required": [
          "id",
          "rank",
          "noCoverage",
          "oneProvider",
          "total",
          "unservedPct",
          "coveragePct"
        ],
        "properties": {
          "id": {
            "type": "string",
            "description": "FIPS GEOID of the geography."
          },
          "name": {
            "type": "string",
            "description": "Human-readable geography name if resolved (e.g., \"Pontotoc County, MS\")."
          },
          "rank": {
            "type": "number",
            "description": "Rank by unserved population (1 = most unserved)."
          },
          "total": {
            "type": "number",
            "description": "Total population in the geography."
          },
          "noCoverage": {
            "type": "number",
            "description": "Population with zero providers at the given speed threshold."
          },
          "coveragePct": {
            "type": "number",
            "description": "Percentage of population with at least one provider."
          },
          "oneProvider": {
            "type": "number",
            "description": "Population with exactly one provider."
          },
          "unservedPct": {
            "type": "number",
            "description": "Percentage of population with no coverage."
          }
        },
        "description": "An underserved area ranked by unserved population.",
        "additionalProperties": false
      },
      "description": "Ranked list of underserved areas."
    },
    "error": {
      "type": "object",
      "required": [
        "code",
        "message"
      ],
      "properties": {
        "code": {
          "type": "integer",
          "maximum": 9007199254740991,
          "minimum": -9007199254740991,
          "description": "JSON-RPC error code for this failure."
        },
        "data": {
          "type": "object",
          "properties": {
            "reason": {
              "type": "string",
              "examples": [
                "unknown_state"
              ],
              "description": "Machine-readable failure mode. Declared by this tool: `unknown_state`: The state input is two uppercase letters but is not a USPS state or territory abbreviation. Other values are possible when a failure originates below the handler."
            },
            "recovery": {
              "type": "object",
              "required": [
                "hint"
              ],
              "properties": {
                "hint": {
                  "type": "string"
                }
              },
              "description": "Actionable next step for the caller.",
              "additionalProperties": {}
            },
            "retryable": {
              "type": "boolean",
              "description": "Whether retrying may succeed."
            }
          },
          "additionalProperties": {}
        },
        "message": {
          "type": "string",
          "description": "Human-readable description of what went wrong."
        }
      },
      "description": "Present when the call failed. Absent on success.",
      "additionalProperties": {}
    },
    "shown": {
      "type": "number",
      "description": "Number of areas returned after applying the limit. Present when truncated."
    },
    "notice": {
      "type": "string",
      "description": "Guidance about the result set — how to broaden the filters when nothing matched, and how to narrow the query when the upstream scan hit its row ceiling. Absent when neither applies."
    },
    "offset": {
      "type": "number",
      "description": "Number of ranked matching areas skipped."
    },
    "truncated": {
      "type": "boolean",
      "description": "True when more areas matched than the limit returned. Absent when not truncated."
    },
    "nextOffset": {
      "type": "number",
      "description": "Next offset when another ranked page remains."
    },
    "scanRowCap": {
      "type": "number",
      "description": "Raw upstream row ceiling that bound the scan. Present only when scanTruncated is true."
    },
    "totalFound": {
      "type": "number",
      "description": "Total number of areas found before applying the limit filter."
    },
    "dataVintage": {
      "type": "string",
      "description": "Data vintage — Form 477 data as of June 2021."
    },
    "geographyType": {
      "type": "string",
      "description": "Geography type returned."
    },
    "scanTruncated": {
      "type": "boolean",
      "description": "True when the upstream row scan stopped at its ceiling before reaching the end of the matching data, so totalFound and the ranking cover only the portion that was scanned. Absent when the scan read every matching row."
    },
    "speedDownMbps": {
      "type": "number",
      "description": "Speed threshold used in Mbps."
    },
    "appliedFilters": {
      "type": "object",
      "required": [
        "geographyType",
        "speedDownMbps",
        "techFilter",
        "urbanRuralFilter",
        "minUnservedPop"
      ],
      "properties": {
        "state": {
          "type": "string",
          "description": "State abbreviation filter applied. Absent for nationwide searches."
        },
        "techFilter": {
          "type": "string",
          "description": "Technology filter applied."
        },
        "geographyType": {
          "type": "string",
          "description": "Geographic granularity queried."
        },
        "speedDownMbps": {
          "type": "number",
          "description": "Download speed threshold in Mbps."
        },
        "minUnservedPop": {
          "type": "number",
          "description": "Minimum unserved population filter applied."
        },
        "urbanRuralFilter": {
          "type": "string",
          "description": "Urban/rural filter applied."
        }
      },
      "description": "Filters applied to this query.",
      "additionalProperties": false
    },
    "urbanRuralFilter": {
      "type": "string",
      "description": "Urban/rural filter applied."
    }
  },
  "additionalProperties": false
}
fcc_find_underserved annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true
}
fcc_list_filing_periods — List Filing Periods
Advertised by the server during the last successful anonymous check.
Advertised read-only

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). When hasBdcCredentials is true, 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).

fcc_list_filing_periods input schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "properties": {
    "include_bdc": {
      "type": "boolean",
      "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."
    }
  },
  "additionalProperties": false
}
fcc_list_filing_periods output schema
{
  "type": "object",
  "anyOf": [
    {
      "not": {
        "required": [
          "error"
        ]
      },
      "required": [
        "periods",
        "form477Count",
        "bdcCount",
        "hasBdcCredentials",
        "dataNote"
      ]
    },
    {
      "required": [
        "error"
      ]
    }
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "properties": {
    "error": {
      "type": "object",
      "required": [
        "code",
        "message"
      ],
      "properties": {
        "code": {
          "type": "integer",
          "maximum": 9007199254740991,
          "minimum": -9007199254740991,
          "description": "JSON-RPC error code for this failure."
        },
        "data": {
          "type": "object",
          "properties": {
            "reason": {
              "type": "string",
              "description": "Machine-readable failure mode."
            },
            "recovery": {
              "type": "object",
              "required": [
                "hint"
              ],
              "properties": {
                "hint": {
                  "type": "string"
                }
              },
              "description": "Actionable next step for the caller.",
              "additionalProperties": {}
            },
            "retryable": {
              "type": "boolean",
              "description": "Whether retrying may succeed."
            }
          },
          "additionalProperties": {}
        },
        "message": {
          "type": "string",
          "description": "Human-readable description of what went wrong."
        }
      },
      "description": "Present when the call failed. Absent on success.",
      "additionalProperties": {}
    },
    "periods": {
      "type": "array",
      "items": {
        "type": "object",
        "required": [
          "asOfDate",
          "source"
        ],
        "properties": {
          "source": {
            "enum": [
              "form477",
              "bdc"
            ],
            "type": "string",
            "description": "\"form477\" = legacy ISP-reported data (2015–2021). \"bdc\" = Broadband Data Collection (2022+)."
          },
          "asOfDate": {
            "type": "string",
            "description": "Filing period as-of date in YYYY-MM-DD format (e.g., \"2021-06-30\")."
          },
          "publicationDate": {
            "type": "string",
            "description": "Date the dataset was published, if available."
          }
        },
        "description": "A filing period entry.",
        "additionalProperties": false
      },
      "description": "Available filing periods sorted newest first."
    },
    "bdcCount": {
      "type": "number",
      "description": "Number of BDC periods returned (0 when credentials not configured or include_bdc=false)."
    },
    "dataNote": {
      "type": "string",
      "description": "Note on data availability and the Form 477 vs. BDC gap."
    },
    "form477Count": {
      "type": "number",
      "description": "Number of Form 477 periods returned (always available)."
    },
    "hasBdcCredentials": {
      "type": "boolean",
      "description": "Whether BDC API credentials are configured in this deployment."
    }
  },
  "additionalProperties": false
}
fcc_list_filing_periods annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true
}

Prompts

1 advertised

broadband_equity_analysis

Advertised by the server during the last successful anonymous check.

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

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

Resources

2 advertised

fcc-broadband-providers-list — fcc-broadband-providers-list

Advertised by the server during the last successful anonymous check.

One page of the Form 477 holding-company directory: up to 25 holding company numbers (hoconum) ordered by hoconum ascending, each resolved to its company name. Read fcc-broadband://providers/list/0 for the first page, then follow the nextOffset each response carries; every page also reports the directory total. Paging is for browsing the directory — to find one company by name, call fcc_search_providers instead. Feed a hoconum to fcc_get_provider for that company national coverage profile. Data is as of June 2021.

fcc-broadband-providers-list URI
fcc-broadband://providers/list/0

MIME type: application/json

fcc-broadband-guide

Advertised by the server during the last successful anonymous check.

Use fcc_* tools for multi-step broadband gap research, rural or tribal comparisons, and provider investigations. Resolve geographic and holding-company identifiers, align coverage populations, and check sampling and completeness before drawing conclusions.

fcc-broadband-guide URI
skill://fcc-broadband-guide/SKILL.md

MIME type: text/markdown

fcc-broadband-geography-summary — fcc-broadband-geography-summary

Advertised by the server during the last successful anonymous check.

Broadband coverage summary for a specific geography: provider counts by speed tier, urban/rural split, tribal breakdown. Addressable by type and GEOID. Uses a fixed 25/3 Mbps download/upload threshold and satellite-inclusive acfosw technology filter for the June 2021 population snapshot; it cannot establish current eligibility or address service.

fcc-broadband-geography-summary URI template
fcc-broadband://geography/{type}/{id}/summary

MIME type: application/json

fcc-broadband-providers-list — fcc-broadband-providers-list

Advertised by the server during the last successful anonymous check.

One page of the Form 477 holding-company directory: up to 25 holding company numbers (hoconum) ordered by hoconum ascending, each resolved to its company name. Read fcc-broadband://providers/list/0 for the first page, then follow the nextOffset each response carries; every page also reports the directory total. Paging is for browsing the directory — to find one company by name, call fcc_search_providers instead. Feed a hoconum to fcc_get_provider for that company national coverage profile. Data is as of June 2021.

fcc-broadband-providers-list URI template
fcc-broadband://providers/list/{offset}

MIME type: application/json

io.modelcontextprotocol/skills

Advertised by the server during the last successful anonymous check.

io.modelcontextprotocol/skills URI template
skill://{+path}

90-day uptime

A lightweight connection check about every six hours, sampled on hosts with many listings. It shows the server answered, not that its tools work.

Too few checks for a percentage yet (1 of 1 answered).

  1. 2026-11-07: 1 of 1 checks answered

30-day availability

Aggregated from read-only remote checks; this is not a tool-execution or security guarantee.

Successful checks
1 of 1 (100%)
Average latency
756 ms
95th percentile latency
756 ms

Maintenance history

Public check and source-refresh events. Editorial and ownership records remain private.

  • · probe · passed · 756 ms · metadata changed · 9 tool(s), 2 resource(s), 3 resource template(s), 1 prompt(s)

Connect from your client

Each snippet registers the same endpoint; pick the client you use.

This server is operated by the named third party. Listing and endpoint checks are not an endorsement or a security audit. Review the operator's permissions, terms, and data handling before connecting. How listings are checked and corrected.

Claude Code

Run this once in a terminal. It registers the remote server. Use --scope project to write .mcp.json for the repo.
Claude Code configuration
claude mcp add --transport http fcc-broadband-mcp-server-caseyjhand https://fcc-broadband.caseyjhand.com/mcp

Codex

Run this once. Codex stores MCP servers in ~/.codex/config.toml (or .codex/config.toml in a trusted project).
Codex configuration
codex mcp add fcc-broadband-mcp-server-caseyjhand --url https://fcc-broadband.caseyjhand.com/mcp

Cursor

Merge this server into .cursor/mcp.json in your project, then enable fcc-broadband-mcp-server-caseyjhand in your MCP settings.
Cursor configuration
{
  "mcpServers": {
    "fcc-broadband-mcp-server-caseyjhand": {
      "url": "https://fcc-broadband.caseyjhand.com/mcp"
    }
  }
}

Cline

Merge this into cline_mcp_settings.json (Cline → MCP Servers → Configure).
Cline configuration
{
  "mcpServers": {
    "fcc-broadband-mcp-server-caseyjhand": {
      "type": "streamableHttp",
      "url": "https://fcc-broadband.caseyjhand.com/mcp",
      "disabled": false
    }
  }
}

VS Code

Merge this server into .vscode/mcp.json. Use MCP: List Servers to start fcc-broadband-mcp-server-caseyjhand and inspect its tools.
VS Code configuration
{
  "servers": {
    "fcc-broadband-mcp-server-caseyjhand": {
      "type": "http",
      "url": "https://fcc-broadband.caseyjhand.com/mcp"
    }
  }
}

Gemini CLI

Run this once. It writes .gemini/settings.json in the current project; pass --scope user for ~/.gemini/settings.json.
Gemini CLI configuration
gemini mcp add --transport http fcc-broadband-mcp-server-caseyjhand https://fcc-broadband.caseyjhand.com/mcp

Claude Desktop

Open Claude Settings > Connectors > Add custom connector, enter this server URL and enable it for the conversation. This is a manual remote-connector handoff, not a desktop JSON configuration.
Claude Desktop configuration
https://fcc-broadband.caseyjhand.com/mcp

Windsurf

Merge this into ~/.codeium/windsurf/mcp_config.json, then refresh MCP in Cascade. Windsurf remote servers use serverUrl, not url.
Windsurf configuration
{
  "mcpServers": {
    "fcc-broadband-mcp-server-caseyjhand": {
      "serverUrl": "https://fcc-broadband.caseyjhand.com/mcp"
    }
  }
}

Let your agent find its tools

Find servers like fcc-broadband-mcp-server from your agent. Add Koskamo once to search the index for endpoints, access requirements, and client setup. Public discovery needs no key.