@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.
- package/AGENTS.md +6 -4
- package/CLAUDE.md +6 -4
- package/README.md +17 -15
- package/changelog/0.11.x/0.11.3.md +45 -0
- package/changelog/template.md +10 -3
- package/dist/config/server-config.js +1 -1
- package/dist/config/server-config.js.map +1 -1
- package/dist/mcp-server/tools/definitions/eurostat-browse-themes.tool.d.ts +1 -1
- package/dist/mcp-server/tools/definitions/eurostat-browse-themes.tool.js +2 -2
- package/dist/mcp-server/tools/definitions/eurostat-browse-themes.tool.js.map +1 -1
- package/dist/mcp-server/tools/definitions/eurostat-dataframe-describe.tool.js +2 -2
- package/dist/mcp-server/tools/definitions/eurostat-dataframe-describe.tool.js.map +1 -1
- package/dist/mcp-server/tools/definitions/eurostat-dataframe-drop.tool.js +1 -1
- package/dist/mcp-server/tools/definitions/eurostat-dataframe-drop.tool.js.map +1 -1
- package/dist/mcp-server/tools/definitions/eurostat-dataframe-query.tool.js +1 -1
- package/dist/mcp-server/tools/definitions/eurostat-dataframe-query.tool.js.map +1 -1
- package/dist/mcp-server/tools/definitions/eurostat-download-dataset.tool.d.ts +18 -6
- package/dist/mcp-server/tools/definitions/eurostat-download-dataset.tool.d.ts.map +1 -1
- package/dist/mcp-server/tools/definitions/eurostat-download-dataset.tool.js +129 -31
- package/dist/mcp-server/tools/definitions/eurostat-download-dataset.tool.js.map +1 -1
- package/dist/mcp-server/tools/definitions/eurostat-get-dataset-info.tool.js +1 -1
- package/dist/mcp-server/tools/definitions/eurostat-get-dataset-info.tool.js.map +1 -1
- package/dist/mcp-server/tools/definitions/eurostat-get-dimension-values.tool.d.ts +6 -4
- package/dist/mcp-server/tools/definitions/eurostat-get-dimension-values.tool.d.ts.map +1 -1
- package/dist/mcp-server/tools/definitions/eurostat-get-dimension-values.tool.js +139 -53
- package/dist/mcp-server/tools/definitions/eurostat-get-dimension-values.tool.js.map +1 -1
- package/dist/mcp-server/tools/definitions/eurostat-query-dataset.tool.d.ts +20 -8
- package/dist/mcp-server/tools/definitions/eurostat-query-dataset.tool.d.ts.map +1 -1
- package/dist/mcp-server/tools/definitions/eurostat-query-dataset.tool.js +208 -43
- package/dist/mcp-server/tools/definitions/eurostat-query-dataset.tool.js.map +1 -1
- package/dist/mcp-server/tools/definitions/eurostat-search-datasets.tool.d.ts +16 -6
- package/dist/mcp-server/tools/definitions/eurostat-search-datasets.tool.d.ts.map +1 -1
- package/dist/mcp-server/tools/definitions/eurostat-search-datasets.tool.js +62 -23
- package/dist/mcp-server/tools/definitions/eurostat-search-datasets.tool.js.map +1 -1
- package/dist/mcp-server/tools/narrowing-advice.d.ts +64 -3
- package/dist/mcp-server/tools/narrowing-advice.d.ts.map +1 -1
- package/dist/mcp-server/tools/narrowing-advice.js +160 -4
- package/dist/mcp-server/tools/narrowing-advice.js.map +1 -1
- package/dist/mcp-server/tools/notice-text.d.ts +18 -0
- package/dist/mcp-server/tools/notice-text.d.ts.map +1 -0
- package/dist/mcp-server/tools/notice-text.js +40 -0
- package/dist/mcp-server/tools/notice-text.js.map +1 -0
- package/dist/mcp-server/tools/value-list-paging.d.ts +11 -1
- package/dist/mcp-server/tools/value-list-paging.d.ts.map +1 -1
- package/dist/mcp-server/tools/value-list-paging.js +13 -1
- package/dist/mcp-server/tools/value-list-paging.js.map +1 -1
- package/dist/services/eurostat-bulk/eurostat-bulk-service.d.ts +4 -3
- package/dist/services/eurostat-bulk/eurostat-bulk-service.d.ts.map +1 -1
- package/dist/services/eurostat-bulk/eurostat-bulk-service.js +107 -54
- package/dist/services/eurostat-bulk/eurostat-bulk-service.js.map +1 -1
- package/dist/services/eurostat-bulk/types.d.ts +27 -4
- package/dist/services/eurostat-bulk/types.d.ts.map +1 -1
- package/dist/services/eurostat-bulk/types.js.map +1 -1
- package/dist/services/eurostat-catalogue/dimension-value-index.d.ts +81 -0
- package/dist/services/eurostat-catalogue/dimension-value-index.d.ts.map +1 -0
- package/dist/services/eurostat-catalogue/dimension-value-index.js +410 -0
- package/dist/services/eurostat-catalogue/dimension-value-index.js.map +1 -0
- package/dist/services/eurostat-catalogue/eurostat-catalogue-service.d.ts +87 -7
- package/dist/services/eurostat-catalogue/eurostat-catalogue-service.d.ts.map +1 -1
- package/dist/services/eurostat-catalogue/eurostat-catalogue-service.js +333 -81
- package/dist/services/eurostat-catalogue/eurostat-catalogue-service.js.map +1 -1
- package/dist/services/eurostat-catalogue/search-text.d.ts +12 -0
- package/dist/services/eurostat-catalogue/search-text.d.ts.map +1 -0
- package/dist/services/eurostat-catalogue/search-text.js +31 -0
- package/dist/services/eurostat-catalogue/search-text.js.map +1 -0
- package/dist/services/eurostat-catalogue/types.d.ts +11 -0
- package/dist/services/eurostat-catalogue/types.d.ts.map +1 -1
- package/dist/services/eurostat-data/eurostat-data-service.d.ts +26 -5
- package/dist/services/eurostat-data/eurostat-data-service.d.ts.map +1 -1
- package/dist/services/eurostat-data/eurostat-data-service.js +132 -16
- package/dist/services/eurostat-data/eurostat-data-service.js.map +1 -1
- package/dist/services/eurostat-data/sdmx-metadata.d.ts.map +1 -1
- package/dist/services/eurostat-data/sdmx-metadata.js +4 -20
- package/dist/services/eurostat-data/sdmx-metadata.js.map +1 -1
- package/dist/services/eurostat-data/types.d.ts +92 -2
- package/dist/services/eurostat-data/types.d.ts.map +1 -1
- package/dist/services/eurostat-data/types.js.map +1 -1
- package/dist/services/eurostat-filters.d.ts +18 -6
- package/dist/services/eurostat-filters.d.ts.map +1 -1
- package/dist/services/eurostat-filters.js +24 -7
- package/dist/services/eurostat-filters.js.map +1 -1
- package/dist/services/eurostat-periods.d.ts +54 -1
- package/dist/services/eurostat-periods.d.ts.map +1 -1
- package/dist/services/eurostat-periods.js +101 -1
- package/dist/services/eurostat-periods.js.map +1 -1
- package/dist/services/xml-entities.d.ts +13 -0
- package/dist/services/xml-entities.d.ts.map +1 -0
- package/dist/services/xml-entities.js +31 -0
- package/dist/services/xml-entities.js.map +1 -0
- package/package.json +5 -5
- package/server.json +5 -5
- package/skills/eurostat-guide/SKILL.md +6 -6
- 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,
|
|
55
|
-
*
|
|
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
|
|
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. `
|
|
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":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AACtD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,+BAA+B,CAAC;
|
|
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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"}
|