AtlasFetch MCP is an MCP server for the AtlasFetch service that turns reverse geocoding, street lookup, geofencing, and route planning into tools AI assistants can call directly. Its purpose is to let models answer location questions through real point-in-polygon queries rather than from memory.
Uses
- Reverse geocoding to administrative areas: resolve coordinates into country, region, and municipality, returning ISO 3166 codes.
- Street lookup: after optionally enabling the street layer, answers also include the nearest street and, where mapped, the house number; this layer is global, must be enabled explicitly, and is not part of the default country/region/municipality response.
- Geofencing: match your own GeoJSON boundary sets against coordinates or routes, for delivery areas, service areas, jurisdiction and zone checks, tagging location data with zone codes, and more.
- Address geocoding: convert addresses into coordinates, supporting either a single-line input or already split address components.
- Routes: get_route returns distance, duration, and turn-by-turn steps between 2 to 25 coordinates, supporting four modes: car, bike, foot, and truck.
Main capabilities and points to note
- Reverse geocoding results always provide three answers, corresponding to search radii of 5 meters, 20 meters, and unlimited distance, because the "nearest street" depends on how far you are willing to search.
- The two kinds of null mean different things: "street": null means the country has no street data; while null fields in an entry mean there are no results within that radius. streetNumber and postcode are strings (such as 44A, 12-14, 0181), and house numbers are rare outside well-mapped areas.
- Read address precision clearly before using it: address means a house; interpolated means estimated between the house numbers on either side; intersection means a street corner; site means a named place such as a shopping mall, office park, or hospital (you need to relay the shop or unit number to the driver); street means the street is correct but it is not a house; locality means only a suburb. Result rows give the API's own delivery guidance: dispatch only on house, street corner, or unambiguous site-level results; for street-level results, ask the recipient for a location; when ambiguous, ask the customer. In South Africa, most answers are street-level, because about 13% of street names in OpenStreetMap include house numbers.
- Route calFee: A route consumes 10 query credits, not 1, and everything returned is included.
- Route duration is free-flow duration, i.e. the road network runs at its own speed limits, without real-time or historical traffic data, so it is not an ETA. If you need an ETA, you should use a traffic-aware service.
- Route geometry is off by default (geometry: "none"). Encoded polylines have thousands of characters and assistants cannot read them; only request polyline6 or geojson when you need to draw them.
- How custom areas are used in routes: avoidSets specifies the boundary sets to detour around; exposureSets specifies the sets to measure, does not change the route, and only reports the number of meters the route is within each area. If an area contains a point on the route, the route cannot avoid that area, and the system will skip it and explain this in the answer.
- Plan limits: the free plan allows 2 locations, Pro allows up to 25 locations; truck is Pro only; alternative routes must have exactly 2 locations. Exceeding the limit returns 403 and is not billed; a location with no nearby road returns 422 and is billed, because the route was attempted.
- Address geocoding: geocode_address handles one address per call, costing 1 query credit each time, whether or not it is found. This is intentional: when a delivery list is processed line by line, you can see each consumption. Programs with thousands of lines should call the API's POST /geocode/batch directly. Currently only South Africa is supported.
How to use
Node 20 or newer is required. Add the server to your MCP configuration (such as claude_desktop_config.json, .cursor/mcp.json, or the corresponding file for your client).
Try it without registering: when no key is provided, it falls back to a shared public demo key, with a combined monthly limit of 1,000 queries for all anonymous users across the entire site. The demo key is shared by every anonymous user on the internet, with only one pooled quota and rate limit, making it suitable for a first experience but not for any production use.
Create your own key: create one at atlasfetch.xyz/dashboard and set ATLASFETCH_API_KEY. The free Personal plan requires no credit card. You can copy the key from the dashboard at any time, so restrict it there to your own domain. Keys created before October 12, 2026 have been revoked; if your key stops working, copy a valid one.
There are two things that are easy to find surprising:
- Municipal is the finest available unit, but it is not a consistent type of thing. Los Angeles returns a city; rural Kansas returns a county; some places return a district. When a country's fine level is incomplete, a coarser complete level answers instead, because for most purposes a county is better than null. Do not assume that the value necessarily names a city.
- There is no way from here to make a new boundary set queryable. Sets are closed when created, and no key is granted, while authorization is addressed by API key id and can only be listed by a logged-in browser session. Therefore this server can create a set and populate it, but the final step must be completed in the dashboard. create_boundary_set will state this in the response, rather than leaving behind a set that silently matches nothing.
Billing basis: one query or one geocoded address counts as one query; under the standard plan, one route counts as 10. A query is counted only once, no matter how many layers, sets, or grid codes it touches. Metering happens before matching, so a query that matches nothing is still counted. Requests rejected as invalid or rate-limited are not billed.
Use cases
- Reverse geocoding to administrative areas.
- Finding out which street a point is on.
- Geofencing against your own delivery areas or service areas.
- Jurisdiction and area checks.
- Tagging location data with area codes.
- Geocoding delivery addresses in South Africa.
- Planning routes that avoid specified areas.
Limitations
- As of now, neither reverse geocoding nor address geocoding supports areas outside South Africa.
- Searching for places by name, traffic-aware ETA, distance matrix, isochrones, map tiles, and downloading boundary geometry are not supported.
- Route durations do not include traffic data and cannot be used as an ETA.
- New boundary sets cannot be made queryable directly from this server; the final step must be completed in the dashboard.
- The demo key is a site-wide shared pooled quota and is not suitable for production use.
Other information
This server uses the MIT license. Reference boundaries are derived from OpenStreetMap under ODbL, and the attribution and share-alike obligations pass through to you. The coordinates you query are not stored. Documentation, the OpenAPI specification, llms.txt, and a Playground that requires no signup are available on its site.