nutshell·mcp

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.

Demo server Free, no key, no guarantee. For an operational service, run your own instance or talk to us.

Map of the European NUTS2 regions; the five regions of the example are highlightedDE50DE60DE71DE72DE73DE80DE91BG41BG42CH01AT32AT33AT34BE23BE25BE32BE33BE34BE35BG31BG32BG33BG34DE92DE93DE94CZ07CZ08AL01AL02AL03AT11AT12AT13AT21AT22AT31DK05BE21BE22ES43ES51ES52ES53ES61ES62CH02CH03CH04CH05CH06CH07CY00CZ01CZ02CZ03CZ04CZ05CZ06DE40EL53EL54EL61EL62EL63ITC1ITC2DE11DE12DE13DE14DE21DE22DE23DE24DE25DE26DE27DE30EL42LV00ME00MK00NL11NL12EL64EL65ES11ES12ES13ES21ES22ES23ES24ES30IE05IE06ITC3FI19FI1BFI1CDEA1DEA2DEA3DEA4DEA5DEB1DEB2DEB3DEC0DED2DED4DED5DEE0DEF0DEG0DK01DK02DK03DK04ES41ES42HU23HU31HU32HU33IE04EE00EL30EL41EL43EL51EL52FI20FR10FRB0FRC1FRC2FRD2FRE1FRE2FRF1NL13NL21NL22NL23NL31NL32ITG2ITH1ITH2FRJ1FRJ2FRK1FRK2FRL0TR31TR32TR33HR03HR02HU11HU12HU21HU22PT16PT17FRF2FRF3FRG0FRH0FRI1FRI2ITC4ITF1ITF2ITF3ITF4ITF5ITF6ITG1LT01LT02LU00PL22PL41PL42PT18RO11RO12RO21RO22RO31RO32ITH3ITH4ITH5ITI1ITI2ITI3ITI4FI1DTR82PL43PL51PL52PL61PL62PL63PL71PL72PL81PL82PL84PL91PL92PT11PT15RS12RS21RS22SE11SE12NL33NL34NL41NL42PL21UKM6TR22UKC1UKC2UKD1UKD3UKD4UKD6UKD7UKE1UKE2UKE3RO41RO42RS11TR41TR42TR51TR52TR61TR62TR71TR81UKK1UKK2UKK3UKK4UKL1UKL2UKM5UKM7UKM8UKM9UKN0SE21SE22SE23SE31SE32SE33SI03SI04SK01SK02SK03SK04TR10TR21UKE4UKF1UKF2UKF3UKG1UKG2UKG3UKH1UKH2UKH3UKI5UKI6UKI7UKJ1UKJ2UKJ3UKJ4NO09NO0ANO0BHR05HR06NO02NO06NO07NO08BE24BE31FRD1FRI3FRM0
In blue, the five NUTS2 regions picked by the assistant in the example below.

What your assistant can do with it

Three families of sources, one table. Every value carries its quality flag and provenance.

Eurostat
10,301 datasets

Official statistics

GDP, unemployment, population, age structure… from NUTS 0 to NUTS 2, plus the full catalogue at its native grain.

OpenStreetMap
38 countries

What's on the ground

Hospitals, schools, train stations counted per region and city.

Copernicus
2,300 regions & cities

Earth observation

Climate and land rasters turned into regional statistics. On this demo: summer surface temperature 2022–2024, continental Europe (sampled estimate).

One question, several sources

A real prompt, and an excerpt of the answer it produced.

“I need to choose the European region where to open a geriatric clinic. Compare the NUTS2 regions of France, Belgium and Luxembourg: oldest population, weakest hospital supply relative to population, decent GDP per capita. Give me a justified top 5 and state how reliable each source is.”
search_indicators list_zones get_indicators search_datasets query_data
#Region (NUTS2)Dependency 65+Beds / 100kGDP / inh.
1Brabant wallon (BE31)33.4 %225.3d€69,500
2Poitou-Charentes (FRI3)47.3 %492.9€34,900
3Vlaams-Brabant (BE24)32.5 %377.4d€57,100
4Basse-Normandie (FRD1)44.3 %557.2€34,600
5Corse (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.

More example prompts and the tool chains they trigger →

Cross all three sources

Some questions need three views of a territory at once: who lives there (Eurostat), what the environment is like (Copernicus) and what is available (OpenStreetMap). Three real runs with Qwen3.8-27B, figures checked against the server's data.

Heatwaves and the elderly

Copernicus × Eurostat × OSM · NUTS3
“Among the NUTS3 regions of Spain and Italy, which ones combine the hottest summers, the oldest population and the fewest hospitals per 100,000 inhabitants?”
#Province65+ / 15–64HospitalsPer 100k
1Asti (ITC17)45.2 %20.97
2Lecce (ITF45)42.6 %182.35
3Terni (ITI22)48.0 %41.86

The assistant ranked OSM hospital counts as “the weakest link” and called its top 10 “a directional shortlist, not a precise ordering”.

Moving with a young family

Copernicus × Eurostat × OSM · NUTS2
“Germany or Austria: mild summers, low unemployment, as many schools and train stations as possible relative to population.”
#RegionSummerUnempl.Schools / 1k
1Oberösterreich19.7 °C3.8 %0.64
2Steiermark18.4 °C4.4 %0.61
3Lüneburg18.7 °C2.7 %0.49

One call, 5 indicators from 3 sources over 45 regions. The assistant also listed what the data cannot say: daycare places, housing costs, train frequency.

Summer tourism, heat and rail

Eurostat × Copernicus × OSM · NUTS2
“Among the regions of Spain, Italy, Greece and Croatia, which ones receive the most tourist nights, have the hottest summers, and how well are they served by rail?”
#RegionSummer nightsSummerStations / 100k
1Jadranska Hrvatska63.0 M23.6 °C3.8
2Cataluña40.3 M23.9 °C5.3
3Illes Balears37.7 M26.9 °C2.9

June–August nights from the monthly Eurostat series. The hottest regions are not the most visited, and the busiest destinations are among the least served by rail.

Full prompts, answers and transcripts →

Connect your assistant

Any client that speaks MCP over HTTP: Claude Desktop, Claude Code, Cursor, pi, and others.

7 tools

Built for small models. Narrow schemas, bounded outputs, errors that suggest the fix: works with a 27B local model, not just frontier ones.

Add the server

Claude Code plugin: two commands, nothing else to install.

/plugin marketplace add scampion/nutshell-mcp
/plugin install nutshell@nutshell

Any other MCP client: endpoint https://nutshell.arcamens.ai/mcp (streamable HTTP, no key).

{
  "mcpServers": {
    "nutshell": {
      "type": "http",
      "url": "https://nutshell.arcamens.ai/mcp"
    }
  }
}

Claude Code without the plugin: claude mcp add --transport http nutshell https://nutshell.arcamens.ai/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).

Beyond the demo

The code is open source. If you need more than the demo server, we can help.

Hosted instance

An operational server with availability commitments, authentication and the indicators you need.

Enterprise support

Deployment on your infrastructure, integration with your assistants and models, training.

Custom data

New indicators, internal sources joined to NUTS, specific geographies or refresh cadences.