protogrid

Search / io.github.TaltonFiggins/boundary-atlas

Boundary Atlas

R0· no sign-in

US/Canada boundaries: cities, ZIPs, counties, districts, precincts. Lookups, crosswalks, GeoJSON.

v0.2.1 · active · website · descriptor JSON · versions

An agent can connect right now, no human step.Remote endpoint, no authentication, reachable on the last probe.
Quality84good
Trust80of 100
Uptime, 30 days100%
Latency p50242 ms

Connect

8 clients · secrets stay placeholders
{
  "mcpServers": {
    "boundary-atlas": {
      "type": "http",
      "url": "https://boundarymcp.com/mcp"
    }
  }
}
claude mcp add --transport http boundary-atlas https://boundarymcp.com/mcp
[mcp_servers.boundary-atlas]
url = "https://boundarymcp.com/mcp"
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "boundary-atlas": {
      "type": "remote",
      "url": "https://boundarymcp.com/mcp",
      "enabled": true
    }
  }
}
{
  "mcpServers": {
    "boundary-atlas": {
      "type": "http",
      "url": "https://boundarymcp.com/mcp"
    }
  },
  "deeplink": "cursor://anysphere.cursor-deeplink/mcp/install?name=boundary-atlas&config=eyJ0eXBlIjoiaHR0cCIsInVybCI6Imh0dHBzOi8vYm91bmRhcnltY3AuY29tL21jcCJ9"
}
{
  "servers": {
    "boundary-atlas": {
      "type": "http",
      "url": "https://boundarymcp.com/mcp"
    }
  }
}
{
  "mcpServers": {
    "boundary-atlas": {
      "httpUrl": "https://boundarymcp.com/mcp"
    }
  }
}
extensions:
  "boundary-atlas":
    enabled: true
    name: "boundary-atlas"
    type: streamable_http
    uri: "https://boundarymcp.com/mcp"
    timeout: 300

Quality 84 / 100good

protocol88 · weight 25
  • pass
    protocol.modernsupports 2026-07-28 (server/discover)
  • pass
    protocol.statelessanswers without a session
  • pass
    protocol.transportstreamable HTTP
  • warn
    protocol.list_ttltools/list declares ttlMs 0, so clients re-fetch it on every use
authorizationn/a · weight 15
  • n/a
    auth.prm, auth.as_metadata, auth.cimdno remote uses OAuth
  • n/a
    auth.secret_in_urlno templated URL
tool hygiene81 · weight 30
  • pass
    tools.descriptionsevery tool has a description
  • warn
    tools.description_length3 tools have descriptions over 1,024 characters, which crowds the context
  • pass
    tools.schemasevery tool has an object input schema
  • pass
    tools.annotations11 of 11 tools declare readOnlyHint or destructiveHint
  • fail
    tools.directory_hintsno tool declares all four of readOnlyHint, destructiveHint, idempotentHint and openWorldHint; missing: coverage_summary (destructiveHint, idempotentHint); data_freshness (destructiveHint, idempotentHint); get_geography (destructiveHint, idempotentHint); …
  • pass
    tools.token_costabout 2,639 tokens to load every tool
  • pass
    tools.api_dumptools are not a one-to-one API dump
  • pass
    tools.hidden_textno hidden text in tool names, descriptions, schemas or annotations
stability83 · weight 15
  • warn
    stability.changes12 tool changes in 30 days
  • pass
    stability.rug_pullno tool changed its meaning under the same name
  • pass
    stability.new_linksno tool change named a new site
dependenciesn/a · weight 15
  • n/a
    deps.known_vulns, deps.mcp_sdk_version, deps.resolvableno npm or PyPI package

11 tools, about 2,639 tokens to load them all · tool set de30e54ae5af · tools last changed 2026-11-07 · checked 2026-11-14 07:03 UTC

Tool changes

  • find_officialschangedtitle
  • locate_pointchangedtitle
  • get_boundarieschangedtitle
  • coverage_summarychangedtitle
  • data_freshnesschangedtitle
  • nearest_geographieschangedtitle
  • list_geographieschangedtitle
  • list_childrenchangedtitle
  • related_geographieschangedtitle
  • get_geographychangedtitle

Showing the latest 10. Full history: list_changes · trend: quality JSON.

Checks run on what our credential-free, read-only probes observe; tools are never called and no code audit is performed. How it is computed.

Trust 80 / 100

no-repository
provenance45
liveness100
freshness100
hygiene80

+website +reachable +uptime-100% +updated-6d-ago -no-repository

Derived from observable signals (official registry feed and our own credential-free probes); no code audit performed. How it is computed.

Endpoints

remoteauthreachableuptime 30dp50protocollast ok
https://boundarymcp.com/mcp streamable-httpnoneyes100%242 ms2026-07-282026-11-14

Tools (11)

coverage_summaryread-onlyWhat's in the atlas: row counts by country and level, with the vintage of each layer.
data_freshnessread-onlyWhen 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.
find_officialsread-onlyWho 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), of cities and, where towns and townships are the local government (NJ, PA, NY, New England, MI, MN, WI), of those too, 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.
get_boundariesread-onlyPolygon 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_geographyread-onlyFull 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).
list_childrenread-onlyGeographies directly under `id` (state -> counties and districts, county -> precincts and towns, province -> ridings). Filter with `level`; page with limit/offset (max 1000).
list_geographiesread-onlyEvery 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).
locate_pointread-onlyWhich 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).
nearest_geographiesread-onlyGeographies 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.
related_geographiesread-onlyLinks 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.
search_geographiesread-onlyFind 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').

Schemas: list_tools.

Similar MCP servers

Official server.json
{
  "name": "io.github.TaltonFiggins/boundary-atlas",
  "title": "Boundary Atlas",
  "$schema": "https://static.modelcontextprotocol.io/schemas/2025-12-11/server.schema.json",
  "remotes": [
    {
      "url": "https://boundarymcp.com/mcp",
      "type": "streamable-http"
    }
  ],
  "version": "0.2.1",
  "websiteUrl": "https://boundarymcp.com/",
  "description": "US/Canada boundaries: cities, ZIPs, counties, districts, precincts. Lookups, crosswalks, GeoJSON."
}