Skip to content

Releases: cyanheads/eurostat-mcp-server

v0.6.0: OBS_FLAG/CONF_STATUS split, confidential-slice no_results fix

Choose a tag to compare

@cyanheads cyanheads released this 04 Aug 18:07
v0.6.0
bf9cb02

OBS_FLAG/CONF_STATUS split, confidential-slice no_results fix

  • Breaking: eurostat_query_dataset's observations[].status carries only OBS_FLAG now; confidentiality moves to a new confStatus field, and the staged dataframe table gains matching conf_status/conf_status_label columns (#35)
  • Fixed: a dataset slice where every cell is confidential no longer wrongly raises no_results (#36)
  • OBS_FLAG/CONF_STATUS dictionaries and measure column names consolidated into a shared eurostat-codelists module; both dataframe tool descriptions updated to match

CHANGELOG v0.6.0

v0.5.0: SDMX TSV bulk downloads

Choose a tag to compare

@cyanheads cyanheads released this 04 Aug 16:58
v0.5.0
5da45b5

SDMX TSV bulk downloads

  • eurostat_download_dataset streams the SDMX 2.1 TSV bulk endpoint and stages a whole dataset on the dataframe canvas — roughly half the bytes of eurostat_query_dataset's JSON-stat body for the same data (#8)
  • New EurostatBulkService: streaming gzip sniffing (no Content-Encoding header on compressed bodies), a byte budget enforced mid-transfer, SOAP-fault and async-queue-envelope classification, wide-to-long TSV expansion
  • eurostat_query_dataset, both dataframe tools, and three other tool descriptions rewritten to route between a dataset slice and a whole download, and to flag that the two dataframe stagers disagree on obs_flag
  • docs: README, design doc, and plugin manifest updated for the new tool

CHANGELOG v0.5.0

v0.4.0: DataCanvas support for the dataframe tools

Choose a tag to compare

@cyanheads cyanheads released this 04 Aug 10:33
v0.4.0
84f467d

DataCanvas support for the dataframe tools

  • eurostat_query_dataset stages a match past the 5,000-row inline cap onto an optional DuckDB canvas as a flat SQL table, reusing the response body already in memory — no extra request to Eurostat (#8)
  • eurostat_dataframe_describe and eurostat_dataframe_query read the staged tables; both are gated off tools/list when CANVAS_PROVIDER_TYPE is not duckdb (#8)
  • Dockerfile grants the non-root user writable canvas scratch/export directories; a scratch-directory permission failure now names CANVAS_TEMP_PATH instead of surfacing a bare EACCES
  • deps: @duckdb/node-api ^1.5.5-r.3 added as a runtime dependency

CHANGELOG v0.4.0

v0.3.0: dimensions[].valuesCount/sampleValues become optional on dataset_info and the dataset resource

Choose a tag to compare

@cyanheads cyanheads released this 04 Aug 08:40
v0.3.0
f78f7e1

dimensions[].valuesCount/sampleValues become optional on dataset_info and the dataset resource

  • Breaking: eurostat_get_dataset_info output and the eurostat://dataset/{dataset_code} resource narrow dimensions[].valuesCount/sampleValues to optional — a failed time-enumeration request now returns partial metadata instead of failing (#34)
  • eurostat_query_dataset's 5,000-row cap now applies during decoding instead of after the full match is decoded, with totals from a separate cell scan (#27)
  • eurostat_browse_themes resolves a folder code filed under more than one TOC branch to its first placement, with the other branches now disclosed via otherPlacements (#32)

CHANGELOG v0.3.0

v0.2.0: Ten output fields become optional, and Eurostat's silence stops being fabricated as zero

Choose a tag to compare

@cyanheads cyanheads released this 04 Aug 07:49
v0.2.0
2ce9b78

Ten output fields become optional, and Eurostat's silence stops being fabricated as zero

  • Breaking: 10 fields move required → optional across 3 schemas — eurostat_get_dataset_info's timeRange.start/end, obsCount, lastUpdated; the eurostat://dataset/{dataset_code} resource's same 4 fields; eurostat_query_dataset's timeRange.start/end (#30, #33)
  • get_dataset_info's time-dimension valuesCount now reflects the dataset's real period count instead of a single-period artifact, at the cost of one bounded extra request (#21)
  • get_dataset_info's async_response error is no longer retryable — its recovery hint now points at eurostat_search_datasets/eurostat_browse_themes/eurostat_get_dimension_values (#31)
  • get_dimension_values rejects geo_level paired with a non-geo dimension instead of silently ignoring it (#25)
  • query_dataset drops zero-length filter arrays before building the request and echoes the filters actually applied via a new appliedFilters field (#22)
  • docs: design.md and README.md corrected for stale error-code labels, single-request description, and mutual-exclusion wording

CHANGELOG v0.2.0

v0.1.16: TOC cache TTL, cursor binding, and search fixes

Choose a tag to compare

@cyanheads cyanheads released this 04 Aug 06:59
v0.1.16
919fe7d

TOC cache TTL, cursor binding, and search fixes

Catalogue caching and eurostat_search_datasets pagination/validation, plus mcp-ts-core ^0.11.1 adoption.

  • Catalogue TOC now refreshes on a 12h TTL instead of caching for the process lifetime, with stale-on-error fallback (#23)
  • eurostat_search_datasets deduplicates matches by dataset code before pagination (#26)
  • Search cursors are bound to their query and catalogue snapshot; cross-query, malformed, or superseded cursors reject as invalid_cursor (#28)
  • Whitespace-only search queries are now rejected instead of matching everything (#24)
  • eurostat_search_datasets / eurostat_browse_themes advertise openWorldHint: true (#29)
  • skill/script resync, Dockerfile install hardening, .mcpb bundle now strips native DuckDB bindings too
  • deps: @cyanheads/mcp-ts-core ^0.10.14 -> ^0.11.1 (+ typescript, biome, dev-dep bumps)

CHANGELOG v0.1.16

v0.1.15: Content parity, full-range dimension values, live error classification

Choose a tag to compare

@cyanheads cyanheads released this 10 Jul 21:52
v0.1.15
e0d8556

Content parity, full-range dimension values, live error classification

Three bug fixes: content[]/structuredContent parity for two tools, complete time-range enumeration for get_dimension_values, and invalid-dimension error mapping on the live HTTP path.

Fixed:

  • eurostat_query_dataset / eurostat_browse_themes content[] parity — removed the 200-row cap and its truncation note; hasChildren now renders both boolean states (#15)
  • eurostat_get_dimension_values full time range — pins every other dimension to enumerate time's complete range instead of the latest period only; geo defaults to geoLevel=country; adds a non-retryable async_response error variant (#17)
  • eurostat_query_dataset invalid-dimension error classification — HTTP 400 (Eurostat error id 150) now maps to the declared invalid_dimension contract (ValidationError, -32007) instead of the raw HTTP error (#18)

156 tests pass; bun run devcheck clean.

CHANGELOG v0.1.15

v0.1.14: Discovery fixes + mcp-ts-core ^0.10.14 adoption

Choose a tag to compare

@cyanheads cyanheads released this 10 Jul 19:37
v0.1.14
622cbdf

Discovery fixes + mcp-ts-core ^0.10.14 adoption

Tokenized multi-word search, cursor pagination, and nextStep hints for the search/browse tools; a multi-root theme-browse fix; framework/skill maintenance folded in.

Added:

  • eurostat_search_datasets cursor pagination — new cursor input, nextCursor/truncated enrichment, limit is now page size (#16)
  • nextStep hint on eurostat_search_datasets and eurostat_browse_themes results (#13)
  • bunfig.toml minimumReleaseAge install guard + @socketsecurity/bun-security-scanner; .gitattributes; .github/SECURITY.md

Changed:

  • Dropped hardcoded "8,933 datasets" / "11 top-level themes" from tool descriptions and docs (#19)
  • @cyanheads/mcp-ts-core ^0.10.9 → ^0.10.14 — ctx.state.getMany, ctx.elicit.url, ctx.enrich helpers, ctx.content collector
  • Skills re-synced; 12 metadata.version bumps
  • Dockerfile: oven/bun 1.3.14, BuildKit cache mounts

Fixed:

  • eurostat_search_datasets multi-word queries now AND-match tokens across label+themePath+code (#14)
  • eurostat_browse_themes root browse unions children of every depth-0 TOC root (#20)

Dependencies:

  • @cyanheads/mcp-ts-core ^0.10.9 → ^0.10.14
  • @biomejs/biome ^2.5.0 → 2.5.2
  • @types/node ^26.0.0 → 26.1.0
  • tsc-alias ^1.8.17 → ^1.9.0
  • tsx ^4.22.4 → ^4.23.0
  • vitest ^4.1.9 → ^4.1.10
  • @socketsecurity/bun-security-scanner ^1.1.2 (new)
  • Transitive: hono → 4.12.28, js-yaml → 3.15.0, vite/esbuild patched (advisories cleared)

145 tests pass; bun run devcheck clean.

CHANGELOG v0.1.14

v0.1.13: mcp-ts-core ^0.10.9 adoption

Choose a tag to compare

@cyanheads cyanheads released this 20 Jun 11:36
v0.1.13
13f013b

mcp-ts-core ^0.10.9 adoption

Framework-maintenance release: upstream DataCanvas fixes, two new devcheck guards, skill + script re-sync.

Dependencies:

  • @cyanheads/mcp-ts-core ^0.10.6 → ^0.10.9
  • @types/node ^25.9.3 → ^26.0.0

Changed:

  • @cyanheads/mcp-ts-core ^0.10.6 → ^0.10.9 — DuckdbProvider.describe({ tableName }) binder-error fix (core #235); Canvas SQL gate classifies SELECT-shaped prepare failures as invalid_sql with binder detail (core #236); ctx.content collector for image/audio blocks (core #239); OTEL_SERVICE_NAME seeding precedence corrected (core #233); biome 2.4.16 → 2.5.0
  • check-dependency-specifiers devcheck step rejects floating specifiers (latest/*/dist-tags) in package.json + bun.lock workspaces (core #246)
  • lint:packaging plugin-manifest checks validate .claude-plugin / .codex-plugin descriptions, unscoped display name, scoped install arg (core #240)
  • devcheck.config.json packaging.pluginManifests enabled
  • Skills re-synced; seven metadata.version bumps (core #238)

135 tests pass; bun run devcheck clean.

v0.1.12: mcp-ts-core ^0.10.6 adoption

Choose a tag to compare

@cyanheads cyanheads released this 15 Jun 20:34
v0.1.12
d6d3948

mcp-ts-core ^0.10.6 adoption

Framework upgrade with no change to the tool surface. Picks up env-boolean parsing via Zod stringbool, a fail-closed DataCanvas SQL gate, wire-level elicitation, and the bundle-hygiene tooling.

Dependencies:

  • @cyanheads/mcp-ts-core ^0.9.21 → ^0.10.6
  • @biomejs/biome ^2.4.16 → ^2.5.0
  • @types/node ^25.9.1 → ^25.9.3
  • tsx ^4.22.3 → ^4.22.4
  • vitest ^4.1.8 → ^4.1.9

Added:

  • Server identity: createApp() name/title set to eurostat-mcp-server (core #213)
  • Dockerfile HEALTHCHECK (bun-native fetch on /healthz) + image.version label
  • scripts/clean-mcpb.ts strips dependency-shipped agent docs from the .mcpb bundle (core #230)

Changed:

  • .mcpbignore root dev-dir patterns anchored with / (core #172/#207)
  • lint-packaging.ts bundle-content + entrypoint-identity checks (core #230/#231)
  • check-framework-antipatterns.ts adds the coerce-boolean-env-flag rule
  • Skills re-synced; adds the techniques skill (core #204)

135 tests pass; bun run devcheck clean.