Koskamo

Boundary Atlas MCP

A free, open-source MCP server providing comprehensive US and Canadian geographic data including cities, ZIP codes, counties, legislative districts, and voting precincts. It enables agents to perform address lookups, cross-reference geographies with population weights, retrieve official representatives, and generate GeoJSON boundaries for mapping and analysis without requiring authentication.

Endpoint and access

No sign-in to connect and list tools. Individual tools may still need a vendor account, credentials, or permissions; check the documented prerequisites.

Boundary Atlas MCP logo, by Boundary AtlasCommunity listingStreamable HTTPNo sign-inEndpoint checked 2026-11-07Published by Boundary Atlas
MCP endpoint (Streamable HTTP)
https://atlas-production-d344.up.railway.app/mcp
Vendor documentation

What its tools do

11 tools, grouped by the hints the server advertises. Hints are self-declared, not verified behavior.

11 of 11 have a description · 11 of 11 declare behavior hints · 0 of 9 with parameters document them all

Checks and signals

Each line is separate evidence, not a trust score.

  • Passed Endpoint answered the live check ·
  • Availability 1 of 1 checks passed in 30 days

What you can do with it

  • Look up the city, county, and congressional district for a specific address
  • Cross-reference ZIP code data with cities or counties using population weights
  • Find elected officials and their contact information for a given location
  • Generate GeoJSON maps for cities, counties, or voting precincts

Source and maintenance

Community listingRegistry 0.2.0

Protocol and capabilities

Server
boundary-atlas 0.2.0
MCP protocol negotiated in check
2025-11-25
Tools
11 advertised
Resources
0 advertised
Resource templates
0 advertised
Prompts
0 advertised
Server-advertised capabilities
{
  "tools": {
    "listChanged": false
  },
  "prompts": {
    "listChanged": false
  },
  "resources": {
    "subscribe": false,
    "listChanged": false
  }
}

Server-provided instructions

Untrusted server output shown for inspection. It is not Koskamo guidance and is excluded from knowledge search.

Boundary Atlas: US and Canadian boundaries and lookups. Cities and towns (Census places), ZIP codes (Census ZCTAs), counties, towns and townships, congressional and state legislative districts (the maps in force for the Nov 3, 2026 election), voting precincts, and Canadian provinces, ridings and polling divisions. IDs look like '<cc>:<level>:<code>': 'us:state:34', 'us:county:34013' (FIPS), 'us:place:1714000' (Chicago), 'us:zcta:07102', 'us:congressional_district:3410', 'us:precinct:...' (the current precinct where a state publishes one, else the 2020 Census VTD; check `vintage`), 'us:vtd_2020:...' (2020 VTDs kept for historical joins), 'ca:province:35', 'ca:federal_electoral_district:35001'. What contains an address or point: geocode it, then locate_point. Find IDs by name with search_geographies. Cross between units with related_geographies (population shares: a ZIP's cities, counties and districts; a city's districts; level='zcta' lists the ZIPs in a city, county or district). Walk the hierarchy with list_children. Polygons: get_boundaries (GeoJSON; big sets come back as a download link, not inline). Every record carries its source, vintage and updated_at; call data_freshness before relying on precincts, which change between elections. lat/lon are internal points (inside the shape). Districts are not nested inside counties; their parent is the state. ZCTAs approximate USPS ZIP Codes.

Tools

11 advertised

search_geographies
Advertised by the server during the last successful anonymous check.
Advertised read-only

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').

search_geographies input schema
{
  "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
    }
  }
}
search_geographies annotations
{
  "readOnlyHint": true,
  "openWorldHint": false
}
get_geography
Advertised by the server during the last successful anonymous check.
Advertised read-only

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).

get_geography input schema
{
  "type": "object",
  "title": "get_geographyArguments",
  "required": [
    "id"
  ],
  "properties": {
    "id": {
      "type": "string",
      "title": "Id"
    }
  }
}
get_geography annotations
{
  "readOnlyHint": true,
  "openWorldHint": false
}
related_geographies
Advertised by the server during the last successful anonymous check.
Advertised read-only

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.

related_geographies input schema
{
  "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
    }
  }
}
related_geographies annotations
{
  "readOnlyHint": true,
  "openWorldHint": false
}
list_children
Advertised by the server during the last successful anonymous check.
Advertised read-only

Geographies directly under `id` (state -> counties and districts, county -> precincts and towns, province -> ridings). Filter with `level`; page with limit/offset (max 1000).

list_children input schema
{
  "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
    }
  }
}
list_children annotations
{
  "readOnlyHint": true,
  "openWorldHint": false
}
list_geographies
Advertised by the server during the last successful anonymous check.
Advertised read-only

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).

list_geographies input schema
{
  "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"
    }
  }
}
list_geographies annotations
{
  "readOnlyHint": true,
  "openWorldHint": false
}
nearest_geographies
Advertised by the server during the last successful anonymous check.
Advertised read-only

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.

nearest_geographies input schema
{
  "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
    }
  }
}
nearest_geographies annotations
{
  "readOnlyHint": true,
  "openWorldHint": false
}
data_freshness
Advertised by the server during the last successful anonymous check.
Advertised read-only

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.

data_freshness input schema
{
  "type": "object",
  "title": "data_freshnessArguments",
  "properties": {}
}
data_freshness annotations
{
  "readOnlyHint": true,
  "openWorldHint": false
}
coverage_summary
Advertised by the server during the last successful anonymous check.
Advertised read-only

What's in the atlas: row counts by country and level, with the vintage of each layer.

coverage_summary input schema
{
  "type": "object",
  "title": "coverage_summaryArguments",
  "properties": {}
}
coverage_summary annotations
{
  "readOnlyHint": true,
  "openWorldHint": false
}
get_boundaries
Advertised by the server during the last successful anonymous check.
Advertised read-only

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).

get_boundaries input schema
{
  "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
    }
  }
}
get_boundaries annotations
{
  "readOnlyHint": true,
  "openWorldHint": false
}
locate_point
Advertised by the server during the last successful anonymous check.
Advertised read-only

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).

locate_point input schema
{
  "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
    }
  }
}
locate_point annotations
{
  "readOnlyHint": true,
  "openWorldHint": false
}
find_officials
Advertised by the server during the last successful anonymous check.
Advertised read-only

Who represents a place: members of the U.S. House and Senate, state legislators and the mayor, with contacts. Give a geography `id` (a congressional district, state, city 'us:place:...', county, town or ZIP 'us:zcta:...') or a point (`lat`, `lon`; geocode an address first). For a city, county or ZIP that spans several districts, each representative comes with `share` = share of that area's 2020 residents in the district; for an exact answer use a point. Members listed are those serving now (119th Congress, until January 3, 2027); the districts are the 120th Congress maps elected November 3, 2026. In states that redrew for 2026 (AL, CA, FL, LA, NC, OH, TN, TX, UT) a representative's `note` says they were elected under the previous map. A district with no member is vacant. State legislators (state_legislators=True, except for a whole state, where pass it explicitly) come from Open States; members in states that redrew legislative maps for 2026 (MI, MN, MS) carry a similar note. Mayors (local=True) come from Open States (larger cities, while their term runs) or, failing that, Wikidata (one current head of government, in office since 2010; their `note` says to confirm on the city's website). Sources: the @unitedstates congress-legislators dataset (CC0), Open States (public domain), Wikidata (CC0). US only for now.

find_officials input schema
{
  "type": "object",
  "title": "find_officialsArguments",
  "properties": {
    "id": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "title": "Id",
      "default": null
    },
    "lat": {
      "anyOf": [
        {
          "type": "number"
        },
        {
          "type": "null"
        }
      ],
      "title": "Lat",
      "default": null
    },
    "lon": {
      "anyOf": [
        {
          "type": "number"
        },
        {
          "type": "null"
        }
      ],
      "title": "Lon",
      "default": null
    },
    "local": {
      "type": "boolean",
      "title": "Local",
      "default": true
    },
    "state_legislators": {
      "type": "boolean",
      "title": "State Legislators",
      "default": true
    }
  }
}
find_officials annotations
{
  "readOnlyHint": true,
  "openWorldHint": false
}

Prompts

0 advertised

No prompt definitions available.

Resources

0 advertised

No resource definitions available.

90-day uptime

A lightweight connection check about every six hours, sampled on hosts with many listings. It shows the server answered, not that its tools work.

Too few checks for a percentage yet (1 of 1 answered).

  1. 2026-11-07: 1 of 1 checks answered

30-day availability

Aggregated from read-only remote checks; this is not a tool-execution or security guarantee.

Successful checks
1 of 1 (100%)
Average latency
1247 ms
95th percentile latency
1247 ms

Maintenance history

Public check and source-refresh events. Editorial and ownership records remain private.

  • · probe · passed · 1247 ms · metadata changed · 11 tool(s), 0 resource(s), 0 resource template(s), 0 prompt(s)

Connect from your client

Each snippet registers the same endpoint; pick the client you use.

This server is operated by the named third party. Listing and endpoint checks are not an endorsement or a security audit. Review the operator's permissions, terms, and data handling before connecting. How listings are checked and corrected.

Claude Code

Run this once in a terminal. It registers the remote server. Use --scope project to write .mcp.json for the repo.
Claude Code configuration
claude mcp add --transport http boundary-atlas-mcp https://atlas-production-d344.up.railway.app/mcp

Codex

Run this once. Codex stores MCP servers in ~/.codex/config.toml (or .codex/config.toml in a trusted project).
Codex configuration
codex mcp add boundary-atlas-mcp --url https://atlas-production-d344.up.railway.app/mcp

Cursor

Merge this server into .cursor/mcp.json in your project, then enable boundary-atlas-mcp in your MCP settings.
Cursor configuration
{
  "mcpServers": {
    "boundary-atlas-mcp": {
      "url": "https://atlas-production-d344.up.railway.app/mcp"
    }
  }
}

Cline

Merge this into cline_mcp_settings.json (Cline → MCP Servers → Configure).
Cline configuration
{
  "mcpServers": {
    "boundary-atlas-mcp": {
      "type": "streamableHttp",
      "url": "https://atlas-production-d344.up.railway.app/mcp",
      "disabled": false
    }
  }
}

VS Code

Merge this server into .vscode/mcp.json. Use MCP: List Servers to start boundary-atlas-mcp and inspect its tools.
VS Code configuration
{
  "servers": {
    "boundary-atlas-mcp": {
      "type": "http",
      "url": "https://atlas-production-d344.up.railway.app/mcp"
    }
  }
}

Gemini CLI

Run this once. It writes .gemini/settings.json in the current project; pass --scope user for ~/.gemini/settings.json.
Gemini CLI configuration
gemini mcp add --transport http boundary-atlas-mcp https://atlas-production-d344.up.railway.app/mcp

Claude Desktop

Open Claude Settings > Connectors > Add custom connector, enter this server URL and enable it for the conversation. This is a manual remote-connector handoff, not a desktop JSON configuration.
Claude Desktop configuration
https://atlas-production-d344.up.railway.app/mcp

Windsurf

Merge this into ~/.codeium/windsurf/mcp_config.json, then refresh MCP in Cascade. Windsurf remote servers use serverUrl, not url.
Windsurf configuration
{
  "mcpServers": {
    "boundary-atlas-mcp": {
      "serverUrl": "https://atlas-production-d344.up.railway.app/mcp"
    }
  }
}

Let your agent find its tools

Find servers like Boundary Atlas MCP from your agent. Add Koskamo once to search the index for endpoints, access requirements, and client setup. Public discovery needs no key.