← All BumiAtlas MCP endpoints

BumiAtlas MCP

Bhutan: NLCS land plots, thram records and state land

Bhutanese land plots from the National Land Commission Secretariat, as tools an AI assistant can call: find a plot by plotid, thram number or coordinates, read its land type, class and ownership type, 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/bhutan

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

Tools

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

BT_plot_search
Find Bhutanese land plots (NLCS cadastre) by plot id, thram number or location, with each plot's whole record. query takes a plotid (GNG-2522, LEO-1537), a thram (land record) number, an NHDCL housing plot or land-use certificate number, or coordinates as 'latitude, longitude' (e.g. 26.9046, 90.4004). A thram number repeats across gewogs: narrow it with dzongkhag and gewog. With coordinates it returns plots containing the point (distance 0), then the nearest within `radius` metres, closest first. Each plot has id, layers, area (m², from the outline), bbox and, where the cadastre covers it, dzongkhag, gewog, thram, ownership, isPrivate, landCategory (Rural/Urban), landType, plotClass, plotCategory and recordedAcres (with recordedArea in m²); stateLand lists surrendered or leased state land; housing has the NHDCL plot's thromde, plotNo, lucNo, status and structures. Set include_geometry for each boundary as GeoJSON (keep limit small). Use BT_plot_image to see a plot and its neighbours.
query*string
Plotid (GNG-2522), thram number, NHDCL plot or LUC number, or 'latitude, longitude'
dzongkhagstring
District name, to narrow a thram number (e.g. Sarpang)
gewogstring
Gewog name, to narrow a thram number
radiusnumber
Search radius in metres around coordinates(default 25)
limitinteger
Maximum results(default 20)
include_geometryboolean
Include each boundary as a GeoJSON MultiPolygon(default false)
BT_plot_image
A map image centred on a Bhutanese plot (id, the plotid from BT_plot_search) or a point (query), with every plot in view outlined and labelled with its plotid, so you can see which plot is where. The plot passed as id is drawn in red with a larger label; a query point is a red dot. Returns the plots in view as JSON (label, id, plot, area in m²; labelled: false where its label didn't fit), then one JPEG per basemap. 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. Plot outlines are yellow on imagery and magenta on maps. Imagery is not always aligned with the cadastre: offsets of several metres are possible in the mountains. 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
Plotid (e.g. GNG-2522), 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