← All BumiAtlas MCP endpoints

BumiAtlas MCP

Singapore: SLA land lots and URA Master Plan zoning

Every cadastral lot in Singapore from SLA, and URA's Master Plan 2025 land use and gross plot ratio, as tools an AI assistant can call: find a lot by its number or a coordinate, and see what the Master Plan allows there.

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

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

Tools

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

SG_lot_search
Find Singapore land lots (SLA cadastre) by lot number or location. query takes a lot key (MK26-95333A), a lot as titles write it (Lot 95333A MK26), a lot number with its district but no check letter (MK26 95333), a lot number with its check letter but no district (95333A, matches in several districts), or coordinates as 'latitude, longitude' (e.g. 1.2834, 103.8607). With coordinates it returns the lots containing the point (distance 0), then the nearest within `radius` metres, closest first. To search an address or postal code, geocode it first; a radius of 25–100 m helps with geocoded points. Each lot has id (the lot key), district, districtName (historical mukim or town subdivision name, where known), lot, area (m²) and bbox. Use SG_lot_get with an id for the zoning and boundary.
query*string
Lot key (MK26-95333A), 'Lot 95333A MK26', 'MK26 95333', '95333A', or 'latitude, longitude'
radiusnumber
Search radius in metres around coordinates(default 25)
limitinteger
Maximum results(default 20)
SG_lot_get
One Singapore lot by its lot key (id from SG_lot_search, e.g. MK26-95333A; 'Lot 95333A MK26' works too): district and its name, lot, area (m², computed by SLA), perimeter (m), updated (when SLA last changed the lot) and zona, the Master Plan 2025 zones covering it, largest share first: landUse, gpr or gprCode, and share of the lot (0–1). Zones covering under 5% of the lot are left out, since zone and lot boundaries come from different surveys. Set include_geometry for the boundary as GeoJSON.
id*string
Lot key, e.g. MK26-95333A
include_geometryboolean
Include the boundary as a GeoJSON MultiPolygon(default false)
SG_land_use_get
URA Master Plan 2025 land-use zoning at a location in Singapore, or one zone by id. Pass query as 'latitude, longitude' (e.g. 1.2834, 103.8607), or id. Each zone has id, landUse (URA's class, e.g. RESIDENTIAL, COMMERCIAL & RESIDENTIAL, BUSINESS 1, WHITE), gpr (gross plot ratio) or gprCode (LND landed housing, EVA subject to evaluation, SDP undefined), whiteMax (max % of floor area for white uses, on BUSINESS PARK - WHITE sites), businessGprMin (min GPR for business use, on BUSINESS 1/2 - WHITE sites), area (m², the whole zone polygon) and updated (when URA last changed it). Empty fields are left out. The Master Plan covers all of Singapore, so an empty result usually means the point is at sea. Where polygons overlap, more than one zone is returned, smallest first.
querystring
'latitude, longitude'
idinteger
Zone id
include_geometryboolean
Include each zone's boundary as a GeoJSON MultiPolygon(default false)
SG_lot_image
A map image centred on a Singapore lot (id, the lot key from SG_lot_search) or a point (query), with every lot in view outlined and labelled with its lot number (e.g. 95333A), so you can see which lot is where. The lot passed as id is drawn in red with a larger label; a query point is a red dot. Returns the lots in view as JSON (label: the lot number, with /2 on a number repeated from another district; id (lot key), district, lot, 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. Lot 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
Lot key from SG_lot_search (e.g. MK26-95333A), 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