Skip to main content
Glama

Geocode Census Block

fcc_geocode_block
Read-onlyIdempotent

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.

Input Schema

NameRequiredDescriptionDefault
latitudeYesLatitude of the location in decimal degrees (e.g., 47.6062 for Seattle, WA). Must be within the continental US, Alaska, Hawaii, or US territories.
longitudeYesLongitude of the location in decimal degrees (e.g., -122.3321 for Seattle, WA). Negative for western hemisphere.

Output Schema

NameRequiredDescriptionDefault
errorNoPresent when the call failed. Absent on success.
blockFipsNo15-digit census block FIPS code on 2010 census boundaries (e.g., "530330081002024"). Pass this to fcc_search_availability to look up broadband providers.
stateCodeNo2-letter state abbreviation (e.g., "WA").
stateFipsNo2-digit state FIPS code (e.g., "53" for Washington).
stateNameNoFull state name (e.g., "Washington").
countyFipsNo5-digit county FIPS code (e.g., "53033" for King County, WA).
countyNameNoHuman-readable county name (e.g., "King").
censusVintageNoDecennial census whose block boundaries blockFips belongs to. Always "2010" — the vintage the Form 477 deployment dataset behind fcc_search_availability is keyed by.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed2 schema fields changed
    • changedOutput schema / properties / error / properties / data / properties / reason / description
      Previous value: -"Machine-readable failure mode. Declared by this tool: `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."New value: +"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."
    • changedOutput schema / properties / error / properties / data / properties / reason / examples
      Previous value: -[
      -  "block_not_found"
      -]New value: +[
      +  "geo_backend_unavailable",
      +  "block_not_found"
      +]
  2. 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": [
      +      "blockFips",
      +      "censusVintage",
      +      "countyFips",
      +      "countyName",
      +      "stateFips",
      +      "stateCode",
      +      "stateName"
      +    ]
      +  },
      +  {
      +    "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: `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.",
      +          "examples": [
      +            "block_not_found"
      +          ],
      +          "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: -[
      -  "blockFips",
      -  "censusVintage",
      -  "countyFips",
      -  "countyName",
      -  "stateFips",
      -  "stateCode",
      -  "stateName"
      -]
  3. Changed3 schema fields changed
    • changedOutput schema / properties / blockFips / description
      Previous value: -"15-digit census block FIPS code (e.g., \"530330081021016\"). Pass this to fcc_search_availability to look up broadband providers."New value: +"15-digit census block FIPS code on 2010 census boundaries (e.g., \"530330081002024\"). Pass this to fcc_search_availability to look up broadband providers."
    • addedOutput schema / properties / censusVintage
      Added value: +{
      +  "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.",
      +  "type": "string"
      +}
    • changedOutput schema / required
      Previous value: -[
      -  "blockFips",
      -  "countyFips",
      -  "countyName",
      -  "stateFips",
      -  "stateCode",
      -  "stateName"
      -]New value: +[
      +  "blockFips",
      +  "censusVintage",
      +  "countyFips",
      +  "countyName",
      +  "stateFips",
      +  "stateCode",
      +  "stateName"
      +]
  4. First observed

TDQS

A4.7/5.0
Behavior5/5

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

Annotations already declare readOnlyHint, idempotentHint, and openWorldHint=false, but the description adds genuinely new operational context: no authentication is required, the lookup runs against 2010 census boundaries, and the vintage constraint is exactly what determines whether downstream calls will succeed. This is the kind of behavioral caveat annotations cannot express.

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

Conciseness5/5

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

Three sentences, each load-bearing: the conversion and its outputs, the prerequisite relationship, and the vintage/auth caveat. The core purpose is front-loaded and nothing is repeated from the schema or annotations.

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

Completeness5/5

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

An output schema exists, so return-value structure need not be explained, yet the description still names the key output (blockFips) needed to chain into fcc_search_availability. Combined with the vintage constraint and no-auth note, an agent has everything required to call this correctly and use the result.

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%, and the schema already documents latitude/longitude ranges, hemisphere sign convention, and the US-territory constraint, so the baseline is 3. The description adds no per-parameter syntax or format detail beyond the schema, merely restating that a coordinate pair is the input.

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

Purpose5/5

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

States a precise verb and resource ('Converts a latitude/longitude coordinate to a 15-digit census block FIPS code') and enumerates the returned fields, so the transformation is unambiguous. It also distinguishes itself from siblings by naming fcc_search_availability as the downstream consumer rather than a substitute.

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

Usage Guidelines5/5

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

Explicitly states this is 'the required prerequisite for fcc_search_availability since the broadband dataset is indexed by census block, not address' — a clear when-to-use rule tied to a named sibling. It further constrains usage with the 2010-vintage requirement, warning that a 2020 block ID from another source will not match.

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.