bharatlas-mcp

bharatlas-mcp

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.

Category
Visit Server

README

bharatlas

ci license: MIT v1.0 uptime Lighthouse: 98+

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

catalog               → India national boundary (LGD-dissolved)
                        + state · district · subdistrict · block · village (LGD)
                        + cross-source alternates (SOI · Bhuvan · geoBoundaries
                        · PMGSY per level — click "also: ..." on any card)
                        + city wards across Indian cities
                        + electoral constituencies, wildlife, eco-zones
                        + 63k pincode polygons (bharatviz)
download              → whole layer as Parquet · PMTiles · GeoJSON · KML ·
                        Shapefile, direct from the card
filter & slice        → dynamic facets / range / typeahead search per
                        layer schema; export the slice in any format above
preview               → drop GeoJSON · KML · KMZ · GPX · TCX · Parquet →
                        render + validate → optional Publish
view (/view/<id>)     → curated layer with per-layer OG card
view (/c/<id>)        → community submission, edge-rendered HTML, 👍 useful
                        vote, per-submission OG card
embed                 → /embed/<id> iframe + PNG export from any map
API (/api/v1)         → REST API: list, query, filter, group_by any layer;
                        locate (point-in-polygon across all layers);
                        nearby (tile-based spatial proximity)
MCP (npx bharatlas-mcp) → 8 tools for LLMs: list, schema, query, locate,
                        nearby, categories, submissions, downloads

What's in this repo

Path Contents
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.
/about#caveats Data caveats (cross-source drift, coverage gaps, precision).

Large data files (sources/, data/) are not in git — they live in R2. See scripts/fetch.sh to rebuild locally.

Stack

Layer Tech
Frontend Vanilla TypeScript, Vite, MapLibre GL JS, PMTiles, DuckDB-WASM (lazy)
Static hosting Cloudflare Pages
Edge functions Cloudflare Pages Functions (web/functions/) — REST API v1, submit, vote, sitemap, edge-rendered /c/<id>
Parquet query hyparquet (pure JS, runtime reads from R2)
Spatial query PMTiles tile reads + MVT decode + ray-casting PIP / Haversine proximity
MCP server bharatlas-mcp — 8 tools for Claude, GPT, Gemini, Cursor, etc.
Storage Cloudflare R2 (open data, no egress)
Submissions DB Cloudflare D1 (SQLite at the edge)
Anti-abuse Cloudflare Turnstile + per-IP rate limits
CI/CD GitHub Actions — tests + build + auto-deploy on push to main

Develop

# clone + viewer-only dev (no submissions, no D1)
git clone git@github.com: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), see docs/full-dev.md (TODO) or read wrangler.toml + .dev.vars.example.

Contributing

  1. Branch off main: git checkout -b feat/short-name
  2. Write a test first if you're adding logic to web/functions/lib/*. Pure functions are tested via vitest in web/tests/.
  3. Make sure npm test and npm run build both pass.
  4. Open a PR against main. CI runs tests + build automatically.
  5. The maintainer reviews and merges. Merge to main = auto-deploy.

Commit messages: short subject, body explains why not what. Examples in git log.

Changelog

See releases and merged PRs.

Security

Report vulnerabilities to sathya@urbanmorph.com instead of opening a public issue. Acknowledgement within 72 hours.

Licence

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.

Use of data

Provided as-is, no warranty. For legal/administrative use, go to the upstream source. Full disclaimers: /about → Use of data.

Credits

Data sources, in approximate order of catalog footprint:

  • LGD — Local Government Directory; the authoritative admin code chain (state → village).
  • SOI — Survey of India; admin alternatives.
  • Bhuvan — NRSC/ISRO Bhuvan; admin alternatives, eco-sensitive zones.
  • OpenCity / Oorvani Foundation — city-scale layers (ward / corporation / jurisdiction polygons for 20+ cities).
  • DataMeet — community-curated municipal spatial data (ward boundaries for multiple cities).
  • datta07/INDIAN-SHAPEFILES — metropolitan city ward shapefiles.
  • PMGSY — Pradhan Mantri Gram Sadak Yojana; rural blocks + roads.
  • PM GatiShakti — wildlife sanctuaries + national parks.
  • Bharatmaps (NIC) — eco-sensitive zones.
  • bharatviz (Saket Choudhary, MIT) — India Post pincode boundary polygons (simplified).
  • geoBoundaries — independent cross-check.
  • data.gov.in — additional government open data.

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.

Recommended Servers

playwright-mcp

playwright-mcp

A Model Context Protocol server that enables LLMs to interact with web pages through structured accessibility snapshots without requiring vision models or screenshots.

Official
Featured
TypeScript
Magic Component Platform (MCP)

Magic Component Platform (MCP)

An AI-powered tool that generates modern UI components from natural language descriptions, integrating with popular IDEs to streamline UI development workflow.

Official
Featured
Local
TypeScript
Audiense Insights MCP Server

Audiense Insights MCP Server

Enables interaction with Audiense Insights accounts via the Model Context Protocol, facilitating the extraction and analysis of marketing insights and audience data including demographics, behavior, and influencer engagement.

Official
Featured
Local
TypeScript
VeyraX MCP

VeyraX MCP

Single MCP tool to connect all your favorite tools: Gmail, Calendar and 40 more.

Official
Featured
Local
graphlit-mcp-server

graphlit-mcp-server

The Model Context Protocol (MCP) Server enables integration between MCP clients and the Graphlit service. Ingest anything from Slack to Gmail to podcast feeds, in addition to web crawling, into a Graphlit project - and then retrieve relevant contents from the MCP client.

Official
Featured
TypeScript
Kagi MCP Server

Kagi MCP Server

An MCP server that integrates Kagi search capabilities with Claude AI, enabling Claude to perform real-time web searches when answering questions that require up-to-date information.

Official
Featured
Python
E2B

E2B

Using MCP to run code via e2b.

Official
Featured
Neon Database

Neon Database

MCP server for interacting with Neon Management API and databases

Official
Featured
Exa Search

Exa Search

A Model Context Protocol (MCP) server lets AI assistants like Claude use the Exa AI Search API for web searches. This setup allows AI models to get real-time web information in a safe and controlled way.

Official
Featured
Qdrant Server

Qdrant Server

This repository is an example of how to create a MCP server for Qdrant, a vector search engine.

Official
Featured