← All BumiAtlas MCP endpoints

BumiAtlas MCP

South Africa: Surveyor-General erven and farm portions

South African cadastral parcels from the Chief Surveyor-General, as tools an AI assistant can call: find an erf, farm portion or holding by number and region, farm name, SG key or coordinates, read its diagram and survey references, and see it on a map with its neighbours.

Server URL

Streamable HTTP with OAuth. The first time you connect, your client opens a browser window to sign in with Google; no API key needed.

https://bumiatlas.com/mcp/southafrica

Connect

Claude (claude.ai, desktop)
Settings → Connectors → Add custom connector, paste the URL, then Connect and sign in with Google.
Claude Code
claude mcp add --transport http bumiatlas-southafrica https://bumiatlas.com/mcp/southafrica
ChatGPT
Settings → Apps & Connectors → Advanced → Developer mode, then Create with the URL and OAuth authentication.
Cursor
in ~/.cursor/mcp.json
{
  "mcpServers": {
    "bumiatlas-southafrica": {
      "url": "https://bumiatlas.com/mcp/southafrica"
    }
  }
}

Tools

Tool names and descriptions are in English, which models understand best; your assistant still answers in your language.

ZA_parcel_search
Find South African cadastral parcels (Chief Surveyor-General) by number and region, farm name, SG key, or location, with each parcel's whole record. query takes an erf or parcel number with its registration region ('erf 13583 East London', '13583 East London'), a farm portion ('portion 11 of 930 Cape'), a bare number (every region's, paged with offset), a 26-character PRCL_KEY or 21-character SG id, or coordinates as 'latitude, longitude' (e.g. -33.9249, 18.4241). Set farm to search parent farms by name ('Waterval'). With coordinates it returns parcels containing the point (distance 0), then the nearest within `radius` metres, closest first. Each parcel has id, prclKey, sgId, type and typeName, parcelNo, portion, label, province, majRegion, minRegion, farmName, dsgNo, srNo, ssName, ssNo, lstatus, wstatus, updated, comments, area (m²), mapArea and bbox. Set include_geometry for each boundary as GeoJSON (keep limit small). Use ZA_parcel_image to see a parcel and its neighbours.
querystring
'erf 13583 East London', 'portion 11 of 930 Cape', an SG key, or 'latitude, longitude'
farmstring
Parent farm name or part of it (Waterval), instead of a query
radiusnumber
Search radius in metres around coordinates(default 25)
limitinteger
Maximum results(default 20)
offsetinteger
Skip this many matches of a number or name search, to page through them(default 0)
include_geometryboolean
Include each boundary as a GeoJSON MultiPolygon(default false)
ZA_parcel_image
A map image centred on a South African parcel (id, '<PRCL_KEY>:<type>' from ZA_parcel_search) or a point (query), with every parcel in view outlined and labelled with its CSG label (RE/13583), so you can see which parcel is where. The parcel passed as id is drawn in red with a larger label; a query point is a red dot. Returns the parcels in view as JSON (label, id, type, area in m²; labelled: false where its label didn't fit), then one JPEG per basemap. Erven and the farm portions under them overlap, so both are outlined. Basemaps: satellite (Esri World Imagery, often a few years old), hybrid (the same imagery with road and place names), streets and topo (Esri's street and topographic maps). Pass several to compare, e.g. ['satellite', 'streets'] to match buildings with street names. Parcel outlines are yellow on imagery and magenta on maps. Imagery is not always aligned with the cadastre: offsets of a few metres are possible. A scale bar is at bottom left. Labels are left off where they'd overlap; call again with a smaller radius to read them. Each image costs about as much context as 1,000 words, so ask for what you need.
idstring
Parcel id (EBUFC023000400013583000001:E), drawn in red
querystring
'latitude, longitude' to centre on instead of a parcel
radiusnumber
Metres from the centre to the image edge. Default: fits the parcel with a margin, or 80 m around a point
basemapsarray
One image per basemap(default ["satellite"])
sizeinteger
Image width and height in pixels(default 768)

Try asking

About the data