US/Canada boundaries: cities, ZIPs, counties, districts, precincts. Lookups, crosswalks, GeoJSON.
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.
What's in the atlas: row counts by country and level, with the vintage of each layer.
This tool takes no arguments.
Pick your client. Values in capitals, like YOUR_TOKEN, are yours to fill in.
Run in a terminal
claude mcp add --transport http boundary-atlas https://atlas-production-d344.up.railway.app/mcp
What's in the atlas: row counts by country and level, with the vintage of each layer.
No arguments.
{
"type": "object",
"title": "coverage_summaryArguments",
"properties": {}
}When each upstream dataset was last fetched and checked, what period it describes (vintage), how often it is re-checked, and whether it is overdue. Includes the recent refresh history.
No arguments.
{
"type": "object",
"title": "data_freshnessArguments",
"properties": {}
}Polygon boundaries as a GeoJSON FeatureCollection (EPSG:4326, RFC 7946 winding), for drawing dashboard maps. id: the geography to draw, e.g. 'us:county:34013'. children_level: draw everything at that level inside it instead, e.g. every 'precinct' in a county or state, every 'county' in a state, every 'polling_division' in a riding, or every 'precinct' overlapping a congressional district (any share; use related_geographies for shares). detail: 'high' (~10 m), 'medium' (~50 m, default) or 'low' (~200 m). Neighbouring shapes from the same source share identical edges at every detail level. clip_to_land: trim open water (ocean, bays, Great Lakes) using the state/province shoreline outline (default true; inland lakes are not trimmed; shorelines are generalized to ~1:500k, widened ~200 m so land isn't cut); false gives legal extents. include_districts: add each feature's congressional / state senate / state house district holding the largest share of its population. Feature properties: id, level, code, name, parent_id, region, population (2020 Census for precincts and towns, latest estimate for counties and states), vintage and source_id (2020 Census VTDs have source_id 'us-census-vtd-2020'; current precincts don't), shape_source. Small results come back inline as `geojson`. Larger ones are not returned inline (they'd flood the conversation): the hosted service returns a short-lived `download_url` (fetch it with curl into your project); a local server writes the file to its own export folder and returns `file` (copy it into your project). Page big selections with offset/limit (max 5000 features).
| Argument | Type | Description |
|---|---|---|
| id* | string | |
| limit | integer | |
| detail | string | |
| offset | integer | |
| clip_to_land | boolean | |
| inline_max_kb | integer | |
| children_level | any | |
| include_districts | boolean |
{
"type": "object",
"title": "get_boundariesArguments",
"required": [
"id"
],
"properties": {
"id": {
"type": "string",
"title": "Id"
},
"limit": {
"type": "integer",
"title": "Limit",
"default": 2000
},
"detail": {
"type": "string",
"title": "Detail",
"default": "medium"
},
"offset": {
"type": "integer",
"title": "Offset",
"default": 0
},
"clip_to_land": {
"type": "boolean",
"title": "Clip To Land",
"default": true
},
"inline_max_kb": {
"type": "integer",
"title": "Inline Max Kb",
"default": 100
},
"children_level": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Children Level",
"default": null
},
"include_districts": {
"type": "boolean",
"title": "Include Districts",
"default": false
}
}
}Full record for one geography: attributes, parent chain up to the country, child counts by level, and the source it came from (licence, vintage, last fetched).
| Argument | Type | Description |
|---|---|---|
| id* | string |
{
"type": "object",
"title": "get_geographyArguments",
"required": [
"id"
],
"properties": {
"id": {
"type": "string",
"title": "Id"
}
}
}Geographies directly under `id` (state -> counties and districts, county -> precincts and towns, province -> ridings). Filter with `level`; page with limit/offset (max 1000).
| Argument | Type | Description |
|---|---|---|
| id* | string | |
| level | any | |
| limit | integer | |
| offset | integer |
{
"type": "object",
"title": "list_childrenArguments",
"required": [
"id"
],
"properties": {
"id": {
"type": "string",
"title": "Id"
},
"level": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Level",
"default": null
},
"limit": {
"type": "integer",
"title": "Limit",
"default": 200
},
"offset": {
"type": "integer",
"title": "Offset",
"default": 0
}
}
}Every geography at one level, optionally within one state/province, e.g. all congressional districts in 'NJ' or all federal ridings in 'ON'. Page with limit/offset (max 1000).
| Argument | Type | Description |
|---|---|---|
| level* | string | |
| limit | integer | |
| offset | integer | |
| region | any | |
| country* | string |
{
"type": "object",
"title": "list_geographiesArguments",
"required": [
"country",
"level"
],
"properties": {
"level": {
"type": "string",
"title": "Level"
},
"limit": {
"type": "integer",
"title": "Limit",
"default": 500
},
"offset": {
"type": "integer",
"title": "Offset",
"default": 0
},
"region": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Region",
"default": null
},
"country": {
"type": "string",
"title": "Country"
}
}
}Which geographies contain a point: precinct, county, town, congressional and state legislative districts in the US; province, census division and subdivision, federal riding, polling divisions and provincial districts in Canada. Point-in-polygon on stored boundaries (simplified to ~10 m, so a point within ~10 m of a line can land on either side). Geocode an address to lat/lon first. levels: restrict to some levels (default: all except 'vtd_2020'). If a point is just outside every shape of a level that its state/province has (a pier, a beach, a gap between precinct files), it is matched to the nearest shape of that level in the same state/province within ~1 km and flagged approximate=true with distance_m. not_found lists levels the state/province has data for but no shape here; no_data lists levels with no boundaries there at all (e.g. Nebraska has no state house; Ontario has no provincial polling divisions here).
| Argument | Type | Description |
|---|---|---|
| lat* | number | |
| lon* | number | |
| levels | any |
{
"type": "object",
"title": "locate_pointArguments",
"required": [
"lat",
"lon"
],
"properties": {
"lat": {
"type": "number",
"title": "Lat"
},
"lon": {
"type": "number",
"title": "Lon"
},
"levels": {
"anyOf": [
{
"type": "array",
"items": {
"type": "string"
}
},
{
"type": "null"
}
],
"title": "Levels",
"default": null
}
}
}Geographies at `level` whose internal point is closest to (lat, lon). This is a nearest-point approximation, not point-in-polygon. To find the geography containing a point, use locate_point.
| Argument | Type | Description |
|---|---|---|
| lat* | number | |
| lon* | number | |
| level* | string | |
| limit | integer |
{
"type": "object",
"title": "nearest_geographiesArguments",
"required": [
"lat",
"lon",
"level"
],
"properties": {
"lat": {
"type": "number",
"title": "Lat"
},
"lon": {
"type": "number",
"title": "Lon"
},
"level": {
"type": "string",
"title": "Level"
},
"limit": {
"type": "integer",
"title": "Limit",
"default": 5
}
}
}Links between geographies that overlap without nesting, with population shares. Districts: for a precinct, county, town, city (place) or ZIP, the congressional, state senate and state house districts it falls in; for a district, the precincts, counties, towns, cities or ZIPs inside it (filter with `level`, e.g. 'precinct'). A city ('us:place:1714000') also lists its counties. A ZIP ('us:zcta:07102') lists the cities, counties, towns, precincts and districts it overlaps. Ask for `level='zcta'` on a city, county, town or district to list the ZIP codes in it. `weight` is the share of the smaller unit's 2020 population inside the other (for a ZIP, the share of the ZIP's residents in each unit; 0 for parts with land but no residents). relation 'within' means wholly inside (1.0), 'overlaps' means split, 'approximate' means the unit was too small to contain any 2020 block's internal point and was placed by the nearest block. Use min_weight to drop slivers. ZCTAs approximate USPS ZIP Codes.
| Argument | Type | Description |
|---|---|---|
| id* | string | |
| level | any | |
| limit | integer | |
| offset | integer | |
| min_weight | number |
{
"type": "object",
"title": "related_geographiesArguments",
"required": [
"id"
],
"properties": {
"id": {
"type": "string",
"title": "Id"
},
"level": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Level",
"default": null
},
"limit": {
"type": "integer",
"title": "Limit",
"default": 500
},
"offset": {
"type": "integer",
"title": "Offset",
"default": 0
},
"min_weight": {
"type": "number",
"title": "Min Weight",
"default": 0
}
}
}Find geographies by name, e.g. 'Essex County', 'Newark ward 5', 'Toronto Centre'. country: 'US' or 'CA'. level: one of the levels from coverage_summary (e.g. 'county', 'precinct', 'congressional_district', 'federal_electoral_district'). region: USPS state or province code ('NJ', 'ON').
| Argument | Type | Description |
|---|---|---|
| level | any | |
| limit | integer | |
| query* | string | |
| region | any | |
| country | any |
{
"type": "object",
"title": "search_geographiesArguments",
"required": [
"query"
],
"properties": {
"level": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Level",
"default": null
},
"limit": {
"type": "integer",
"title": "Limit",
"default": 20
},
"query": {
"type": "string",
"title": "Query"
},
"region": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Region",
"default": null
},
"country": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Country",
"default": null
}
}
}We read every tool's name, description and inputs the way the model will, looking for instructions hidden from you. A clean result means no warning signs, not a guarantee. Scanned Nov 6, 2026.