FCC broadband availability, coverage analysis, and digital divide data for US geographies.
Maintain this server? Claim it
Call this server's tools from your browser. Nothing to install.
Requests go through mcptry because browsers can't call most MCP servers directly. Header values are sent to the server for that request only and are never stored or logged.
Tool list from our last check. Connect live to refresh it.
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).
Geographic level to compare. Must be uniform across all geographies in the comparison.
"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. Every option ranks worst-first, so rank 1 is the highest unserved share or headcount, or the lowest coverage or competitive share.
Download speed threshold in Mbps. 25 = FCC legacy standard. 100 = BEAD program standard.
Technology filter, one value: "acfosw" = every technology (default). "f" = fiber, "c" = cable, "a" = ADSL/DSL, "o" = other (symmetric DSL, other copper, power line), "s" = satellite, "w" = fixed wireless.
Array of FIPS GEOIDs to compare (up to 50). For all 50 states, omit and set compare_all_states=true.
When true, compares all 50 states + DC. Overrides geography_ids. Requires geography_type="state".
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).
| Argument | Type | Description |
|---|---|---|
| sort_by | string | "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. Every option ranks worst-first, so rank 1 is the highest unserved share or headcount, or the lowest coverage or competitive share. |
| speed_down | string | Download speed threshold in Mbps. 25 = FCC legacy standard. 100 = BEAD program standard. |
| tech_filter | string | Technology filter, one value: "acfosw" = every technology (default). "f" = fiber, "c" = cable, "a" = ADSL/DSL, "o" = other (symmetric DSL, other copper, power line), "s" = satellite, "w" = fixed wireless. |
| geography_ids | array | Array of FIPS GEOIDs to compare (up to 50). For all 50 states, omit and set compare_all_states=true. |
| geography_type* | string | Geographic level to compare. Must be uniform across all geographies in the comparison. |
| compare_all_states | boolean | When true, compares all 50 states + DC. Overrides geography_ids. Requires geography_type="state". |
{
"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 for BEAD funding. \"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 speed threshold in Mbps. 25 = FCC legacy standard. 100 = BEAD program standard."
},
"tech_filter": {
"enum": [
"acfosw",
"f",
"c",
"a",
"o",
"s",
"w"
],
"type": "string",
"default": "acfosw",
"description": "Technology filter, one value: \"acfosw\" = every technology (default). \"f\" = fiber, \"c\" = cable, \"a\" = ADSL/DSL, \"o\" = other (symmetric DSL, other copper, power line), \"s\" = satellite, \"w\" = fixed wireless."
},
"geography_ids": {
"type": "array",
"items": {
"type": "string"
},
"maxItems": 50,
"minItems": 2,
"description": "Array of FIPS GEOIDs to compare (up to 50). 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
}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).
| Argument | Type | Description |
|---|---|---|
| limit | integer | Maximum number of areas to return, ranked by unserved population (descending). |
| state | string | 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. |
| speed_down | string | Download speed threshold in Mbps for defining "underserved." 25 = FCC legacy standard. 100 = BEAD program standard. |
| tech_filter | string | Technology filter, one value: "acfosw" = every technology (default). "f" = fiber, "c" = cable, "a" = ADSL/DSL, "o" = other (symmetric DSL, other copper, power line), "s" = satellite, "w" = fixed wireless. |
| geography_type | string | Geographic granularity for results. "county" is most useful for policy analysis and BEAD eligibility. "cd" = congressional district. "place" = census-designated place. "cbsa" = metro area. |
| min_unserved_pop | integer |
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.
| Argument | Type | Description |
|---|---|---|
| latitude* | number | 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* | number | Longitude of the location in decimal degrees (e.g., -122.3321 for Seattle, WA). Negative for western hemisphere. |
{
"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
}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.
| Argument | Type | Description |
|---|---|---|
| speed_down | string | 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. |
| tech_filter | string | Technology filter, one value: "acfosw" = every technology (default, the recommended baseline). "f" = fiber, "c" = cable, "a" = ADSL/DSL, "o" = other (symmetric DSL, other copper, power line), "s" = satellite, "w" = fixed wireless. |
| geography_id | string | 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 | string | Filter to tribal ("T") or non-tribal ("N") areas. Use "T" to assess Native American connectivity gaps. |
| geography_type* |
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).
| Argument | Type | Description |
|---|---|---|
| hoconum* | string | Holding company number from fcc_search_providers — digits only, e.g. "130317" for Comcast Corporation. |
{
"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
}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).
| Argument | Type | Description |
|---|---|---|
| include_bdc | boolean | 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": "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
}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.
| Argument | Type | Description |
|---|---|---|
| consumer | boolean | Filter to consumer service (true) or business service (false). Omit to return both consumer and business offerings. |
| block_fips* | string | 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 | array | 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 | number | Minimum advertised download speed in Mbps to include in results. Omit to return all providers regardless of speed. |
Find census places and CBSAs (metro 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; CBSA codes do not encode 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.
| Argument | Type | Description |
|---|---|---|
| name* | string | Nonblank literal name fragment, such as "Casper, WY". Apostrophes, percent signs and underscores are literal characters. |
| limit | integer | Maximum matches per page (1–100), default 20. |
| offset | integer | Zero-based match offset; start at 0, then use nextOffset. |
| geography_type | any | Limit to place or cbsa; omit or leave blank to search both. |
{
"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": [
"place",
"cbsa"
],
"type": "string",
"description": "Place or CBSA."
}
],
"description": "Limit to place or cbsa; omit or leave blank to search both."
}
},
"additionalProperties": false
}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).
| Argument | Type | Description |
|---|---|---|
| limit | integer | Maximum number of distinct providers to return. |
| state | string | 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. |
| name_search | string | Partial holding company name to search (case-insensitive). e.g., "Comcast", "T-Mobile", "Frontier". Omit to list all providers in a state. |
| 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 | string | 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": "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."
},
"speed_down": {
"enum": [
"4",
"10",
"25",
"100",
"250",
"1000",
"0.2"
],
"type": "string",
"default": "25",
"description": "Download speed threshold in Mbps for defining \"underserved.\" 25 = FCC legacy standard. 100 = BEAD program standard."
},
"tech_filter": {
"enum": [
"acfosw",
"f",
"c",
"a",
"o",
"s",
"w"
],
"type": "string",
"default": "acfosw",
"description": "Technology filter, one value: \"acfosw\" = every technology (default). \"f\" = fiber, \"c\" = cable, \"a\" = ADSL/DSL, \"o\" = other (symmetric DSL, other copper, power line), \"s\" = satellite, \"w\" = fixed wireless."
},
"geography_type": {
"enum": [
"county",
"cd",
"place",
"cbsa"
],
"type": "string",
"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."
},
"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
}| string |
| 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 | string | Filter to urban ("U") or rural ("R") areas only, or "all" for both combined. Rural breakdown is key for BEAD program analysis. |
{
"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": "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."
},
"tech_filter": {
"enum": [
"acfosw",
"f",
"c",
"a",
"o",
"s",
"w"
],
"type": "string",
"default": "acfosw",
"description": "Technology filter, one value: \"acfosw\" = every technology (default, the recommended baseline). \"f\" = fiber, \"c\" = cable, \"a\" = ADSL/DSL, \"o\" = other (symmetric DSL, other copper, power line), \"s\" = satellite, \"w\" = fixed wireless."
},
"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. Rural breakdown is key for BEAD program analysis."
}
},
"additionalProperties": false
}{
"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
}| tech_filter | array | 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. |
{
"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."
},
"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
}