loading…
Search for a command to run...
loading…
Description: Query India's open geo data in natural language. 8 tools: list layers, inspect schemas, filter/group any column, point-in-polygon locate, spatial p
Description: Query India's open geo data in natural language. 8 tools: list layers, inspect schemas, filter/group any column, point-in-polygon locate, spatial proximity search, downloads in 5 formats. Covers admin boundaries (state to village), city wards, forests, rivers, dams, hospitals, highways, airports, and more.
ci license: MIT v1.0 uptime Lighthouse: 98+ npm
A visual catalog, REST API, MCP server, drag-drop verifier, and anonymous contribution flow for India's geo data. Admin boundaries from state to village, plus community-submitted layers under open licences.
Live: https://bharatlas.com
bharatlas — India's open atlas
/view/<id>): curated layer with per-layer OG card./c/<id>): community submission, edge-rendered HTML, 👍 useful vote, per-submission OG card./embed/<id>): iframe + PNG export from any map./api/v1): REST list, query, filter, group_by any layer; locate (point-in-polygon across all layers); nearby (tile-based spatial proximity).npx bharatlas-mcp): 8 tools for LLMs: list, schema, query, locate, nearby, categories, submissions, downloads.web/: Vanilla TypeScript + Vite viewer + Cloudflare Pages Functions (web/functions/).web/migrations/: D1 SQL migrations: submissions, tokens, ratings, votes, originals.web/tests/: vitest unit tests for pure functions (validators, tokens, view rendering, votes).scripts/fetch.sh: Pulls parquets + PMTiles from yashveeeeeeer/india-geodata releases.scripts/extract_per_state.py: Slices pan-India parquets into per-state GeoJSON via DuckDB-spatial.scripts/bake_whole_layer.py: Bakes whole-layer GeoJSON / KML / Shapefile per curated layer (parquet ≤ 100 MB).scripts/upload_r2.sh: Mirrors sources/ + data/ to Cloudflare R2 via wrangler.scripts/upload_baked.py: Pushes data/baked/* to R2 via boto3 (S3-compat fallback when wrangler is unavailable).scripts/admin/cleanup_submission.sh: Delete community submissions by name pattern (R2 + D1).mcp/: MCP server for LLMs (npm). 8 tools: list, schema, query, locate, nearby, categories, submissions, downloads.catalog.json: Curated-layer index used by the viewer. Single source of truth.Large data files (sources/, data/) are not in git — they live in R2. See scripts/fetch.sh to rebuild locally.
web/functions/), running REST API v1, submit, vote, sitemap, edge-rendered /c/<id>main# clone + viewer-only dev (no submissions, no D1)
git clone [email protected]:urbanmorph/geodata.git
cd geodata/web
npm install
npm run dev # http://localhost:5173
npm test
For the full submission flow (D1 + R2 + Turnstile + Pages Functions), read wrangler.toml + .dev.vars.example.
REST: https://bharatlas.com/api/v1 — no API key, rate-limited per IP. Full docs at bharatlas.com/docs.
# list every catalog layer (curated + accepted community)
curl 'https://bharatlas.com/api/v1/layers'
# inspect a layer's schema before querying
curl 'https://bharatlas.com/api/v1/layers/lgd_districts/schema'
# filter + group: how many districts per state?
curl 'https://bharatlas.com/api/v1/layers/lgd_districts/query?group_by=stname'
# point-in-polygon: every admin boundary at (lat, lng)
curl 'https://bharatlas.com/api/v1/locate?lat=12.9716&lng=77.5946'
# nearest features within a radius
curl 'https://bharatlas.com/api/v1/nearby?lat=12.9716&lng=77.5946&layer=nic_health&radius_km=10'
MCP for LLMs (Claude, GPT, Gemini, Cursor): one-line install, 8 tools. Setup at bharatlas.com/mcp.
# Claude Code
claude mcp add bharatlas npx bharatlas-mcp
# Claude Desktop / other clients (claude_desktop_config.json)
{ "mcpServers": { "bharatlas": { "command": "npx", "args": ["bharatlas-mcp"] } } }
main: git checkout -b feat/short-nameweb/functions/lib/*. Pure functions are tested via vitest in web/tests/.npm test and npm run build both pass.main. CI runs tests + build automatically.Commit messages: short subject, body explains why not what. Examples in git log.
Report vulnerabilities to [email protected] instead of opening a public issue. Acknowledgement within 72 hours.
Code: MIT. Data: each layer carries its own open licence — see the per-card line on the catalog. Curated data is sourced under CC0-1.0 / CC-BY-4.0 / GODL-India depending on provider.
Provided as-is, no warranty. For legal/administrative use, go to the upstream source. Full disclaimers: /about → Use of data.
bharatlas is built on People's Digital Goods and Infrastructure (PDGI) principles. PDGI.md is a public, honest scorecard of how each one is implemented, and where we still fall short.
Data sources, in approximate order of catalog footprint:
Pipelines + patterns:
Built by Urban Morph · Sathya Sankaran. Drop a ⭐ if you find it useful.
Status: v1.0. Curated layers, community submissions, REST API, MCP server ( npm), dynamic filters with typeahead, whole-layer downloads in 5 formats. API docs at /docs, MCP setup at /mcp. Community submissions are permanent under the open licence the contributor selected.
Run in your terminal:
claude mcp add bharatlas-mcp -- npx Yes, Bharatlas MCP is free — one-click install via Unyly at no cost.
No, Bharatlas runs without API keys or environment variables.
A hosted option is available: Unyly runs the server in the cloud, no local setup required.
Open Bharatlas on unyly.org, pick your client tab (Claude Desktop, Claude Code, Cursor) and press Install — the config is generated automatically, no JSON editing.
Not sure what to pick?
Find your stack in 60 seconds
Author?
Embed badge for your README
Browse similar
All development MCPs