Spaces:
Running
Download README.md from judicialmind/OpenGovtData-MCP: direct link, hf CLI and curl.
- Browser
- Download file 5.67 kB
-
https://huggingface.co/spaces/judicialmind/OpenGovtData-MCP/resolve/main/README.md
- Command line
-
hf download hf://spaces/judicialmind/OpenGovtData-MCP/README.md
-
curl -L -o README.md https://huggingface.co/spaces/judicialmind/OpenGovtData-MCP/resolve/main/README.md
license: cc-by-nc-sa-4.0
title: OpenGovtData-MCP
sdk: docker
app_port: 7860
short_description: MCP server + HTTP API over India open government data tables
emoji: ๐
colorFrom: indigo
colorTo: green
pinned: false
tags:
- mcp
- india
- open-government-data
- tables
OpenGovtData-MCP
Licence: CC BY-NC-SA 4.0 โ research and non-commercial use only; derivatives must be shared under the same licence. Commercial use: contact surya@judicialmind.ai or hello@judicialmind.ai
MCP server and HTTP API over IndiaTables
(data.gov.in + NITI Aayog NDAP, snapshot May 2026). Tools: search_tables, describe_table, query_table
(one read-only DuckDB SELECT, row cap, timeout, no file or network access) and cite. Every answer carries
the snapshot date and a completeness flag (complete / truncated / duplicated / metadata_only).
This Space bundles a demo subset (demo_store/, see demo_store/demo_info.json): 1,000 small, complete tables
without personal-data columns, balanced across 226 ministries. Search here is keyword search over the table cards.
Quickstart
MCP clients (streamable HTTP): add https://<space-host>/mcp as a server, e.g. in a client config
{"mcpServers": {"ogd": {"url": "https://<space-host>/mcp"}}}
HTTP API: input = a query string or one SQL statement naming tables by uuid in double quotes; output = JSON with
snapshot, results / rows and per-table completeness and attribution.
import requests
BASE = "https://<space-host>" # or http://localhost:7860 when running the container locally
print(requests.get(f"{BASE}/").json()) # {"name": "OpenGovtData-MCP", "demo_tables": 1000, ...}
hits = requests.get(f"{BASE}/search", params={"q": "rainfall district", "k": 3}).json()["results"]
for h in hits:
print(h["uuid"], h["title"], h["completeness"])
uuid = hits[0]["uuid"]
print(requests.get(f"{BASE}/describe/{uuid}").json()["table"]["columns"][:3])
rows = requests.post(f"{BASE}/query", json={"sql": f'SELECT * FROM "{uuid}" LIMIT 3'}).json()
print(rows["columns"], rows["rows"])
print(requests.get(f"{BASE}/cite/{uuid}").json()["cite"]["attribution"])
Endpoints: GET /search?q=&k=&state=&district=&year=&ministry=&level=, GET /describe/<uuid>,
GET /cite/<uuid>, POST /query with {"sql": "SELECT * FROM \"<uuid>\" LIMIT 5", "max_rows": 200},
GET /health; OpenAPI at /docs.
Run the Space locally:
git clone https://huggingface.co/spaces/judicialmind/OpenGovtData-MCP && cd OpenGovtData-MCP
docker build -t ogd-mcp . && docker run -p 7860:7860 ogd-mcp
# or without Docker:
pip install -r requirements.txt && uvicorn app:app --port 7860
Full index (local)
The same server runs over the full IndiaTables store (266,707 tables) with hybrid BM25 + IndiaTables-Embed-0.6B search:
huggingface-cli download judicialmind/IndiaTables --repo-type dataset --local-dir store
pip install -r requirements.txt bm25s sentence-transformers
python -m ogd.mcp.index --store store --out index --model judicialmind/IndiaTables-Embed-0.6B # GPU recommended
python -m ogd.mcp.server --store store --index index --transport stdio # or streamable-http / http-api --port 8000
Without --model the index is BM25 only (CPU, a few minutes). python -m ogd.mcp.server --store store --dry-run
runs every tool once and prints a JSON summary.
Files
| File | What |
|---|---|
app.py, Dockerfile, requirements.txt |
The Space: FastAPI routes + MCP streamable HTTP at /mcp |
ogd/mcp/core.py |
Backend: search, describe, read-only SQL (DuckDB), cite |
ogd/mcp/server.py |
MCP server (stdio / streamable HTTP) and the FastAPI app |
ogd/mcp/index.py |
BM25 + dense index over IndiaTables cards |
ogd/common/attribution.py |
GODL-India attribution strings |
demo_store/ |
catalog.parquet, cards.parquet and tables/ for the 1,000 demo tables |
Source data
Demo tables and catalog rows from IndiaTables: published on the Open Government Data Platform India
(data.gov.in) and NITI Aayog's NDAP, snapshot May 2026. Each table's provider, title and resource URL are in
the attribution column and in every cite / query response.
Original data: published by the ministries, departments and State governments named per table in the attribution column on the Open Government Data Platform India (data.gov.in) and, where marked, NITI Aayog's National Data and Analytics Platform (NDAP), under the Government Open Data License - India (GODL-India). The original public data remains under GODL-India; the CC BY-NC-SA 4.0 licence of this repository covers JudicialMind's compilation, derived fields, annotations, benchmarks and models.
Citation
@misc{judicialmind2026ogdmcp,
title={OpenGovtData-MCP: an MCP server over India's open government data tables},
author={JudicialMind},
year={2026},
publisher={Hugging Face},
howpublished={\url{https://huggingface.co/spaces/judicialmind/OpenGovtData-MCP}}
}
License
CC BY-NC-SA 4.0 (see LICENSE): research, academic, personal and other non-commercial use, with attribution to JudicialMind and to the original data publishers; adaptations must be shared under the same licence. Commercial use requires a separate licence.
Commercial use: contact surya@judicialmind.ai or hello@judicialmind.ai.