Skip to main content
Glama

Get Broadband Coverage Summary

fcc_get_coverage_summary
Read-onlyIdempotent

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.

Tool call template

Replace each placeholder with a value matching the input schema. Only required parameters are included; add optional parameters as needed.

{
  "id": 1,
  "jsonrpc": "2.0",
  "method": "tools/call",
  "params": {
    "arguments": {
      "geography_type": "<geography_type>"
    },
    "name": "fcc_get_coverage_summary"
  }
}

Input Schema

NameRequiredDescriptionDefault
speed_downNoDownload 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.25
tech_filterNoAny 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.acfow
geography_idNoFIPS 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_filterNoFilter to tribal ("T") or non-tribal ("N") areas. Use "T" to assess Native American connectivity gaps.all
geography_typeYesGeographic 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_filterNoFilter 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.all

Output Schema

NameRequiredDescriptionDefault
errorNoPresent when the call failed. Absent on success.
noticeNoExplains an empty requested population segment after confirming geography rows exist.
breakdownNoPer-segment breakdown by urban/rural and tribal/non-tribal.
geographyNoThe queried geography.
populationNoPopulation counts by provider availability tier.
techFilterNoTechnology filter applied.
coveragePctNoPercentage of population with at least one provider at the given speed.
dataVintageNoData vintage — Form 477 data as of June 2021.
unservedPctNoPercentage with zero providers in the selected historical technology and speed view.
speedDownMbpsNoDownload speed threshold used in Mbps.
appliedFiltersNoFilters applied to this query.
competitivePctNoPercentage with two or more providers.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed9 schema fields changed
    • changedInput schema / properties / speed_down / description
      Previous value: -"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."New value: +"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."
    • changedInput schema / properties / tech_filter / default
      Previous value: -"acfosw"New value: +"acfow"
    • changedInput schema / properties / tech_filter / description
      Previous value: -"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."New value: +"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."
    • changedInput schema / properties / tech_filter / enum
      Previous value: -[
      -  "acfosw",
      -  "f",
      -  "c",
      -  "a",
      -  "o",
      -  "s",
      -  "w"
      -]New value: +[
      +  "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"
      +]
    • changedInput schema / properties / urban_rural_filter / description
      Previous value: -"Filter to urban (\"U\") or rural (\"R\") areas only, or \"all\" for both combined. Rural breakdown is key for BEAD program analysis."New value: +"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."
    • changedOutput schema / properties / error / properties / data / properties / reason / description
      Previous value: -"Machine-readable failure mode. Declared by this tool: `geography_not_found`: No area data found for the given geography ID and type. `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."New value: +"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."
    • changedOutput schema / properties / error / properties / data / properties / reason / examples
      Previous value: -[
      -  "geography_not_found",
      -  "invalid_geography_combo",
      -  "invalid_geography_id_shape"
      -]New value: +[
      +  "coverage_timeout",
      +  "geography_not_found",
      +  "invalid_geography_combo",
      +  "invalid_geography_id_shape"
      +]
    • addedOutput schema / properties / notice
      Added value: +{
      +  "description": "Explains an empty requested population segment after confirming geography rows exist.",
      +  "type": "string"
      +}
    • changedOutput schema / properties / unservedPct / description
      Previous value: -"Percentage with zero providers — FCC \"unserved\" definition."New value: +"Percentage with zero providers in the selected historical technology and speed view."
  2. Changed1 schema field changed
    • changedOutput schema / properties / geography / properties / id / description
      Previous value: -"FIPS GEOID (e.g., \"06\")."New value: +"FIPS GEOID (e.g., \"06\"), or \"0\" for United States national coverage."
  3. Changed1 schema field changed
    • changedInput schema / properties / tech_filter / description
      Previous value: -"Technology filter. \"acfosw\" = any wired or fixed wireless (recommended baseline). \"f\" = fiber only. \"c\" = cable only. \"a\" = ADSL/DSL only. \"s\" = satellite only. \"w\" = fixed wireless only. Mix letters for combinations, e.g., \"fc\" = fiber or cable."New value: +"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."
  4. Changed6 schema fields changed
    • changedInput schema / $schema
      Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • addedInput schema / additionalProperties
      Added value: +false
    • changedOutput schema / $schema
      Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • addedOutput schema / anyOf
      Added value: +[
      +  {
      +    "not": {
      +      "required": [
      +        "error"
      +      ]
      +    },
      +    "required": [
      +      "geography",
      +      "techFilter",
      +      "speedDownMbps",
      +      "population",
      +      "coveragePct",
      +      "unservedPct",
      +      "competitivePct",
      +      "breakdown",
      +      "dataVintage",
      +      "appliedFilters"
      +    ]
      +  },
      +  {
      +    "required": [
      +      "error"
      +    ]
      +  }
      +]
    • addedOutput schema / properties / error
      Added value: +{
      +  "additionalProperties": {},
      +  "description": "Present when the call failed. Absent on success.",
      +  "properties": {
      +    "code": {
      +      "description": "JSON-RPC error code for this failure.",
      +      "maximum": 9007199254740991,
      +      "minimum": -9007199254740991,
      +      "type": "integer"
      +    },
      +    "data": {
      +      "additionalProperties": {},
      +      "properties": {
      +        "reason": {
      +          "description": "Machine-readable failure mode. Declared by this tool: `geography_not_found`: No area data found for the given geography ID and type. `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.",
      +          "examples": [
      +            "geography_not_found",
      +            "invalid_geography_combo",
      +            "invalid_geography_id_shape"
      +          ],
      +          "type": "string"
      +        },
      +        "recovery": {
      +          "additionalProperties": {},
      +          "description": "Actionable next step for the caller.",
      +          "properties": {
      +            "hint": {
      +              "type": "string"
      +            }
      +          },
      +          "required": [
      +            "hint"
      +          ],
      +          "type": "object"
      +        },
      +        "retryable": {
      +          "description": "Whether retrying may succeed.",
      +          "type": "boolean"
      +        }
      +      },
      +      "type": "object"
      +    },
      +    "message": {
      +      "description": "Human-readable description of what went wrong.",
      +      "type": "string"
      +    }
      +  },
      +  "required": [
      +    "code",
      +    "message"
      +  ],
      +  "type": "object"
      +}
    • removedOutput schema / required
      Removed value: -[
      -  "geography",
      -  "techFilter",
      -  "speedDownMbps",
      -  "population",
      -  "coveragePct",
      -  "unservedPct",
      -  "competitivePct",
      -  "breakdown",
      -  "dataVintage",
      -  "appliedFilters"
      -]
  5. Changed1 schema field changed
    • changedInput schema / properties / geography_id / description
      Previous value: -"FIPS GEOID for the geography. State: 2-digit (e.g., \"06\" for California). County: 5-digit (e.g., \"06037\" for LA County). Congressional district: 4-digit state+district (e.g., \"0601\"). CBSA: 5-digit code. Omit for nation-level queries."New value: +"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."
  6. Changed2 schema fields changed
    • addedOutput schema / properties / appliedFilters
      Added value: +{
      +  "additionalProperties": false,
      +  "description": "Filters applied to this query.",
      +  "properties": {
      +    "geographyId": {
      +      "description": "FIPS GEOID queried. Absent for nation-level.",
      +      "type": "string"
      +    },
      +    "geographyType": {
      +      "description": "Geographic aggregation level queried.",
      +      "type": "string"
      +    },
      +    "speedDownMbps": {
      +      "description": "Download speed threshold in Mbps.",
      +      "type": "number"
      +    },
      +    "techFilter": {
      +      "description": "Technology filter applied.",
      +      "type": "string"
      +    },
      +    "tribalFilter": {
      +      "description": "Tribal/non-tribal filter applied.",
      +      "type": "string"
      +    },
      +    "urbanRuralFilter": {
      +      "description": "Urban/rural filter applied.",
      +      "type": "string"
      +    }
      +  },
      +  "required": [
      +    "geographyType",
      +    "techFilter",
      +    "speedDownMbps",
      +    "urbanRuralFilter",
      +    "tribalFilter"
      +  ],
      +  "type": "object"
      +}
    • changedOutput schema / required
      Previous value: -[
      -  "geography",
      -  "techFilter",
      -  "speedDownMbps",
      -  "population",
      -  "coveragePct",
      -  "unservedPct",
      -  "competitivePct",
      -  "breakdown",
      -  "dataVintage"
      -]New value: +[
      +  "geography",
      +  "techFilter",
      +  "speedDownMbps",
      +  "population",
      +  "coveragePct",
      +  "unservedPct",
      +  "competitivePct",
      +  "breakdown",
      +  "dataVintage",
      +  "appliedFilters"
      +]
  7. First observed

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, and openWorldHint=false, so safety and repeatability are covered. The description adds genuinely useful context beyond that: the June 2021 Form 477 vintage, the historical-screening limitation, and the fact that an empty segment returns zero population with a notice. It does not discuss volume, aggregation rules, or how segments are derived, leaving the behavioral picture partial.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the core purpose and output shape, then scope, then the vintage caveat — a sensible order for an agent skimming. Two sentences are dense but each clause carries information; the only redundancy is the BEAD-eligibility caveat, which is echoed again inside the schema text.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema present, the description need not explain return values, and it does cover the things the schema cannot: data provenance, temporal validity, intended analytical use, and the supported geography levels. The one gap is that it never hints at the relationship to sibling tools for comparison or underserved-area queries, which matters given eight siblings in this domain.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so every parameter, including the large tech_filter enum and the speed/upload pair mapping, is already fully documented in the schema. The description only restates the concept of a 'given speed threshold' and the urban/rural and tribal segmentation, adding no syntax or interpretation beyond what the schema provides. Baseline 3 applies when the schema does the heavy lifting.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Returns a broadband coverage summary for a geography') and enumerates exactly what the payload contains: population buckets by provider count at a speed threshold, split urban/rural and tribal/non-tribal. The scope line listing supported geography levels further pins it down, but no sibling tool is named, so the agent must infer its place against fcc_find_underserved or fcc_compare_areas.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives a clear positive context ('The primary tool for digital divide and equity analysis') and a meaningful exclusion: the data is historical Form 477 screening and 'cannot establish current BEAD eligibility or address service.' It stops short of naming which sibling to use instead for current-availability or eligibility questions, so the routing half of the guidance is left implicit.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.