census-geocoding-mcp
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@census-geocoding-mcpgeocode 1600 Pennsylvania Ave NW, Washington DC"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
πΊοΈ Census Geocoding MCP
An MCP (Model Context Protocol) server that gives AI assistants full access to the U.S. Census Bureau Geocoding Services API. Geocode addresses, reverse-geocode coordinates, and retrieve Census geographies β all without an API key.
β¨ Features
π No API key required β the Census Geocoding API is completely free and public
π Single-record geocoding β one-line or parsed addresses (stateside + Puerto Rico)
ποΈ Geography lookup β resolve addresses or coordinates to Census tracts, blocks, counties, congressional districts, and more
π¦ Batch processing β up to 10,000 records per request, as CSV or structured arrays
π Puerto Rico support β dedicated endpoints with Urbanization and Municipio fields
ποΈ Benchmark & vintage control β target specific MAF/TIGER database versions and Census geography vintages
π¦ TypeScript β fully typed, ESM, Node.js β₯ 18
Related MCP server: chuk-mcp-geocoder
π§° Tools (12 total)
π Discovery
Tool | Description |
| List all available MAF/TIGER locator database versions |
| List vintages (Census geography versions) for a given benchmark |
π Single-Record Geocoding (Locations)
Tool | Description |
| Geocode a full address on one line |
| Geocode a US (stateside) address with separate fields |
| Geocode a Puerto Rico address (supports Urbanization & Municipio) |
πΊοΈ Single-Record Geography Lookup
Tool | Description |
| Geocode a one-line address + return Census geographies |
| Geocode a parsed address + return Census geographies |
| Geocode a PR address + return Census geographies |
| Look up Census geographies for a lon/lat coordinate pair |
π¦ Batch Processing
Tool | Description |
| Batch geocode up to 10,000 addresses (coordinates only) |
| Batch geocode up to 10,000 addresses + Census geographies |
| Batch geography lookup for up to 10,000 coordinate pairs |
π Quick Start
Prerequisites
Node.js β₯ 18.0.0
Install & Build
git clone https://github.com/your-username/census-geocoding-mcp.git
cd census-geocoding-mcp
npm install
npm run buildAdd to Claude Desktop
Edit your Claude Desktop configuration file:
macOS:
~/Library/Application Support/Claude/claude_desktop_config.jsonWindows:
%APPDATA%\Claude\claude_desktop_config.json
{
"mcpServers": {
"census-geocoding": {
"command": "node",
"args": ["/absolute/path/to/census-geocoding-mcp/dist/index.js"]
}
}
}Restart Claude Desktop β the 12 geocoding tools will be available immediately.
π οΈ Tool Reference
list_benchmarks
Lists all available benchmarks (MAF/TIGER locator database versions).
No parameters required.list_vintages
Lists all vintages available for a given benchmark.
Parameter | Type | Required | Description |
| string | β | Benchmark name or ID (e.g. |
geocode_oneline_address
Geocode a complete address provided as a single string.
Parameter | Type | Required | Description |
| string | β | Full address, e.g. |
| string | β | Default: |
Returns: matched address, interpolated coordinates, Tigerline ID, address range components.
geocode_parsed_address
Geocode a US stateside address with fields parsed separately. Requires at minimum street + zip OR street + city + state.
Parameter | Type | Required | Description |
| string | β | House number and street name |
| string | β | City name |
| string | β | 2-letter state abbreviation |
| string | β | 5-digit ZIP code |
| string | β | Default: |
geocode_pr_address
Geocode a Puerto Rico address with optional Urbanization and Municipio.
Parameter | Type | Required | Description |
| string | β | House number and street name |
| string | β | Urbanization name |
| string | β | City name |
| string | β | Municipio name |
| string | β | ZIP code (begins with 006, 007, or 009) |
| string | β | Default: |
find_geographies_oneline / find_geographies_parsed / find_geographies_pr
Same parameters as their geocode_* counterparts, plus:
Parameter | Type | Required | Description |
| string | β | Default: |
| string | β | Comma-delimited layer names/IDs, or |
Geography layers returned include: States, Counties, Census Tracts, Census Blocks, Congressional Districts, County Subdivisions, Incorporated Places, State Legislative Districts, Urban Areas, Combined Statistical Areas, and more.
find_geographies_coordinates
Reverse geocode a coordinate pair to Census geographies.
Parameter | Type | Required | Description |
| number | β | Longitude (X) in decimal degrees, range |
| number | β | Latitude (Y) in decimal degrees, range |
| string | β | Default: |
| string | β | Default: |
| string | β | Comma-delimited layer names/IDs, or |
batch_geocode_locations
Batch geocode up to 10,000 addresses. Accepts either raw CSV or a structured array.
Parameter | Type | Required | Description |
| string | β | Raw CSV: |
| array | β | Array of |
| string | β | Default: |
csv_contenttakes precedence if both are provided. At least one must be supplied.
Returns CSV columns: Record ID, Input Address, Match Indicator, Match Type, Output Address, Coordinates, Tigerline ID, Tigerline Side.
batch_geocode_geographies
Like batch_geocode_locations but also returns Census geography codes.
Additional parameter:
Parameter | Type | Required | Description |
| string | β | Default: |
Returns CSV columns: all location columns + State Code, County Code, Tract Code, Block Code.
batch_geolookup_coordinates
Batch geography lookup for coordinate pairs.
Parameter | Type | Required | Description |
| string | β | Raw CSV: |
| array | β | Array of |
| string | β | Default: |
| string | β | Default: |
π‘ Example Prompts
Once connected to Claude Desktop, try prompts like:
"What Census tract and block is 1600 Pennsylvania Avenue NW, Washington DC in?"
"Geocode these 500 addresses and give me their lat/lon coordinates" (paste a CSV)
"What congressional district is at longitude -87.6298, latitude 41.8781?"
"List all available Census geocoding benchmarks"
"Geocode this Puerto Rico address: 123 Calle Luna, Urb El ParaΓso, San Juan, PR 00926"
βοΈ Development
# Watch mode (recompile on save)
npm run dev
# One-time build
npm run build
# Run the server directly
npm startπ Notes & Limits
Batch limit: 10,000 records per file β enforced client-side before the request is sent; exceeding it raises a clear error immediately
Batch size limit: CSV content is additionally capped at 5 MB (UTF-8 bytes) β this catches oversized inputs that could pass the row count check via very long lines
No authentication required β all endpoints are public
Single-record responses are JSON; batch responses are CSV text
Default benchmark:
Public_AR_Current(current MAF/TIGER database)Default vintage:
Current_Current(required for all geography endpoints)Request timeout: all API calls time out after 30 seconds; the server raises an abort error rather than hanging indefinitely
Input length validation: all string parameters have maximum lengths enforced before any network request is made (
address200 chars,street/city/urb/municipio100,state/zip10,benchmark/vintage50,layers500)Coordinate validation:
longitudemust be in[-180, 180]andlatitudein[-90, 90]; out-of-range values are rejected before the request is sentCSV field escaping: address fields passed to batch endpoints are escaped per RFC 4180 (embedded quotes doubled, fields containing commas or newlines quoted) to prevent malformed CSV
The underlying API is provided by the U.S. Census Bureau and subject to their terms of service
π References
βοΈ License
This project is licensed under the MIT License.
Available Tools
12 toolsbatch_geocode_geographiesA
Batch geocode up to 10,000 addresses AND return associated Census geographies (State, County, Tract, Block Codes). Provide addresses as raw CSV or structured array. CSV format: UniqueID,Street,City,State,ZIP. Returns a CSV with: Record ID, Input Address, Match Indicator, Match Type, Output Address, Coordinates, Tigerline ID, Tigerline Side, State Code, County Code, Tract Code, Block Code.
| Name | Required | Description | Default |
|---|---|---|---|
| vintage | No | Vintage name or ID (default: "Current_Current") | |
| addresses | No | Array of address objects. Ignored if csv_content is provided. | |
| benchmark | No | Benchmark name or ID (default: "Public_AR_Current") | |
| csv_content | No | Raw CSV content. Each row: UniqueID,Street,City,State,ZIP. For PR addresses with Urbanization: UniqueID,Street,Municipio,State,ZIP,Urbanization. Takes precedence over the addresses array. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden and does well: it discloses the record limit, the CSV column contract, and the precedence rule that csv_content overrides addresses. It stops short of permissions, error/partial-match handling, or rate limits, which matter for a 10k-record batch call.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three dense sentences, front-loaded with the capability and limit, then input format, then return format. Every sentence carries information, though the return-field list is long and could be tightened.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, so the description properly enumerates the returned CSV columns, and it covers both input shapes plus the precedence rule and the batch ceiling. Only the response/error semantics for unmatched addresses are left unaddressed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description adds the CSV column ordering and the PR Urbanization variant beyond what the schema states, but it does not explain the vintage or benchmark defaults that the schema itself documents only lightly.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource plus scope: batch geocode up to 10,000 addresses and return Census geographies, with the exact geography levels named (State, County, Tract, Block). It implicitly separates itself from single-address siblings, but never names an alternative tool, so an agent must infer the batch/one-line split from the name alone.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage context is implied by scope and by the two accepted input shapes (raw CSV or structured array), and the 10,000 record ceiling is stated. There is no explicit when-to-use versus when-not guidance and no mention of the other batch siblings (batch_geocode_locations, batch_geolookup_coordinates), so selection between them is left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
batch_geocode_locationsA
Batch geocode up to 10,000 addresses (locations only, no Census geographies). Provide addresses either as a raw CSV string or as a structured array. CSV format: UniqueID,Street,City,State,ZIP (all fields except UniqueID and Street are optional but must retain delimiter). Returns a CSV with: Record ID, Input Address, Match Indicator, Match Type, Output Address, Coordinates, Tigerline ID, Tigerline Side.
| Name | Required | Description | Default |
|---|---|---|---|
| addresses | No | Array of address objects to geocode. Ignored if csv_content is provided. | |
| benchmark | No | Benchmark name or ID (default: "Public_AR_Current") | |
| csv_content | No | Raw CSV content. Each row: UniqueID,Street,City,State,ZIP. For PR addresses with Urbanization: UniqueID,Street,Municipio,State,ZIP,Urbanization. Takes precedence over the addresses array if both are provided. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the behavioral burden. It discloses the key behavioral traits: 10,000 address cap, locations-only restriction, input format options, and precedence rules ('Takes precedence over the addresses array'). It also enumerates the return CSV columns. Missing details on error handling or rate limits, but substantial for an unannotated tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense yet well-structured, front-loading the core action and limits, then detailing input formats and output columns in a compact way. Every sentence adds value without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite no output schema, the description fully specifies the return CSV columns, and with 100% schema coverage for params, it leaves no critical gaps for correct usage. It adequately covers input formats, limits, and output structure.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the schema already documents all parameters. The description adds meaningful context beyond the schema by detailing the exact CSV format expected (UniqueID,Street,City,State,ZIP) and precedence between csv_content and addresses, which aids correct invocation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (geocode) and resource (addresses, locations only) with a clear scope limit ('no Census geographies'). This distinguishes it from sibling batch_geocode_geographies and the oneline/parsed geocode tools by its batch + locations-only nature.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for bulk location geocoding and hints at format choices, but does not explicitly say when to use this vs single-address siblings (geocode_oneline_address, geocode_parsed_address) or when to prefer CSV over array input beyond precedence. No when-not guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
batch_geolookup_coordinatesB
Batch look up Census geographies for up to 10,000 coordinate pairs (longitude/latitude). Provide coordinates as raw CSV or structured array. CSV format: UniqueID,Longitude(X),Latitude(Y). Returns State, County, Tract, and Block codes for each coordinate.
| Name | Required | Description | Default |
|---|---|---|---|
| vintage | No | Vintage name or ID (default: "Current_Current") | |
| benchmark | No | Benchmark name or ID (default: "Public_AR_Current") | |
| coordinates | No | Array of coordinate objects. Ignored if csv_content is provided. | |
| csv_content | No | Raw CSV content. Each row: UniqueID,Longitude(X),Latitude(Y). Takes precedence over the coordinates array. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden; it does disclose the 10,000-record ceiling and the fields returned, which is real value. However, it omits behavioral considerations that matter for a batch lookup: geographic coverage limits, auth/rate-limit behavior, and whether out-of-range or unmatched coordinates fail the whole batch or are simply omitted.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three tight sentences, front-loaded with purpose, then input modes, then return values. Slightly less than perfect because the CSV column format is repeated from the schema's csv_content description.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 4-parameter batch tool with no annotations and no output schema, listing the returned geography codes is helpful, but the description leaves out coverage restrictions, failure/partial-success semantics, and any guidance on the vintage/benchmark parameters' effect on results.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents vintage, benchmark, coordinates, and csv_content including the precedence rule. The description restates the CSV column format, which adds mild convenience but no new semantics; baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description gives a specific verb and resource ('Batch look up Census geographies'), and the coordinate-pair scope plus the 10,000 cap distinguishes it from the single-coordinate sibling find_geographies_coordinates. It stops short of naming that sibling or batch_geocode_locations explicitly, so an agent must infer the split.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage context is implied by the batch framing and by the two accepted input forms (raw CSV vs structured array), but there is no explicit when-to-use vs when-to-use-single, no prerequisite or coverage caveat (e.g. US-only), and no guidance on choosing between csv_content and coordinates.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
find_geographies_coordinatesA
Look up Census geographies for a given longitude/latitude coordinate pair. Returns States, Counties, Census Tracts, Census Blocks, Congressional Districts, County Subdivisions, Incorporated Places, State Legislative Districts, Urban Areas, Combined Statistical Areas, and more.
| Name | Required | Description | Default |
|---|---|---|---|
| layers | No | Comma-delimited list of layer IDs or names to include, or "all" | |
| vintage | No | Vintage name or ID (default: "Current_Current") | |
| latitude | Yes | Latitude (Y) in decimal degrees, e.g. 33.75649 | |
| benchmark | No | Benchmark name or ID (default: "Public_AR_Current") | |
| longitude | Yes | Longitude (X) in decimal degrees, e.g. -84.39215 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It does disclose the breadth of the returned geography layers, which is genuinely useful given there is no output schema, but it says nothing about auth requirements, rate limits, error behavior for out-of-range or non-US coordinates, or whether layer/vintage choices affect results.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with the core lookup action and followed by the payload summary. The long enumeration of layers is slightly bulky but earns its place as a substitute for a missing output schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With 100% schema coverage and no output schema, the description sensibly summarizes the return payload. It is close to complete, missing only edge-case behavior (invalid coordinates, non-US locations) and any guidance on the optional layers/vintage/benchmark parameters.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so latitude, longitude, layers, vintage, and benchmark are already documented in the schema with formats and defaults. The description adds no syntax or semantics beyond the schema, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('look up Census geographies') and names the exact input ('a given longitude/latitude coordinate pair'). This implicitly separates it from the address-based siblings (find_geographies_oneline, find_geographies_parsed, find_geographies_pr), which take addresses rather than raw coordinates.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The coordinate input implies the use case, but the description never states when to choose this over find_geographies_oneline or find_geographies_parsed, nor any prerequisite such as US-only coverage. Usage is left to inference from the parameter list.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
find_geographies_onelineB
Geocode a one-line address AND return associated Census geographies (States, Counties, Census Tracts, Census Blocks, Congressional Districts, County Subdivisions, Incorporated Places, State Legislative Districts, Urban Areas, Combined Statistical Areas, etc.). Requires a benchmark and vintage.
| Name | Required | Description | Default |
|---|---|---|---|
| layers | No | Comma-delimited list of layer IDs or names to include. Use "all" for all layers. Defaults to standard set including State, County, Tract, Block, Congressional Districts, etc. | |
| address | Yes | Full address on one line, comma-separated. Example: '101 Marietta St, Atlanta, GA, 30303' | |
| vintage | No | Vintage name or ID (default: "Current_Current"). Use list_vintages for options. | |
| benchmark | No | Benchmark name or ID (default: "Public_AR_Current") |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. It discloses the class of geography returned but says nothing about output shape, US-only scope, match-accuracy/no-match behavior, or rate limits. Additionally, 'Requires a benchmark and vintage' conflicts with the schema, where both are optional fields with defaults (Current_Current, Public_AR_Current), which could push an agent to supply parameters unnecessarily.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two front-loaded sentences: the core action first, prerequisites second. The long parenthetical layer list is informative rather than filler, though it is heavier than strictly necessary.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema and no annotations, the description should carry more of the return-value and caveat load. It communicates the domain of results (Census geographies) adequately but omits output structure, geographic coverage limits, and failure behavior for a geocode-plus-enrichment call.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all four parameters are already documented in the schema (including the layers enumeration and defaults). The description only echoes the layers concept and the benchmark/vintage mention, adding essentially no syntax or format detail beyond the schema. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Specific verb+resource: geocodes a one-line address AND returns the associated Census geographies, with an explicit enumeration of what geographies (States, Counties, Tracts, Blocks, CDs, etc.). The 'one-line address' phrasing distinguishes it from find_geographies_parsed and geocode_pr_address without needing to open either schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The 'one-line address' framing implies when this variant applies versus the parsed/PR siblings, and it flags that a benchmark and vintage are involved. However, it names no alternative explicitly and gives no guidance on when to choose find_geographies_oneline over geocode_oneline_address or find_geographies_coordinates.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
find_geographies_parsedA
Geocode a parsed US (stateside) address AND return associated Census geographies. At minimum, street and zip OR street, city, and state must be provided. Does NOT support Puerto Rico Urbanization/Municipio.
| Name | Required | Description | Default |
|---|---|---|---|
| zip | No | 5-digit ZIP code | |
| city | No | City name | |
| state | No | 2-letter state abbreviation | |
| layers | No | Comma-delimited list of layer IDs or names to include, or "all" | |
| street | Yes | House number and street name | |
| vintage | No | Vintage name or ID (default: "Current_Current") | |
| benchmark | No | Benchmark name or ID (default: "Public_AR_Current") |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must carry the behavioral load. It discloses the required input combination and the PR limitation, but says nothing about return shape, layer defaults, vintage/benchmark behavior, or error conditions for a 7-parameter query tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, zero filler. The core capability leads, the input precondition follows, and the exclusion is last.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 7-parameter tool with no annotations and no output schema, the description covers input requirements and one exclusion but omits return content, the role of layers/vintage/benchmark, and any default or pagination behavior.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so per-parameter meaning is already handled. The description still adds a cross-parameter constraint the schema cannot express: only 'street' is required in the schema, yet the description requires zip OR city+state alongside it. That is real added semantic value.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific compound verb+resource: geocode a parsed US address AND return Census geographies. The word 'parsed' cleanly separates it from find_geographies_oneline and find_geographies_coordinates, and 'geographies' separates it from geocode_parsed_address.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives a concrete input precondition (street + zip, or street + city + state) and an explicit exclusion (no Puerto Rico Urbanization/Municipio). It implies but does not name the sibling to use instead (find_geographies_oneline for unparsed input, find_geographies_pr for PR), so it falls just short of the top band.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
find_geographies_prB
Geocode a Puerto Rico address AND return associated Census geographies including Urbanization and Municipio information. To submit without Urbanization, provide at minimum street + zip OR street + city + state. To submit with Urbanization, provide at minimum street + urb + municipio.
| Name | Required | Description | Default |
|---|---|---|---|
| urb | No | Urbanization name | |
| zip | No | ZIP code (should begin with 006, 007, or 009) | |
| city | No | City name | |
| layers | No | Comma-delimited list of layer IDs or names to include, or "all" | |
| street | Yes | House number and street name | |
| vintage | No | Vintage name or ID (default: "Current_Current") | |
| benchmark | No | Benchmark name or ID (default: "Public_AR_Current") | |
| municipio | No | Municipio name |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It only states that it geocodes and returns geographies, omitting read-only nature, rate limits, accuracy, error handling, or output format. For a geocoding tool with zero annotation coverage, this is a significant gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with zero waste: the first front-loads the purpose and return content; the second specifies input requirements. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers purpose and input requirements adequately, but with no output schema and no annotations, it should describe return values and behavioral traits more fully. Missing when-to-use versus siblings and details about the returned geographies.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description meaningfully adds required combinations (street + zip OR street + city + state; or street + urb + municipio) beyond the schema, which only marks 'street' as required. This clarifies how to supply parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Geocode') and resource ('Puerto Rico address') and notes it returns census geographies, distinguishing it from geocode_pr_address. However, it does not explicitly name or differentiate from sibling find_geographies_oneline, find_geographies_parsed, or find_geographies_coordinates.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides minimum input combinations for submission, which is helpful, but offers no guidance on when to use this tool versus sibling find_geographies_* tools or geocode_pr_address. No exclusions or alternative selection criteria are given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
geocode_oneline_addressA
Geocode a single address provided as one line (e.g. '101 Marietta St, Atlanta, GA, 30303'). Returns matched address, interpolated coordinates, Tigerline ID, and address range components. Missing fields (city, state, ZIP) can be omitted or represented with commas.
| Name | Required | Description | Default |
|---|---|---|---|
| address | Yes | The full address on one line, comma-separated. Example: '4600 Silver Hill Rd, Washington, DC, 20233' | |
| benchmark | No | Benchmark name or ID (default: "Public_AR_Current"). Use list_benchmarks for options. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. It usefully discloses the return payload (matched address, interpolated coordinates, Tigerline ID, range components) but says nothing about error behavior for unmatched addresses, rate limits, or the benchmark default's effect. Geocoding is inherently read-only, so the omission of safety disclosure is less damaging than it would be for a mutation tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with the action, followed by return values. The inline example partially duplicates the schema's example, which is a small redundancy, but no sentence is wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description correctly compensates by enumerating the returned fields, and both parameters are documented in the schema. The main remaining gap is failure/edge-case behavior for addresses that do not match.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is already 100%, so the baseline is 3, but the description adds genuine meaning beyond the schema: missing city/state/ZIP fields may be omitted or represented by bare commas, which is not stated in the schema. The benchmark parameter is left entirely to the schema, keeping this short of a 5.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Geocode a single address provided as one line') and gives a concrete example. The 'single address / one line' framing implicitly separates it from batch_geocode_* and geocode_parsed_address, though it never names those siblings explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied: the 'one line' phrasing tells the agent this is for unparsed input, but there is no explicit when-to-use, when-not-to-use, or named alternative (e.g. geocode_parsed_address for structured fields). The note on omitted city/state/ZIP is format guidance, not routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
geocode_parsed_addressA
Geocode a single US (stateside) address with fields parsed into separate components. Returns matched address, interpolated coordinates, Tigerline ID, and address range components. At minimum, street and zip OR street, city, and state must be provided. Does NOT support Puerto Rico addresses with Urbanization/Municipio.
| Name | Required | Description | Default |
|---|---|---|---|
| zip | No | 5-digit ZIP code | |
| city | No | City name | |
| state | No | 2-letter state abbreviation | |
| street | Yes | House number and street name, e.g. '101 Marietta St' | |
| benchmark | No | Benchmark name or ID (default: "Public_AR_Current") |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full disclosure burden; it does well by listing the returned fields (matched address, interpolated coordinates, Tigerline ID, address range components) and the unsupported address type. It stops short of noting error behavior, network/auth requirements, or how unmatched addresses are reported.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, front-loaded with purpose, then input requirements, then the exclusion. Every sentence carries information an agent needs; nothing is wasted or repeated.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, and the description compensates by enumerating the returned components, so an agent knows what to expect back. Input requirements and the unsupported PR case are also covered, leaving no material gap for a single-address geocoder.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description goes beyond the schema by explaining the conditional combination requirement (street+zip vs street+city+state), which the schema alone only expresses as a single required 'street' field. It adds no detail on the benchmark parameter or coordinate precision.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (geocode) and resource (a single US address with fields parsed into separate components), which also differentiates it from the sibling geocode_oneline_address. The return payload (matched address, interpolated coordinates, Tigerline ID, range components) is named up front, so the agent knows exactly what this tool produces.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives concrete input conditions ('street and zip OR street, city, and state must be provided') and a negative scope boundary ('Does NOT support Puerto Rico addresses with Urbanization/Municipio'). It does not explicitly name the alternative tool to use for those PR cases (geocode_pr_address), so the routing is implied rather than stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
geocode_pr_addressA
Geocode a single Puerto Rico address with support for Urbanization and Municipio fields. To submit a PR address without Urbanization, provide at minimum street + zip OR street + city + state. To submit with Urbanization, provide at minimum street + urb + municipio. State is always PR.
| Name | Required | Description | Default |
|---|---|---|---|
| urb | No | Urbanization name, e.g. 'Urb San Juan' or 'San Juan' | |
| zip | No | ZIP code (should begin with 006, 007, or 009) | |
| city | No | City name | |
| street | Yes | House number and street name, e.g. '1234 Main St' | |
| benchmark | No | Benchmark name or ID (default: "Public_AR_Current") | |
| municipio | No | Municipio name |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description carries the full burden. It usefully discloses that state is always PR and the real field-combination requirements (beyond the schema's misleadingly minimal 'street only'), but says nothing about return values, match quality, or error behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three tight sentences, each earning its place, with the core purpose front-loaded and the input rules following immediately. No filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no annotations and no output schema, the description fully covers input requirements but leaves the return value undocumented. For a geocoding tool this is a moderate gap, though the standard geocode response makes it tolerable.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description adds genuine value the schema cannot express: the conditional dependency between parameters (street+zip OR street+city, or street+urb+municipio) and the implied constant 'state = PR' that is not even a schema property.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource ('Geocode a single Puerto Rico address') and names the distinguishing features (Urbanization, Municipio support). It differentiates itself by PR-specificity, though it does not explicitly contrast with siblings like geocode_parsed_address or geocode_oneline_address.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives concrete input-combination rules for two scenarios (with and without Urbanization), which implies how to invoke the tool. However, it never states when to prefer this tool over the sibling geocoders, nor any exclusions, so usage is only partially guided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_benchmarksB
List all available benchmarks for the Census Geocoder. A benchmark references a version of the MAF/TIGER locator database (e.g. Public_AR_Current, Public_AR_Census2020).
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. It only says it lists all available benchmarks; it does not state that this is a safe read-only operation, nor does it mention pagination, rate limits, or any auth requirements. The domain explanation is helpful but not behavioral disclosure.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two efficient sentences, front-loaded with the action, followed by a useful definition. Every sentence earns its place with no redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a parameterless list tool with no output schema, the description provides adequate domain context. It could be more complete by hinting at the return shape (e.g., a list of benchmark IDs) or any usage constraints, but it is sufficient for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Zero parameters, so per calibration the baseline is 4. There are no parameter semantics to document, and the description does not need to compensate for any gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('List') and resource ('benchmarks for the Census Geocoder'), and defines what a benchmark is with concrete examples. It does not explicitly differentiate from the sibling list_vintages, but the distinct resource makes confusion unlikely.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No when-to-use guidance, no alternatives named, no prerequisites or sequencing relative to the geocoding tools. The definition of a benchmark is domain context, not invocation guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_vintagesA
List all available vintages for a given benchmark. Vintages reference the Census geography version used for geoLookup (e.g. Current_Current, Census2020_Current). Required when using Find Geographies endpoints.
| Name | Required | Description | Default |
|---|---|---|---|
| benchmark | Yes | The benchmark name or numerical ID (e.g. "Public_AR_Current" or "4"). Use list_benchmarks to see available options. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden. It discloses what vintages represent and gives examples (Current_Current, Census2020_Current), but says nothing about return shape, ordering, or error behavior. For a simple input-driven lookup this is adequate but thin.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, front-loaded with the purpose, then definition, then the usage trigger. Every sentence carries information, with no redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter list tool with 100% schema coverage and no output schema, the description covers purpose, semantics, and when it is required. Only return-shape expectations remain unaddressed, which is minor here.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% β the schema already documents the benchmark parameter and points to list_benchmarks. The description adds no syntax or format guidance beyond what structured data provides, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource ('List all available vintages for a given benchmark') and clarifies what a vintage actually is. It is clearly distinguishable from the geocode/find_geographies siblings, though it does not explicitly name a sibling it is not.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly states the selection condition: vintages are 'Required when using Find Geographies endpoints,' which tells the agent exactly when this lookup matters. It stops short of naming alternatives or when-not-to-use conditions, but the core trigger is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
12 tool updates
v1.0.1- First observed
batch_geocode_geographies - First observed
batch_geocode_locations - First observed
batch_geolookup_coordinates - First observed
find_geographies_coordinates - First observed
find_geographies_oneline - First observed
find_geographies_parsed - First observed
find_geographies_pr - First observed
geocode_oneline_address - First observed
geocode_parsed_address - First observed
geocode_pr_address - First observed
list_benchmarks - First observed
list_vintages
TDQS
Scored across 12 tools
Tools follow a clear two-axis matrix: geocode (coordinates) vs find_geographies (geographies), crossed with input format (oneline/parsed/pr/coordinates) and batch variants. The oneline/parsed/pr trios return the same content for different address formats, so a careless agent could misselect, but descriptions clearly delineate input requirements and PR-specific handling.
Names are predominantly consistent snake_case verb_noun (geocode_oneline_address, find_geographies_pr, batch_geocode_locations). Minor inconsistencies exist (e.g. 'oneline' token placement and the batch_ prefix convention), but the pattern remains predictable and readable.
12 tools is well-scoped for a geocoding API. Each tool earns its place: catalog lookups, three address-format variants, a coordinate lookup, and three batch operations mirror the underlying Census endpoints without redundancy.
The surface covers the full lifecycle: benchmark/vintage discovery, single and batch geocoding, coordinate reverse geolookup, geography lookups, and all address formats including PR Urbanization/Municipio. No obvious dead ends for geocoding workflows.
Maintenance
Related MCP Connectors
Geocode, reverse geocode, and run Overpass spatial queries on OpenStreetMap data.
Geocode, reverse geocode, and run Overpass spatial queries on OpenStreetMap data.
Query US Census Bureau data: demographics, economics, and housing statistics.
Related MCP Servers
- FlicenseNot gradedqualityDmaintenanceEnables access to U.S. Census Bureau data including demographics, population, income, and housing statistics. Users can query specific variables, search datasets, and retrieve geographic FIPS codes across various surveys like the American Community Survey and Decennial Census.1-
- AlicenseAqualityDmaintenanceProvides forward/reverse geocoding, bounding box extraction, nearby places discovery, batch geocoding, route waypoints, and administrative boundary lookup using OpenStreetMap data.10Apache 2.0
- FlicenseNot gradedqualityDmaintenanceEnables access to US Census Bureau TIGERweb geographic boundary data, returning GeoJSON for states, counties, census tracts, places, ZCTAs, and congressional districts.1-
- AlicenseNot gradedqualityCmaintenanceProvides access to France's official keyless geocoding API (Base Adresse Nationale) for address lookup and reverse geocoding.2 npmMIT