← All BumiAtlas MCP endpoints

BumiAtlas MCP

Mozambique: DUATs, community land and SIDICA parcels

Mozambican land tenure as tools an AI assistant can call: the DUAT land-use rights, community delimitations and SIDICA community-land parcels at a point, communities by name, and DUATs on a map.

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/mozambique

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-mozambique https://bumiatlas.com/mcp/mozambique
ChatGPT
Settings → Apps & Connectors → Advanced → Developer mode, then Create with the URL and OAuth authentication.
Cursor
in ~/.cursor/mcp.json
{
  "mcpServers": {
    "bumiatlas-mozambique": {
      "url": "https://bumiatlas.com/mcp/mozambique"
    }
  }
}

Tools

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

MZ_land_search
Find Mozambican land rights at a point, communities by name, or SIDICA parcels by UPI, with each record whole. query takes coordinates as 'latitude, longitude' (e.g. -25.9692, 32.5732), a community name ('Nhamatanda'; lists matching delimitations, paged with offset), or, with upi set, a SIDICA parcel UPI. With coordinates it returns duats and parcels containing the point (distance 0), then the nearest within `radius` metres, closest first, and the communities containing the point. duats have id, provincia, distrito, sexo, finalidade, areaHa; communities have id, layer, comunidade, provincia, distrito, posto, localidade, areaHa; parcels have id, upi, villageCode, landuse, status, surveyed, comment; each with mapArea (m²) and bbox. Set include_geometry for boundaries as GeoJSON (keep limit small: communities are large). Use MZ_duat_image to see DUATs around a point.
query*string
'latitude, longitude', a community name, or a SIDICA UPI (with upi)
upiboolean
Read query as a SIDICA parcel UPI(default false)
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)
MZ_duat_image
A map image centred on a DUAT (id, from MZ_land_search's duats) or a point (query), with every DUAT parcel in view outlined and labelled with its stated purpose, so you can see which right is where. The DUAT passed as id is drawn in red with a larger label; a query point is a red dot. Returns the DUATs in view as JSON (label, id, finalidade, areaHa; labelled: false where its label didn't fit), then one JPEG per basemap. Rural DUATs are large: a radius of 300–1000 m often fits. 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. Outlines are yellow on imagery and magenta on maps. DUAT boundaries are often sketched, not surveyed: offsets of tens of 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
DUAT id (a uuid from MZ_land_search), 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