@cyanheads/eurostat-mcp-server 0.2.0 → 0.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (47) hide show
  1. package/CLAUDE.md +1 -1
  2. package/Dockerfile +16 -3
  3. package/README.md +29 -6
  4. package/dist/index.js +23 -2
  5. package/dist/index.js.map +1 -1
  6. package/dist/mcp-server/resources/definitions/eurostat-dataset.resource.d.ts +3 -3
  7. package/dist/mcp-server/resources/definitions/eurostat-dataset.resource.d.ts.map +1 -1
  8. package/dist/mcp-server/resources/definitions/eurostat-dataset.resource.js +4 -2
  9. package/dist/mcp-server/resources/definitions/eurostat-dataset.resource.js.map +1 -1
  10. package/dist/mcp-server/tools/definitions/eurostat-browse-themes.tool.d.ts +1 -0
  11. package/dist/mcp-server/tools/definitions/eurostat-browse-themes.tool.d.ts.map +1 -1
  12. package/dist/mcp-server/tools/definitions/eurostat-browse-themes.tool.js +9 -0
  13. package/dist/mcp-server/tools/definitions/eurostat-browse-themes.tool.js.map +1 -1
  14. package/dist/mcp-server/tools/definitions/eurostat-dataframe-describe.tool.d.ts +40 -0
  15. package/dist/mcp-server/tools/definitions/eurostat-dataframe-describe.tool.d.ts.map +1 -0
  16. package/dist/mcp-server/tools/definitions/eurostat-dataframe-describe.tool.js +113 -0
  17. package/dist/mcp-server/tools/definitions/eurostat-dataframe-describe.tool.js.map +1 -0
  18. package/dist/mcp-server/tools/definitions/eurostat-dataframe-query.tool.d.ts +34 -0
  19. package/dist/mcp-server/tools/definitions/eurostat-dataframe-query.tool.d.ts.map +1 -0
  20. package/dist/mcp-server/tools/definitions/eurostat-dataframe-query.tool.js +98 -0
  21. package/dist/mcp-server/tools/definitions/eurostat-dataframe-query.tool.js.map +1 -0
  22. package/dist/mcp-server/tools/definitions/eurostat-get-dataset-info.tool.d.ts +3 -3
  23. package/dist/mcp-server/tools/definitions/eurostat-get-dataset-info.tool.d.ts.map +1 -1
  24. package/dist/mcp-server/tools/definitions/eurostat-get-dataset-info.tool.js +16 -8
  25. package/dist/mcp-server/tools/definitions/eurostat-get-dataset-info.tool.js.map +1 -1
  26. package/dist/mcp-server/tools/definitions/eurostat-query-dataset.tool.d.ts +9 -0
  27. package/dist/mcp-server/tools/definitions/eurostat-query-dataset.tool.d.ts.map +1 -1
  28. package/dist/mcp-server/tools/definitions/eurostat-query-dataset.tool.js +82 -21
  29. package/dist/mcp-server/tools/definitions/eurostat-query-dataset.tool.js.map +1 -1
  30. package/dist/services/canvas-accessor.d.ts +26 -0
  31. package/dist/services/canvas-accessor.d.ts.map +1 -0
  32. package/dist/services/canvas-accessor.js +57 -0
  33. package/dist/services/canvas-accessor.js.map +1 -0
  34. package/dist/services/eurostat-catalogue/eurostat-catalogue-service.d.ts +20 -1
  35. package/dist/services/eurostat-catalogue/eurostat-catalogue-service.d.ts.map +1 -1
  36. package/dist/services/eurostat-catalogue/eurostat-catalogue-service.js +35 -3
  37. package/dist/services/eurostat-catalogue/eurostat-catalogue-service.js.map +1 -1
  38. package/dist/services/eurostat-data/eurostat-data-service.d.ts +78 -6
  39. package/dist/services/eurostat-data/eurostat-data-service.d.ts.map +1 -1
  40. package/dist/services/eurostat-data/eurostat-data-service.js +185 -27
  41. package/dist/services/eurostat-data/eurostat-data-service.js.map +1 -1
  42. package/dist/services/eurostat-data/types.d.ts +61 -4
  43. package/dist/services/eurostat-data/types.d.ts.map +1 -1
  44. package/dist/services/eurostat-data/types.js +11 -0
  45. package/dist/services/eurostat-data/types.js.map +1 -1
  46. package/package.json +2 -1
  47. package/server.json +58 -4
@@ -58,6 +58,20 @@ export interface Observation {
58
58
  };
59
59
  value: number | null;
60
60
  }
61
+ /**
62
+ * One observation flattened into a dataframe row.
63
+ *
64
+ * A dataframe column holds a scalar, so `Observation`'s nested `{code, label}`
65
+ * pair per dimension is split across two columns — `<dim>` for the code and
66
+ * `<dim>_label` for the label — and the status flag likewise. The measure
67
+ * columns carry the `obs_` prefix Eurostat's own SDMX-CSV output uses, which
68
+ * also keeps them clear of any dimension code.
69
+ */
70
+ export type ObservationRow = Record<string, string | number | null>;
71
+ /** Measure column names — the non-dimension columns of an {@link ObservationRow}. */
72
+ export declare const OBS_VALUE_COLUMN = "obs_value";
73
+ export declare const OBS_FLAG_COLUMN = "obs_flag";
74
+ export declare const OBS_FLAG_LABEL_COLUMN = "obs_flag_label";
61
75
  /**
62
76
  * Metadata about a dataset extracted from a JSON-stat response.
63
77
  *
@@ -76,16 +90,28 @@ export interface DatasetMeta {
76
90
  end?: string;
77
91
  };
78
92
  }
93
+ /**
94
+ * One dimension of a dataset.
95
+ *
96
+ * `valuesCount`/`sampleValues` are absent when the dimension's value set could not be
97
+ * measured. That happens for `time`, whose real period range takes a second request the
98
+ * rest of the metadata does not depend on: when that request fails, the fields are omitted
99
+ * rather than filled from the one-period slice, which would report a period count of 1 for
100
+ * every dataset.
101
+ */
79
102
  export interface DimensionInfo {
80
103
  code: string;
81
104
  label: string;
82
- /** First 10 values as orientation. */
83
- sampleValues: Array<{
105
+ /** First 10 values as orientation. Absent when the value set was not measured. */
106
+ sampleValues?: Array<{
84
107
  code: string;
85
108
  label: string;
86
109
  }>;
87
- /** Distinct values for this dimension: the dataset's full period set for `time`, the most recent period's codelist otherwise. */
88
- valuesCount: number;
110
+ /**
111
+ * Distinct values for this dimension: the dataset's full period set for `time`, the most
112
+ * recent period's codelist otherwise. Absent when the value set was not measured.
113
+ */
114
+ valuesCount?: number;
89
115
  }
90
116
  export interface DimensionValuesResult {
91
117
  dimensionCode: string;
@@ -99,6 +125,11 @@ export interface DimensionValuesResult {
99
125
  /**
100
126
  * A decoded query result.
101
127
  *
128
+ * `observations` is capped at `OBS_CAP`; `obsCount`, `missingObsCount` and `timeRange`
129
+ * describe the whole match, so `obsCount` and `observations.length` diverge whenever the
130
+ * cap bites. They are counted from the response's cell keys rather than from the decoded
131
+ * array, so capping never changes what they report.
132
+ *
102
133
  * `timeRange` bounds are absent when neither the returned observations nor the dataset-wide
103
134
  * annotations report them — an unknown bound is not an empty period.
104
135
  */
@@ -108,14 +139,40 @@ export interface QueryResult {
108
139
  datasetCode: string;
109
140
  datasetLabel: string;
110
141
  dimensionsUsed: string[];
142
+ /** Observations with no value across the whole match, not just the decoded page. */
111
143
  missingObsCount: number;
144
+ /** Observations matched upstream, before the `OBS_CAP` decode cap. */
112
145
  obsCount: number;
146
+ /** Decoded observations, capped at `OBS_CAP` — the first cap rows in linear-index order. */
113
147
  observations: Observation[];
114
148
  timeRange: {
115
149
  start?: string;
116
150
  end?: string;
117
151
  };
118
152
  }
153
+ /**
154
+ * A query result plus a lazy row source over everything it matched.
155
+ *
156
+ * `observations` stops at `OBS_CAP`; `rows()` does not. Both read the same
157
+ * single walk of the response, so the capped list is always a prefix of the row
158
+ * source rather than a separately-derived set that can drift from it.
159
+ */
160
+ export interface QueryExecution extends QueryResult {
161
+ /**
162
+ * Fresh generator over every matched cell, in the same order `observations`
163
+ * uses. Nothing is materialized until a consumer pulls, so staging a
164
+ * million-cell match costs one row object at a time rather than an array of
165
+ * them — the allocation `OBS_CAP` exists to avoid.
166
+ */
167
+ rows: () => Generator<ObservationRow>;
168
+ }
169
+ /**
170
+ * Upper bound on decoded observations returned for one query.
171
+ *
172
+ * Applied inside the decoder, so an oversized match never materializes as observation
173
+ * objects. The totals alongside `observations` stay honest about the full match.
174
+ */
175
+ export declare const OBS_CAP = 5000;
119
176
  export type GeoLevel = 'aggregate' | 'country' | 'nuts1' | 'nuts2' | 'nuts3';
120
177
  /** Tuple of valid GeoLevel values — use with `z.enum(GEO_LEVEL_VALUES)` in tool schemas. */
121
178
  export declare const GEO_LEVEL_VALUES: readonly ["aggregate", "country", "nuts1", "nuts2", "nuts3"];
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/services/eurostat-data/types.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,0DAA0D;AAC1D,MAAM,WAAW,gBAAgB;IAC/B,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAC;IAC9C,KAAK,CAAC,EAAE,KAAK,CAAC;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,EAAE,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC7D,SAAS,CAAC,EAAE,iBAAiB,CAAC;IAC9B,uCAAuC;IACvC,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC;IACd,qBAAqB;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,sDAAsD;IACtD,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,wFAAwF;IACxF,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAChC,qEAAqE;IACrE,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC,CAAC;IACtC,uCAAuC;IACvC,OAAO,CAAC,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;CAC7C;AAED,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,EAAE;QACT,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAC/B,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;KAChC,CAAC;IACF,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,iBAAiB;IAChC,UAAU,CAAC,EAAE,KAAK,CAAC;QACjB,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,IAAI,CAAC,EAAE,MAAM,CAAC;KACf,CAAC,CAAC;IACH,MAAM,CAAC,EAAE;QACP,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;KAChC,CAAC;CACH;AAED,4CAA4C;AAC5C,MAAM,WAAW,WAAW;IAC1B,6CAA6C;IAC7C,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC5D,MAAM,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;IACzC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;CACtB;AAED;;;;;GAKG;AACH,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,aAAa,EAAE,CAAC;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,GAAG,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;CAC7C;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,sCAAsC;IACtC,YAAY,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACrD,iIAAiI;IACjI,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,qBAAqB;IACpC,aAAa,EAAE,MAAM,CAAC;IACtB,cAAc,EAAE,MAAM,CAAC;IACvB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CAChD;AAED;;;;;GAKG;AACH,MAAM,WAAW,WAAW;IAC1B,2FAA2F;IAC3F,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;IACzC,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,eAAe,EAAE,MAAM,CAAC;IACxB,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,WAAW,EAAE,CAAC;IAC5B,SAAS,EAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,GAAG,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;CAC7C;AAED,MAAM,MAAM,QAAQ,GAAG,WAAW,GAAG,SAAS,GAAG,OAAO,GAAG,OAAO,GAAG,OAAO,CAAC;AAE7E,4FAA4F;AAC5F,eAAO,MAAM,gBAAgB,8DAMW,CAAC"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/services/eurostat-data/types.ts"],"names":[],"mappings":"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"}
@@ -2,6 +2,17 @@
2
2
  * @fileoverview Domain types for the Eurostat Statistics API (JSON-stat 2.0) service.
3
3
  * @module services/eurostat-data/types
4
4
  */
5
+ /** Measure column names — the non-dimension columns of an {@link ObservationRow}. */
6
+ export const OBS_VALUE_COLUMN = 'obs_value';
7
+ export const OBS_FLAG_COLUMN = 'obs_flag';
8
+ export const OBS_FLAG_LABEL_COLUMN = 'obs_flag_label';
9
+ /**
10
+ * Upper bound on decoded observations returned for one query.
11
+ *
12
+ * Applied inside the decoder, so an oversized match never materializes as observation
13
+ * objects. The totals alongside `observations` stay honest about the full match.
14
+ */
15
+ export const OBS_CAP = 5_000;
5
16
  /** Tuple of valid GeoLevel values — use with `z.enum(GEO_LEVEL_VALUES)` in tool schemas. */
6
17
  export const GEO_LEVEL_VALUES = [
7
18
  'aggregate',
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/services/eurostat-data/types.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAqGH,4FAA4F;AAC5F,MAAM,CAAC,MAAM,gBAAgB,GAAG;IAC9B,WAAW;IACX,SAAS;IACT,OAAO;IACP,OAAO;IACP,OAAO;CAC+B,CAAC"}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/services/eurostat-data/types.ts"],"names":[],"mappings":"AAAA;;;GAGG;AA4DH,qFAAqF;AACrF,MAAM,CAAC,MAAM,gBAAgB,GAAG,WAAW,CAAC;AAC5C,MAAM,CAAC,MAAM,eAAe,GAAG,UAAU,CAAC;AAC1C,MAAM,CAAC,MAAM,qBAAqB,GAAG,gBAAgB,CAAC;AAyFtD;;;;;GAKG;AACH,MAAM,CAAC,MAAM,OAAO,GAAG,KAAK,CAAC;AAI7B,4FAA4F;AAC5F,MAAM,CAAC,MAAM,gBAAgB,GAAG;IAC9B,WAAW;IACX,SAAS;IACT,OAAO;IACP,OAAO;IACP,OAAO;CAC+B,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cyanheads/eurostat-mcp-server",
3
- "version": "0.2.0",
3
+ "version": "0.4.0",
4
4
  "mcpName": "io.github.cyanheads/eurostat-mcp-server",
5
5
  "description": "Search and query the Eurostat catalogue — EU economy, demography, trade, health, and NUTS regional data via MCP. STDIO or Streamable HTTP.",
6
6
  "type": "module",
@@ -79,6 +79,7 @@
79
79
  },
80
80
  "dependencies": {
81
81
  "@cyanheads/mcp-ts-core": "^0.11.1",
82
+ "@duckdb/node-api": "^1.5.5-r.3",
82
83
  "pino-pretty": "^13.1.3",
83
84
  "zod": "^4.4.3"
84
85
  },
package/server.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "$schema": "https://static.modelcontextprotocol.io/schemas/2025-12-11/server.schema.json",
3
3
  "name": "io.github.cyanheads/eurostat-mcp-server",
4
- "description": "Search and query the Eurostat catalogue — EU economy, demography, trade, and NUTS regional data.",
4
+ "description": "Search and query the Eurostat catalogue \u2014 EU economy, demography, trade, and NUTS regional data.",
5
5
  "repository": {
6
6
  "url": "https://github.com/cyanheads/eurostat-mcp-server",
7
7
  "source": "github"
@@ -12,14 +12,14 @@
12
12
  "url": "https://eurostat.caseyjhand.com/mcp"
13
13
  }
14
14
  ],
15
- "version": "0.2.0",
15
+ "version": "0.4.0",
16
16
  "packages": [
17
17
  {
18
18
  "registryType": "npm",
19
19
  "registryBaseUrl": "https://registry.npmjs.org",
20
20
  "identifier": "@cyanheads/eurostat-mcp-server",
21
21
  "runtimeHint": "bun",
22
- "version": "0.2.0",
22
+ "version": "0.4.0",
23
23
  "packageArguments": [
24
24
  {
25
25
  "type": "positional",
@@ -58,6 +58,33 @@
58
58
  "format": "string",
59
59
  "isRequired": false,
60
60
  "default": "43200000"
61
+ },
62
+ {
63
+ "name": "CANVAS_PROVIDER_TYPE",
64
+ "description": "Set to 'duckdb' to enable the dataframe canvas, which lists the eurostat_dataframe_describe and eurostat_dataframe_query tools and lets eurostat_query_dataset stage a match larger than its 5,000-row inline cap as a SQL table. The DuckDB binding ships with the server, so this variable is the only switch.",
65
+ "format": "string",
66
+ "isRequired": false,
67
+ "default": "none"
68
+ },
69
+ {
70
+ "name": "CANVAS_TEMP_PATH",
71
+ "description": "Directory DuckDB writes canvas spill files to. Must be writable by the server process. Defaults to a 'mcp-canvas' directory under the OS temp directory.",
72
+ "format": "string",
73
+ "isRequired": false
74
+ },
75
+ {
76
+ "name": "CANVAS_TTL_MS",
77
+ "description": "Sliding lifetime of a staged dataframe canvas in milliseconds; every call against it extends the window. Defaults to 24 hours.",
78
+ "format": "string",
79
+ "isRequired": false,
80
+ "default": "86400000"
81
+ },
82
+ {
83
+ "name": "CANVAS_DEFAULT_ROW_LIMIT",
84
+ "description": "Maximum rows a single eurostat_dataframe_query returns before the result is reported as truncated.",
85
+ "format": "string",
86
+ "isRequired": false,
87
+ "default": "10000"
61
88
  }
62
89
  ],
63
90
  "transport": {
@@ -69,7 +96,7 @@
69
96
  "registryBaseUrl": "https://registry.npmjs.org",
70
97
  "identifier": "@cyanheads/eurostat-mcp-server",
71
98
  "runtimeHint": "bun",
72
- "version": "0.2.0",
99
+ "version": "0.4.0",
73
100
  "packageArguments": [
74
101
  {
75
102
  "type": "positional",
@@ -142,6 +169,33 @@
142
169
  "format": "string",
143
170
  "isRequired": false,
144
171
  "default": "43200000"
172
+ },
173
+ {
174
+ "name": "CANVAS_PROVIDER_TYPE",
175
+ "description": "Set to 'duckdb' to enable the dataframe canvas, which lists the eurostat_dataframe_describe and eurostat_dataframe_query tools and lets eurostat_query_dataset stage a match larger than its 5,000-row inline cap as a SQL table. The DuckDB binding ships with the server, so this variable is the only switch.",
176
+ "format": "string",
177
+ "isRequired": false,
178
+ "default": "none"
179
+ },
180
+ {
181
+ "name": "CANVAS_TEMP_PATH",
182
+ "description": "Directory DuckDB writes canvas spill files to. Must be writable by the server process. Defaults to a 'mcp-canvas' directory under the OS temp directory.",
183
+ "format": "string",
184
+ "isRequired": false
185
+ },
186
+ {
187
+ "name": "CANVAS_TTL_MS",
188
+ "description": "Sliding lifetime of a staged dataframe canvas in milliseconds; every call against it extends the window. Defaults to 24 hours.",
189
+ "format": "string",
190
+ "isRequired": false,
191
+ "default": "86400000"
192
+ },
193
+ {
194
+ "name": "CANVAS_DEFAULT_ROW_LIMIT",
195
+ "description": "Maximum rows a single eurostat_dataframe_query returns before the result is reported as truncated.",
196
+ "format": "string",
197
+ "isRequired": false,
198
+ "default": "10000"
145
199
  }
146
200
  ],
147
201
  "transport": {