Ask your AI assistant about any European region, and get sourced answers.
nutshell-mcp is an MCP server that brings Eurostat, Copernicus and OpenStreetMap together at a single grain — zone × indicator × period. Your assistant compares regions, crosses sources and tells you how reliable each figure is, without ever writing a query.
This instance is provided for demonstration and evaluation only — no guarantee of availability, freshness or performance, no authentication, and it may be reset or shut down at any time. Do not build an operational service on it. For any real use, clone the code and run your own installation.
What your assistant can do with it
Three families of sources, one table. Every value carries its quality flag and provenance.
Official statistics
GDP, unemployment, population, age structure… from NUTS 0 to NUTS 2, plus the full catalogue of 10,301 datasets at their native grain.
What's on the ground
Hospitals, schools, train stations counted per region and city, across 38 European countries.
Earth observation
Climate and land rasters turned into regional statistics — summer surface temperature, soil sealing. Available on self-hosted instances (not materialised on this demo).
7 simple tools
Narrow schemas, bounded outputs, errors that suggest the fix. Works with a 27B local model, not just frontier ones.
One question, several sources
A real prompt, and an excerpt of the answer it produced.
search_indicators→
list_zones→
get_indicators→
search_datasets→
query_data
| # | Region (NUTS2) | Dependency 65+ | Beds / 100k | GDP / inh. |
|---|---|---|---|---|
| 1 | Brabant wallon (BE31) | 33.4 % | 225.3 | €69,500 |
| 2 | Poitou-Charentes (FRI3) | 47.3 % | 492.9 | €34,900 |
| 3 | Vlaams-Brabant (BE24) | 32.5 % | 377.4 | €57,100 |
| 4 | Basse-Normandie (FRD1) | 44.3 % | 557.2 | €34,600 |
| 5 | Corse (FRM0) | 43.2 % | 552.0 | €37,500 |
The table is the easy part. Because every value carries its quality flag, the assistant also said:
- Belgian bed counts are flagged
d(definition differs): the France/Belgium comparison is indicative, and ranks 1 and 3 are Belgian. - OpenStreetMap reports 0 hospitals in the French overseas departments: a completeness gap, so they were excluded rather than ranked.
- Luxembourg has no bed data: “a data hole, not a bad score”.
- 2025 values marked
[p]are provisional.
Connect your assistant
Any client that speaks MCP over HTTP: Claude Desktop, Claude Code, Cursor, pi, and others.
Add the server
Endpoint: https://nutshell.scamp.fr/mcp (streamable HTTP, no key).
{
"mcpServers": {
"nutshell": {
"type": "http",
"url": "https://nutshell.scamp.fr/mcp"
}
}
}
With Claude Code: claude mcp add --transport http nutshell https://nutshell.scamp.fr/mcp
Ask a question about places
“Compare unemployment and median age in Île-de-France, Oberbayern and Lombardia.” The assistant finds the indicators, the zone codes, and returns one table.
Ask for the sources
Add “state how reliable each source is”: that is what makes the assistant reason about provisional values, definition changes and coverage gaps.
Run your own instance
Recommended for any real use. The server is stateless and serves everything from local disk: once synchronised, it runs fully offline, and you choose the indicators, countries and refresh cadence.
git clone https://github.com/scampion/nutshell-mcp.git cd nutshell-mcp uv venv --python 3.12 .venv uv pip install --python .venv/bin/python -e . .venv/bin/python -m nutshell_mcp.sync --source geo # NUTS & city geometries .venv/bin/python -m nutshell_mcp.sync --source eurostat # registry indicators .venv/bin/python -m nutshell_mcp.server # stdio MCP server
Adding an indicator takes one YAML file, no code. OSM and Copernicus pipelines, HTTP deployment and configuration are described in the README (version française).