@cyanheads/eurostat-mcp-server 0.11.2 → 0.11.3

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 (93) hide show
  1. package/AGENTS.md +6 -4
  2. package/CLAUDE.md +6 -4
  3. package/README.md +17 -15
  4. package/changelog/0.11.x/0.11.3.md +45 -0
  5. package/changelog/template.md +10 -3
  6. package/dist/config/server-config.js +1 -1
  7. package/dist/config/server-config.js.map +1 -1
  8. package/dist/mcp-server/tools/definitions/eurostat-browse-themes.tool.d.ts +1 -1
  9. package/dist/mcp-server/tools/definitions/eurostat-browse-themes.tool.js +2 -2
  10. package/dist/mcp-server/tools/definitions/eurostat-browse-themes.tool.js.map +1 -1
  11. package/dist/mcp-server/tools/definitions/eurostat-dataframe-describe.tool.js +2 -2
  12. package/dist/mcp-server/tools/definitions/eurostat-dataframe-describe.tool.js.map +1 -1
  13. package/dist/mcp-server/tools/definitions/eurostat-dataframe-drop.tool.js +1 -1
  14. package/dist/mcp-server/tools/definitions/eurostat-dataframe-drop.tool.js.map +1 -1
  15. package/dist/mcp-server/tools/definitions/eurostat-dataframe-query.tool.js +1 -1
  16. package/dist/mcp-server/tools/definitions/eurostat-dataframe-query.tool.js.map +1 -1
  17. package/dist/mcp-server/tools/definitions/eurostat-download-dataset.tool.d.ts +18 -6
  18. package/dist/mcp-server/tools/definitions/eurostat-download-dataset.tool.d.ts.map +1 -1
  19. package/dist/mcp-server/tools/definitions/eurostat-download-dataset.tool.js +129 -31
  20. package/dist/mcp-server/tools/definitions/eurostat-download-dataset.tool.js.map +1 -1
  21. package/dist/mcp-server/tools/definitions/eurostat-get-dataset-info.tool.js +1 -1
  22. package/dist/mcp-server/tools/definitions/eurostat-get-dataset-info.tool.js.map +1 -1
  23. package/dist/mcp-server/tools/definitions/eurostat-get-dimension-values.tool.d.ts +6 -4
  24. package/dist/mcp-server/tools/definitions/eurostat-get-dimension-values.tool.d.ts.map +1 -1
  25. package/dist/mcp-server/tools/definitions/eurostat-get-dimension-values.tool.js +139 -53
  26. package/dist/mcp-server/tools/definitions/eurostat-get-dimension-values.tool.js.map +1 -1
  27. package/dist/mcp-server/tools/definitions/eurostat-query-dataset.tool.d.ts +20 -8
  28. package/dist/mcp-server/tools/definitions/eurostat-query-dataset.tool.d.ts.map +1 -1
  29. package/dist/mcp-server/tools/definitions/eurostat-query-dataset.tool.js +208 -43
  30. package/dist/mcp-server/tools/definitions/eurostat-query-dataset.tool.js.map +1 -1
  31. package/dist/mcp-server/tools/definitions/eurostat-search-datasets.tool.d.ts +16 -6
  32. package/dist/mcp-server/tools/definitions/eurostat-search-datasets.tool.d.ts.map +1 -1
  33. package/dist/mcp-server/tools/definitions/eurostat-search-datasets.tool.js +62 -23
  34. package/dist/mcp-server/tools/definitions/eurostat-search-datasets.tool.js.map +1 -1
  35. package/dist/mcp-server/tools/narrowing-advice.d.ts +64 -3
  36. package/dist/mcp-server/tools/narrowing-advice.d.ts.map +1 -1
  37. package/dist/mcp-server/tools/narrowing-advice.js +160 -4
  38. package/dist/mcp-server/tools/narrowing-advice.js.map +1 -1
  39. package/dist/mcp-server/tools/notice-text.d.ts +18 -0
  40. package/dist/mcp-server/tools/notice-text.d.ts.map +1 -0
  41. package/dist/mcp-server/tools/notice-text.js +40 -0
  42. package/dist/mcp-server/tools/notice-text.js.map +1 -0
  43. package/dist/mcp-server/tools/value-list-paging.d.ts +11 -1
  44. package/dist/mcp-server/tools/value-list-paging.d.ts.map +1 -1
  45. package/dist/mcp-server/tools/value-list-paging.js +13 -1
  46. package/dist/mcp-server/tools/value-list-paging.js.map +1 -1
  47. package/dist/services/eurostat-bulk/eurostat-bulk-service.d.ts +4 -3
  48. package/dist/services/eurostat-bulk/eurostat-bulk-service.d.ts.map +1 -1
  49. package/dist/services/eurostat-bulk/eurostat-bulk-service.js +107 -54
  50. package/dist/services/eurostat-bulk/eurostat-bulk-service.js.map +1 -1
  51. package/dist/services/eurostat-bulk/types.d.ts +27 -4
  52. package/dist/services/eurostat-bulk/types.d.ts.map +1 -1
  53. package/dist/services/eurostat-bulk/types.js.map +1 -1
  54. package/dist/services/eurostat-catalogue/dimension-value-index.d.ts +81 -0
  55. package/dist/services/eurostat-catalogue/dimension-value-index.d.ts.map +1 -0
  56. package/dist/services/eurostat-catalogue/dimension-value-index.js +410 -0
  57. package/dist/services/eurostat-catalogue/dimension-value-index.js.map +1 -0
  58. package/dist/services/eurostat-catalogue/eurostat-catalogue-service.d.ts +87 -7
  59. package/dist/services/eurostat-catalogue/eurostat-catalogue-service.d.ts.map +1 -1
  60. package/dist/services/eurostat-catalogue/eurostat-catalogue-service.js +333 -81
  61. package/dist/services/eurostat-catalogue/eurostat-catalogue-service.js.map +1 -1
  62. package/dist/services/eurostat-catalogue/search-text.d.ts +12 -0
  63. package/dist/services/eurostat-catalogue/search-text.d.ts.map +1 -0
  64. package/dist/services/eurostat-catalogue/search-text.js +31 -0
  65. package/dist/services/eurostat-catalogue/search-text.js.map +1 -0
  66. package/dist/services/eurostat-catalogue/types.d.ts +11 -0
  67. package/dist/services/eurostat-catalogue/types.d.ts.map +1 -1
  68. package/dist/services/eurostat-data/eurostat-data-service.d.ts +26 -5
  69. package/dist/services/eurostat-data/eurostat-data-service.d.ts.map +1 -1
  70. package/dist/services/eurostat-data/eurostat-data-service.js +132 -16
  71. package/dist/services/eurostat-data/eurostat-data-service.js.map +1 -1
  72. package/dist/services/eurostat-data/sdmx-metadata.d.ts.map +1 -1
  73. package/dist/services/eurostat-data/sdmx-metadata.js +4 -20
  74. package/dist/services/eurostat-data/sdmx-metadata.js.map +1 -1
  75. package/dist/services/eurostat-data/types.d.ts +92 -2
  76. package/dist/services/eurostat-data/types.d.ts.map +1 -1
  77. package/dist/services/eurostat-data/types.js.map +1 -1
  78. package/dist/services/eurostat-filters.d.ts +18 -6
  79. package/dist/services/eurostat-filters.d.ts.map +1 -1
  80. package/dist/services/eurostat-filters.js +24 -7
  81. package/dist/services/eurostat-filters.js.map +1 -1
  82. package/dist/services/eurostat-periods.d.ts +54 -1
  83. package/dist/services/eurostat-periods.d.ts.map +1 -1
  84. package/dist/services/eurostat-periods.js +101 -1
  85. package/dist/services/eurostat-periods.js.map +1 -1
  86. package/dist/services/xml-entities.d.ts +13 -0
  87. package/dist/services/xml-entities.d.ts.map +1 -0
  88. package/dist/services/xml-entities.js +31 -0
  89. package/dist/services/xml-entities.js.map +1 -0
  90. package/package.json +5 -5
  91. package/server.json +5 -5
  92. package/skills/eurostat-guide/SKILL.md +6 -6
  93. package/skills/eurostat-guide/references/sql-analysis.md +5 -5
@@ -7,6 +7,27 @@ import type { Context } from '@cyanheads/mcp-ts-core';
7
7
  import type { AppConfig } from '@cyanheads/mcp-ts-core/config';
8
8
  import type { StorageService } from '@cyanheads/mcp-ts-core/storage';
9
9
  import type { BrowseItem, DatasetResult } from './types.js';
10
+ /** Most distinct words a search that matches no catalogue text looks for in dimension values. */
11
+ export declare const MAX_VALUE_SEARCH_WORDS = 10;
12
+ /** Most distinct words, in query order, a search that matches nothing names as held by no dataset. */
13
+ export declare const MAX_UNMATCHED_WORD_CHECKS = 32;
14
+ /**
15
+ * How a dataset matched a search, best first: 0, its label holds the words as a phrase
16
+ * starting at a word start; 1, its label or code holds every word; 2, some word matched
17
+ * only in its theme breadcrumb.
18
+ */
19
+ export type SearchTier = 0 | 1 | 2;
20
+ /**
21
+ * The tier test for one search over `words`, whitespace-free tokens as `search()` splits a
22
+ * query. The returned function ranks a dataset from its label, folded by
23
+ * {@link foldSearchText}, and its code, never its breadcrumb, so every TOC placement of a
24
+ * code ranks alike. The phrase is the words joined by single spaces and folded the same way;
25
+ * it must start where no letter or digit precedes it, so "employment rate" is not found
26
+ * inside "Unemployment rate". The word test is the substring test matching applies.
27
+ */
28
+ export declare function searchTierOf(words: readonly string[]): (foldedLabel: string, code: string) => SearchTier;
29
+ /** Why a search that matched no catalogue text did not read dimension values. */
30
+ export type ValuesNotSearched = 'index_unavailable' | 'too_many_words';
10
31
  export declare class EurostatCatalogueService {
11
32
  private cache;
12
33
  /** Shared in-flight refresh so concurrent callers past the TTL trigger one fetch. */
@@ -19,6 +40,11 @@ export declare class EurostatCatalogueService {
19
40
  * past its TTL that the refresh could not replace.
20
41
  */
21
42
  private refreshRetryAt;
43
+ /**
44
+ * The dimension value index a search that matches no catalogue text reads. Undefined until
45
+ * a TOC load starts the first index load.
46
+ */
47
+ private valueIndex;
22
48
  constructor(_config: AppConfig, _storage: StorageService);
23
49
  /**
24
50
  * Ensure a usable TOC is loaded. A cache younger than the configured TTL is
@@ -43,16 +69,28 @@ export declare class EurostatCatalogueService {
43
69
  * Only the TOC is required. A Comext list that fails to load leaves the catalogue
44
70
  * answering from the TOC alone: the failure is logged, and the merge is retried
45
71
  * after `REFRESH_RETRY_COOLDOWN_MS` without re-fetching the TOC.
72
+ *
73
+ * Every TOC load also starts the dimension value index load, which nothing awaits.
46
74
  */
47
75
  private fetchAndParseToc;
48
76
  /** Retry a failed Comext merge onto the TOC already held; concurrent callers share it. */
49
77
  private retryComextMerge;
50
78
  private logComextFailure;
79
+ /**
80
+ * Start a dimension value index load unless one is in flight, a failed load's backoff has
81
+ * not elapsed, or the index in service is younger than the TOC's TTL. Catalogue calls never
82
+ * wait for it: the load runs detached from the calling request and its trace, logs to the
83
+ * server log, and settles into the slot. A failure keeps the previous index in service and
84
+ * holds off the next attempt for `REFRESH_RETRY_COOLDOWN_MS`, doubling with each failure in
85
+ * a row up to the TOC's TTL.
86
+ */
87
+ private loadValueIndex;
51
88
  /**
52
89
  * Assemble a catalogue snapshot. `flows` undefined means the Comext list failed to
53
90
  * load, which arms the merge retry. `loadedAt` is the TOC's load time — the TTL and
54
- * the cursor generation both key on it. A later merge only appends entries, so a
55
- * cursor paged over the TOC alone still addresses the same leading matches.
91
+ * the cursor generation both key on it. A later merge only appends entries, and
92
+ * `search()` pages entries appended after a walk began behind the ones it began over, so
93
+ * a cursor paged over the TOC alone still pages every match once.
56
94
  */
57
95
  private buildCache;
58
96
  /** The Comext host's dataflow list — the `DS-*` collections the TOC does not carry. */
@@ -134,12 +172,16 @@ export declare class EurostatCatalogueService {
134
172
  * Decode a search cursor and confirm it belongs to this search. Malformed,
135
173
  * cross-query and superseded-snapshot cursors are rejected identically —
136
174
  * the caller's recovery is the same in all three cases, and the cursor is
137
- * opaque, so telling them apart would only describe its internal shape.
175
+ * opaque, so telling them apart would only describe its internal shape. `entryCount`,
176
+ * the snapshot's length when the walk began, can be no more than its length now.
177
+ * `valueIndex`, present on a walk over rows found through dimension values, is checked
178
+ * once `search()` knows which rows it pages.
138
179
  */
139
180
  private decodeSearchCursor;
181
+ /** One search result row for the TOC placement `entries[i]`. */
182
+ private toDatasetResult;
140
183
  /**
141
- * Each dataset's search text — label, breadcrumb, and code, lowercased, with whitespace
142
- * beside punctuation removed — indexed like `entries`. Folders, which search never
184
+ * Each dataset's search text, indexed like `entries`. Folders, which search never
143
185
  * returns, are undefined.
144
186
  */
145
187
  private buildSearchText;
@@ -151,8 +193,25 @@ export declare class EurostatCatalogueService {
151
193
  * typed. One pass: a placement missing exactly one word rescues its code for that
152
194
  * word, and a code counts once per word whichever placement rescued it — so each count
153
195
  * equals the `totalMatches` of the same search without that word.
196
+ *
197
+ * `unmatchedWords` is drawn from the first {@link MAX_UNMATCHED_WORD_CHECKS} distinct
198
+ * words. `unmatchedWordsPartial` is set when a word past them is held by no text the pass
199
+ * read, so it may be one no dataset carries.
154
200
  */
155
201
  private countWithoutEachWord;
202
+ /**
203
+ * The datasets a query that matched no catalogue text finds when a word may also occur
204
+ * at a word start of the English label of a value the metabase lists for the dataset.
205
+ * Every word must still be found, in the dataset's own text or in a value's label. Each
206
+ * code keeps its placement whose text holds the most words, the first such in TOC order.
207
+ *
208
+ * Ordered by fewer words found only through values; then rows where one value's label
209
+ * carries all of those words; then {@link searchTierOf} over the tokens the dataset's text
210
+ * holds, in query order; then TOC order. `marks` holds, for each word found through
211
+ * values, which labels carry it. `words` are the query's distinct tokens, at most
212
+ * {@link MAX_VALUE_SEARCH_WORDS}.
213
+ */
214
+ private searchValues;
156
215
  /**
157
216
  * Search datasets by keyword. The query is tokenized on whitespace and every
158
217
  * token must match (AND), case-insensitively, somewhere in a combined
@@ -167,18 +226,36 @@ export declare class EurostatCatalogueService {
167
226
  * several TOC branches keeps its first matching placement as the canonical
168
227
  * `themePath`, so totals and page slots count unique query targets.
169
228
  *
229
+ * Matches are ordered by {@link searchTierOf} over the tokens — label phrase, then
230
+ * every word in label or code, then breadcrumb-only — and by that first matching
231
+ * placement within a tier. A tier reads the label and code alone, so it is the same
232
+ * whichever placement supplied the `themePath`.
233
+ *
170
234
  * Results are paginated with an opaque cursor (`limit` = page size, capped at
171
235
  * 100) bound to the normalized query and the catalogue snapshot that produced
172
236
  * it. An unusable cursor — malformed, from another query, or from a catalogue
173
237
  * since refreshed — is rejected as `invalid_cursor` instead of silently paging
174
- * a different result set.
238
+ * a different result set. A Comext merge that lands mid-walk keeps the snapshot,
239
+ * so the cursor also carries the snapshot's length when the walk began: the
240
+ * datasets the merge appended page after every match the walk began over, each
241
+ * match still once.
242
+ *
243
+ * When no dataset's text holds every token, {@link searchValues} looks for the tokens
244
+ * the text lacks in the English labels of the dataset's dimension values. Its rows
245
+ * carry `matchedValues` and the result `matchedThroughValues`, and their cursor also
246
+ * binds the value index snapshot (`valueIndex`), so an index refresh mid-walk rejects it
247
+ * like a catalogue refresh. No search waits for the index: until one has loaded,
248
+ * `valuesNotSearched` is `index_unavailable`; past {@link MAX_VALUE_SEARCH_WORDS}
249
+ * distinct tokens it is `too_many_words`.
175
250
  *
176
251
  * An empty match reports the `DS-*` codes the query names that neither source lists
177
252
  * (`undisseminatedCodes`), so the caller can be told the collection is not
178
253
  * disseminated rather than to broaden the search, and — for two or more distinct
179
254
  * words — each word whose removal alone finds matches (`wordRemovalCounts`) and each
180
255
  * word no dataset's search text contains (`unmatchedWords`, as first typed), with
181
- * `allWordsUnmatched` when that is every word. `comextListMissing` flags that the
256
+ * `allWordsUnmatched` when that is every word. `unmatchedWords` reads the first
257
+ * {@link MAX_UNMATCHED_WORD_CHECKS} distinct words; `unmatchedWordsPartial` flags a query
258
+ * with a later word that may be one no dataset carries. `comextListMissing` flags that the
182
259
  * Comext list is not merged right now, so the `DS-*` collections were not searched and
183
260
  * absence from that list proves nothing; `catalogueLoadedAt` marks a catalogue a
184
261
  * failed refresh could not replace.
@@ -188,10 +265,13 @@ export declare class EurostatCatalogueService {
188
265
  catalogueLoadedAt?: string;
189
266
  comextListMissing?: boolean;
190
267
  datasets: DatasetResult[];
268
+ matchedThroughValues?: true;
191
269
  nextCursor?: string;
192
270
  totalMatches: number;
193
271
  undisseminatedCodes?: string[];
194
272
  unmatchedWords?: string[];
273
+ unmatchedWordsPartial?: true;
274
+ valuesNotSearched?: ValuesNotSearched;
195
275
  wordRemovalCounts?: Array<{
196
276
  totalMatches: number;
197
277
  word: string;
@@ -1 +1 @@
1
- {"version":3,"file":"eurostat-catalogue-service.d.ts","sourceRoot":"","sources":["../../../src/services/eurostat-catalogue/eurostat-catalogue-service.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"eurostat-catalogue-service.d.ts","sourceRoot":"","sources":["../../../src/services/eurostat-catalogue/eurostat-catalogue-service.ts"],"names":[],"mappings":"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"}