cyanheads/eurostat-mcp-server
Search and query the Eurostat catalogue — EU economy, demography, trade, health, and NUTS regional data via MCP. STDIO or Streamable HTTP.
Changelog
All notable changes to this project. Each entry links to its full per-version file in changelog/.
0.11.0 — 2026-10-26 · ⚠️ Breaking
Complete Eurostat results and guided statistical analysis.
0.10.1 — 2026-10-22
Bounded Eurostat reads and lossless SQL results.
0.10.0 — 2026-10-14 · ⚠️ Breaking
Pages long dimension-value lists with filter and cursor, rejects filter keys named like API controls, reports upstream outages and partial or stale catalogues, fixes blank filters, time-selection conflicts and canvas recoveries, matches search terms across spacing beside punctuation, and adopts mcp-ts-core 0.13.15.
0.9.0 — 2026-10-03
Opt-in eurostat_dataframe_drop removes one staged table from a canvas, the server moves to mcp-ts-core 0.13.11, and an unwritable CANVAS_TEMP_PATH now fails as a configuration error naming its errno.
0.8.1 — 2026-09-25
The Docker images and packageManager pin move to Bun 1.4.2.
0.8.0 — 2026-09-25 · ⚠️ Breaking
Every tool now reaches Eurostat's Comext host for the DS-* detailed-trade and PRODCOM collections, and eurostat_get_dimension_values caps inline values at 2,000 while staging the full list as a code/label table on a caller's canvas.
0.7.0 — 2026-09-25 · ⚠️ Breaking
Both data tools now reject malformed, non-existent, and inverted period ranges as invalid_period before any request; eurostat_query_dataset explains an empty match and names filter values that matched nothing; eurostat_download_dataset reports totalCount instead of truncated.
0.6.5 — 2026-09-21
Adopts mcp-ts-core 0.13.6: canvas_id on the DataCanvas tools now enforces the framework's minted-id shape at argument validation, and tool error responses carry the framework's structured reason and recovery details.
0.6.4 — 2026-09-16
Adopts mcp-ts-core 0.13.2: the server declares stateless session mode in source, tool argument rejections carry a structured InvalidParams envelope, and the development skill tree moves from skills/ to framework-skills/ so plugin installs no longer receive it.
0.6.3 — 2026-08-30
Distinguishes known dataset and table browse codes from codes absent from the Eurostat catalogue.
0.6.2 — 2026-08-30
Uses dataset-scoped SDMX metadata, adds bounded query previews, and makes query and canvas recovery paths explicit.
0.6.1 — 2026-08-21
Adopts mcp-ts-core 0.12.3 and MCP SDK v2, reports truncated bulk previews on both output surfaces, and refreshes the build and test configuration.
0.6.0 — 2026-08-04 · ⚠️ Breaking
eurostat_query_dataset's observations[].status carries only the OBS_FLAG now, confidentiality moved to a new confStatus field (#35); a wholly-confidential slice no longer wrongly raises no_results (#36).
0.5.0 — 2026-08-04
eurostat_download_dataset reads the SDMX 2.1 TSV bulk endpoint — roughly half the bytes of eurostat_query_dataset — and stages a whole dataset on the dataframe canvas (#8).
0.4.0 — 2026-08-04
eurostat_query_dataset stages a match past its 5,000-row inline cap onto an optional DuckDB dataframe canvas; two new tools, eurostat_dataframe_describe and eurostat_dataframe_query, read it (#8).
0.3.0 — 2026-08-04 · ⚠️ Breaking
get_dataset_info output and the dataset resource narrow dimensions[].valuesCount/sampleValues to optional — a failed time-enumeration request now returns partial metadata instead of failing (#34); query_dataset's row cap moves into the decoder (#27); duplicate browse_themes folder codes resolve to their first placement (#32).
0.2.0 — 2026-08-04 · ⚠️ Breaking
Ten output fields become optional across three schemas — absent annotations are omitted, not fabricated as 0/"" (#30, #33); dataset_info's time valuesCount reflects real coverage (#21); its async_response is non-retryable (#31); dimension_values rejects geo_level on a non-geo dimension (#25); query_dataset normalizes empty filter arrays (#22).
0.1.16 — 2026-08-03
Catalogue TOC now refreshes on a 12h TTL instead of the process lifetime; search results deduplicated by dataset code; search cursors bound to their query and catalogue snapshot; whitespace-only queries and openWorldHint fixed; mcp-ts-core ^0.10.14 → ^0.11.1.
0.1.15 — 2026-07-10
content[]/structuredContent parity for query_dataset and browse_themes; get_dimension_values returns the full time range and defaults geo to country; invalid dimension values now surface the declared error contract.
0.1.14 — 2026-07-10
Tokenized multi-word search, cursor pagination, and nextStep hints for the discovery tools; multi-root theme browse fix; stale catalogue counts removed; mcp-ts-core ^0.10.9 → ^0.10.14.
0.1.13 — 2026-06-20
Adopt @cyanheads/mcp-ts-core ^0.10.9: DataCanvas describe() binder-error fix, SQL-gate invalid_sql classification, ctx.content collector, two new devcheck guards (dependency specifiers, plugin-manifest correctness).
0.1.12 — 2026-06-15
Adopt @cyanheads/mcp-ts-core ^0.10.6: server identity name/title, Docker HEALTHCHECK + image.version label, bundle cleaner for dependency-shipped agent docs, packaging/antipattern lint additions.
0.1.11 — 2026-06-04
Populate data.recovery.hint via ctx.fail in all four tool handlers — agents now get actionable next-step guidance on every declared error path
0.1.10 — 2026-06-02
@cyanheads/mcp-ts-core ^0.9.16 → ^0.9.21 — per-request log context fix, secret-stripping in fetch errors, withRetry fail-fast; skill sync (api-mirror, orchestrations, 8 updated)
0.1.9 — 2026-05-30
Enrichment adoption — search/browse/query tools surface query echoes, result totals, and empty-result guidance via typed enrichment block; mcp-ts-core ^0.9.13 → ^0.9.16
0.1.8 — 2026-05-28
mcp-ts-core ^0.9.9 → ^0.9.13: 413 body cap, session-init gate, quieter expected-error logs, GET /mcp keywords; skill sync, plugin metadata scaffolding
0.1.7 — 2026-05-24
Code simplification, error code corrections (InvalidParams → ValidationError), mcp-ts-core ^0.9.7 → ^0.9.9, skills synced
0.1.6 — 2026-05-24
Four field-test bug fixes: obs cap (355MB crash), conflicting param validation, notFound reason field, dataStart/dataEnd whitespace
0.1.5 — 2026-05-23
Added hosted server endpoint: remotes block in server.json pointing to https://eurostat.caseyjhand.com/mcp
0.1.4 — 2026-05-23
Metadata alignment: Dockerfile restored to oven/bun:1.3, package.json scripts/fields, manifest.json fields, server.json env vars, CLAUDE.md + AGENTS.md, vitest.config.ts simplified
0.1.3 — 2026-05-23
Sync tagline across README, package.json, server.json, and manifest.json
0.1.2 — 2026-05-24
Bug fixes: depth-encoding whitespace in browse_themes, timeRange computed from observations, not_found error contract, description cleanup
0.1.1 — 2026-05-23
First public release — 5 tools, 1 resource, full Eurostat implementation covering 8,900+ datasets and NUTS regional data
0.1.0 — 2026-05-23
Initial release — Eurostat statistical data server with 5 tools and 1 resource