@cyanheads/eurostat-mcp-server 0.10.1 → 0.11.1

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 (66) hide show
  1. package/AGENTS.md +15 -4
  2. package/CLAUDE.md +15 -4
  3. package/Dockerfile +4 -0
  4. package/README.md +41 -102
  5. package/changelog/0.11.x/0.11.0.md +33 -0
  6. package/changelog/0.11.x/0.11.1.md +23 -0
  7. package/dist/config/server-config.js +1 -1
  8. package/dist/config/server-config.js.map +1 -1
  9. package/dist/index.js +4 -9
  10. package/dist/index.js.map +1 -1
  11. package/dist/mcp-server/tools/clamp-read-limit.d.ts +1 -1
  12. package/dist/mcp-server/tools/clamp-read-limit.d.ts.map +1 -1
  13. package/dist/mcp-server/tools/clamp-read-limit.js.map +1 -1
  14. package/dist/mcp-server/tools/definitions/eurostat-browse-themes.tool.d.ts.map +1 -1
  15. package/dist/mcp-server/tools/definitions/eurostat-browse-themes.tool.js +6 -5
  16. package/dist/mcp-server/tools/definitions/eurostat-browse-themes.tool.js.map +1 -1
  17. package/dist/mcp-server/tools/definitions/eurostat-dataframe-query.tool.d.ts.map +1 -1
  18. package/dist/mcp-server/tools/definitions/eurostat-dataframe-query.tool.js +9 -56
  19. package/dist/mcp-server/tools/definitions/eurostat-dataframe-query.tool.js.map +1 -1
  20. package/dist/mcp-server/tools/definitions/eurostat-download-dataset.tool.d.ts +6 -6
  21. package/dist/mcp-server/tools/definitions/eurostat-download-dataset.tool.d.ts.map +1 -1
  22. package/dist/mcp-server/tools/definitions/eurostat-download-dataset.tool.js +39 -18
  23. package/dist/mcp-server/tools/definitions/eurostat-download-dataset.tool.js.map +1 -1
  24. package/dist/mcp-server/tools/definitions/eurostat-get-dimension-values.tool.d.ts +71 -2
  25. package/dist/mcp-server/tools/definitions/eurostat-get-dimension-values.tool.d.ts.map +1 -1
  26. package/dist/mcp-server/tools/definitions/eurostat-get-dimension-values.tool.js +50 -57
  27. package/dist/mcp-server/tools/definitions/eurostat-get-dimension-values.tool.js.map +1 -1
  28. package/dist/mcp-server/tools/definitions/eurostat-query-dataset.tool.d.ts +6 -4
  29. package/dist/mcp-server/tools/definitions/eurostat-query-dataset.tool.d.ts.map +1 -1
  30. package/dist/mcp-server/tools/definitions/eurostat-query-dataset.tool.js +108 -37
  31. package/dist/mcp-server/tools/definitions/eurostat-query-dataset.tool.js.map +1 -1
  32. package/dist/mcp-server/tools/hoist-dimensions.d.ts +18 -0
  33. package/dist/mcp-server/tools/hoist-dimensions.d.ts.map +1 -0
  34. package/dist/mcp-server/tools/hoist-dimensions.js +29 -0
  35. package/dist/mcp-server/tools/hoist-dimensions.js.map +1 -0
  36. package/dist/mcp-server/tools/narrowing-advice.d.ts +8 -7
  37. package/dist/mcp-server/tools/narrowing-advice.d.ts.map +1 -1
  38. package/dist/mcp-server/tools/narrowing-advice.js +16 -9
  39. package/dist/mcp-server/tools/narrowing-advice.js.map +1 -1
  40. package/dist/mcp-server/tools/value-list-paging.d.ts +1 -29
  41. package/dist/mcp-server/tools/value-list-paging.d.ts.map +1 -1
  42. package/dist/mcp-server/tools/value-list-paging.js +1 -47
  43. package/dist/mcp-server/tools/value-list-paging.js.map +1 -1
  44. package/dist/services/eurostat-bulk/eurostat-bulk-service.d.ts.map +1 -1
  45. package/dist/services/eurostat-bulk/eurostat-bulk-service.js +31 -5
  46. package/dist/services/eurostat-bulk/eurostat-bulk-service.js.map +1 -1
  47. package/dist/services/eurostat-catalogue/eurostat-catalogue-service.d.ts +1 -0
  48. package/dist/services/eurostat-catalogue/eurostat-catalogue-service.d.ts.map +1 -1
  49. package/dist/services/eurostat-catalogue/eurostat-catalogue-service.js +14 -3
  50. package/dist/services/eurostat-catalogue/eurostat-catalogue-service.js.map +1 -1
  51. package/dist/services/eurostat-data/eurostat-data-service.d.ts +5 -1
  52. package/dist/services/eurostat-data/eurostat-data-service.d.ts.map +1 -1
  53. package/dist/services/eurostat-data/eurostat-data-service.js +66 -26
  54. package/dist/services/eurostat-data/eurostat-data-service.js.map +1 -1
  55. package/dist/services/eurostat-data/types.d.ts +9 -10
  56. package/dist/services/eurostat-data/types.d.ts.map +1 -1
  57. package/dist/services/eurostat-data/types.js +2 -2
  58. package/dist/services/eurostat-data/types.js.map +1 -1
  59. package/dist/services/eurostat-periods.d.ts +107 -1
  60. package/dist/services/eurostat-periods.d.ts.map +1 -1
  61. package/dist/services/eurostat-periods.js +182 -7
  62. package/dist/services/eurostat-periods.js.map +1 -1
  63. package/package.json +8 -7
  64. package/server.json +9 -9
  65. package/skills/eurostat-guide/SKILL.md +60 -0
  66. package/skills/eurostat-guide/references/sql-analysis.md +40 -0
@@ -6,6 +6,7 @@ import { tool, z } from '@cyanheads/mcp-ts-core';
6
6
  import { CanvasIdSchema } from '@cyanheads/mcp-ts-core/canvas';
7
7
  import { JsonRpcErrorCode } from '@cyanheads/mcp-ts-core/errors';
8
8
  import { clampReadLimit } from '../clamp-read-limit.js';
9
+ import { hoistDimensions } from '../hoist-dimensions.js';
9
10
  import { dimensionsToNarrow, narrowingAdvice } from '../narrowing-advice.js';
10
11
  import { acquireCanvas, getCanvas, isCanvasFailure, newTableName, } from '../../../services/canvas-accessor.js';
11
12
  import { getEurostatDataService, observationRowSchema, } from '../../../services/eurostat-data/eurostat-data-service.js';
@@ -13,19 +14,18 @@ import { GEO_LEVEL_VALUES, OBS_CAP, } from '../../../services/eurostat-data/type
13
14
  import { dropUnsetFilters } from '../../../services/eurostat-filters.js';
14
15
  import { isComextDataset } from '../../../services/eurostat-hosts.js';
15
16
  import { outageAnswer } from '../../../services/eurostat-outage.js';
16
- import { PERIOD_FORMS, resolvePeriods } from '../../../services/eurostat-periods.js';
17
+ import { cutNotice, cutSelector, PERIOD_FORMS, resolvePeriods, } from '../../../services/eurostat-periods.js';
17
18
  /** Upper bound on the deterministic observation prefix returned inline. */
18
19
  const PREVIEW_MAX = 500;
19
20
  /**
20
- * Newest valueless periods a `no_results` error lists. A daily dataset's time index
21
- * runs to ~14,000 periods, so the list is bounded; `matchedPeriodCount` carries the
22
- * full count and the message the full span.
21
+ * Newest unpopulated periods listed in empty-result errors and successful gap notices.
22
+ * Daily indexes can contain thousands of positions; each disclosure keeps the full count.
23
23
  */
24
24
  const MATCHED_PERIODS_LISTED = 24;
25
25
  /** Selects the advertised limit policy before registration. */
26
26
  export const createEurostatQueryDataset = (clampLimits) => tool('eurostat_query_dataset', {
27
27
  title: 'Query Eurostat Dataset',
28
- description: 'Fetch statistical data from a Eurostat dataset with dimension filters. Returns a deterministic inline prefix of decoded observations with dimension codes and labels, numeric values, an OBS_FLAG status (e.g., "p" = provisional, "e" = estimated) and a separate CONF_STATUS confidentiality marker (e.g., "C" = confidential, which is usually why a value is null). preview_limit controls only that prefix; filters and period controls reduce the matched result itself. Call eurostat_get_dataset_info first to discover valid dimension codes and values. Apply filters to keep the result set manageable — large unfiltered queries may trigger an async response error. Use filters.geo for specific country/region codes, or geo_level for NUTS hierarchy filtering (mutually exclusive). Use last_n_periods for the N most recent periods without knowing the end date. Matches above 5,000 observations are staged whole when this deployment runs a dataframe canvas: call eurostat_dataframe_describe first, then eurostat_dataframe_query. Matches at or below 5,000 are never staged. When the target is a whole dataset rather than a slice, eurostat_download_dataset reads the SDMX bulk endpoint instead and is the cheaper route.',
28
+ description: 'Fetch statistical data from a Eurostat dataset with dimension filters. Returns a deterministic inline prefix of decoded observations with dimension codes and labels, numeric values, an OBS_FLAG status (e.g., "p" = provisional, "e" = estimated) and a separate CONF_STATUS confidentiality marker (e.g., "C" = confidential, which is usually why a value is null). preview_limit controls only that prefix; filters and period controls reduce the matched result itself. Call eurostat_get_dataset_info first to discover valid dimension codes and values. Apply filters to keep the result set manageable — large unfiltered queries may trigger an async response error. Use filters.geo for specific country/region codes, or geo_level for NUTS hierarchy filtering (mutually exclusive). Use last_n_periods for the N most recent dataset time positions without knowing the end date; a notice names selected periods with no populated cells for the slice. Set stage=true to stage the whole match at any size on a canvas-enabled deployment; matches above 5,000 observations stage automatically. Call eurostat_dataframe_describe first, then eurostat_dataframe_query. When the target is a whole dataset rather than a slice, eurostat_download_dataset reads the SDMX bulk endpoint instead and is the cheaper route.',
29
29
  annotations: { readOnlyHint: true, idempotentHint: true, openWorldHint: true },
30
30
  input: z.object({
31
31
  dataset_code: z
@@ -43,27 +43,31 @@ export const createEurostatQueryDataset = (clampLimits) => tool('eurostat_query_
43
43
  since_period: z
44
44
  .string()
45
45
  .optional()
46
- .describe(`Start of the time range, inclusive. Accepted forms: ${PERIOD_FORMS} (e.g., "2020", "2023-Q1", "2024-01"). Extra leading zeros after the letter are dropped ("2020-Q01" is sent as "2020-Q1"), a day of the year is sent as three digits ("2026-D1" as "2026-D001"), and YYYY-A1 is sent as YYYY. A period of another frequency is mapped onto the dataset's own, so "2020-01" works on annual data. A malformed or non-existent period (e.g., "2020-13") is rejected as invalid_period. Mutually exclusive with last_n_periods.`),
46
+ .describe(`Start of the time range, inclusive. Accepted forms: ${PERIOD_FORMS} (e.g., "2020", "2023-Q1", "2024-01"). Extra leading zeros after the letter are dropped ("2020-Q01" is sent as "2020-Q1"), a day of the year is sent as three digits ("2026-D1" as "2026-D001"), and YYYY-A1 is sent as YYYY. Any form works on any dataset, read as a span of days, but Eurostat keeps only periods wholly inside the range, per frequency: "2022-06" on annual data excludes 2022, which starts before the bound, and a notice names that period when the response shows its frequency. A range whose first and last day are the same day is sent as that one date. A malformed or non-existent period (e.g., "2020-13") is rejected as invalid_period. Mutually exclusive with last_n_periods.`),
47
47
  until_period: z
48
48
  .string()
49
49
  .optional()
50
- .describe('End of the time range, inclusive (e.g., "2024"), in the same forms as since_period. Omit for data through the latest available period. The range must hold at least one day: a since_period that starts after until_period ends is rejected as invalid_period, while pairs of different frequencies are fine ("2020-06" to "2020"). Mutually exclusive with last_n_periods.'),
50
+ .describe('End of the time range, inclusive (e.g., "2024"), in the same forms as since_period. Omit for data through the latest available period. A bound that falls inside a period excludes it here too: "2023-06" on annual data excludes 2023, which ends after the bound. The range must hold at least one day: a since_period that starts after until_period ends is rejected as invalid_period, and bounds of different frequencies are compared by day. Mutually exclusive with last_n_periods.'),
51
51
  last_n_periods: z
52
52
  .number()
53
- .int()
53
+ .multipleOf(1)
54
54
  .min(1)
55
55
  .optional()
56
- .describe("Return only the N most recent periods. N counts back from the dataset's latest period, not from the latest period published for this slice, so a slice that lags the rest of the dataset can come back empty — raise N, or use until_period ending at a period the slice has published. Mutually exclusive with since_period and until_period."),
56
+ .describe("Return only the N most recent dataset time positions. Selected periods without populated cells for this slice are disclosed in a notice on successful queries. N counts back from the dataset's latest period, not from the latest period published for this slice, so a slice that lags can come back empty — increase N, or replace last_n_periods with until_period ending at a period the slice has published. Mutually exclusive with since_period and until_period."),
57
57
  preview_limit: (clampLimits
58
58
  ? z.number().multipleOf(1).min(1)
59
59
  : z.number().int().min(1).max(PREVIEW_MAX))
60
- .default(50)
61
- .describe(`How many matched observations to return inline, from the deterministic start of the JSON-stat cell order. Default 50; ${clampLimits ? 'positive integers above 500 are clamped to 500 with a notice' : 'maximum 500; larger values are rejected'}. This changes only the inline prefix: it does not reduce obsCount, missingObsCount, timeRange, the upstream response, or the rows staged when the match exceeds 5,000. Use filters or period controls to reduce the match itself.`),
60
+ .default(25)
61
+ .describe(`How many matched observations to return inline, from the deterministic start of the JSON-stat cell order. Default 25; ${clampLimits ? 'positive integers above 500 are clamped to 500 with a notice' : 'maximum 500; larger values are rejected'}. This changes only the inline prefix: it does not reduce obsCount, missingObsCount, timeRange, the upstream response, or staged rows. Use filters or period controls to reduce the match itself.`),
62
+ stage: z
63
+ .boolean()
64
+ .default(false)
65
+ .describe('Stage every matched observation on a dataframe canvas, regardless of preview length or match size. Default false preserves automatic staging only above 5,000 observations. Ignored with an unavailable-staging notice on deployments without a canvas.'),
62
66
  lang: z
63
67
  .enum(['EN', 'FR', 'DE'])
64
68
  .default('EN')
65
69
  .describe('Language for labels in the response. Default is "EN". Options: "EN", "FR", "DE".'),
66
- canvas_id: CanvasIdSchema.optional().describe('Reuse an existing dataframe canvas, so a result staged by this call lands beside earlier ones and can be joined against them. Pass the canvasId a previous eurostat_query_dataset or eurostat_download_dataset response returned; omit to start a fresh canvas. Ignored on deployments without a dataframe canvas and when the match is at or below 5,000 observations.'),
70
+ canvas_id: CanvasIdSchema.optional().describe('Reuse an existing dataframe canvas, so a result staged by this call lands beside earlier ones and can be joined against them. Pass the canvasId a previous eurostat_query_dataset or eurostat_download_dataset response returned; omit to start a fresh canvas. Used only when staging: stage=true or a match above 5,000 observations, on a canvas-enabled deployment.'),
67
71
  }),
68
72
  output: z.object({
69
73
  datasetCode: z.string().describe('Dataset code as provided.'),
@@ -121,7 +125,7 @@ export const createEurostatQueryDataset = (clampLimits) => tool('eurostat_query_
121
125
  tableName: z
122
126
  .string()
123
127
  .optional()
124
- .describe('Canvas table holding every matched observation in flat form — one code column per dimension plus a "_label" companion, then obs_value, obs_flag, obs_flag_label, conf_status, conf_status_label. A DS-* table also carries obs_value_text, the valueText of each row. Call eurostat_dataframe_describe with canvasId first to confirm the table and columns, then eurostat_dataframe_query. Omitted when nothing was staged: either the match was at or below 5,000 observations, or this deployment runs without a dataframe canvas.'),
128
+ .describe('Canvas table holding every matched observation in flat form — one code column per dimension plus a "_label" companion, then obs_value, obs_flag, obs_flag_label, conf_status, conf_status_label. A DS-* table also carries obs_value_text, the valueText of each row. Call eurostat_dataframe_describe with canvasId first to confirm the table and columns, then eurostat_dataframe_query. Omitted when nothing was staged: stage was false with at most 5,000 observations, or this deployment runs without a dataframe canvas.'),
125
129
  stagedRowCount: z
126
130
  .number()
127
131
  .optional()
@@ -161,7 +165,7 @@ export const createEurostatQueryDataset = (clampLimits) => tool('eurostat_query_
161
165
  notice: z
162
166
  .string()
163
167
  .optional()
164
- .describe('Guidance when a filter value matched nothing, when preview_limit omits matched rows, or when the match was staged — names the unmatched values, distinguishes the inline prefix from filters that reduce the match and, when staged, gives the describe-then-query sequence. Omitted when every filter value matched and the preview contains the whole match.'),
168
+ .describe('Composed guidance for a period a bound falls inside, which Eurostat excludes, unmatched filter values, selected last_n_periods positions with no populated cells, inline previews, staging and unavailable explicit staging. Period gaps list up to the newest 24 periods with an omitted count; staged matches give the describe-then-query sequence. Omitted when none of these disclosures applies.'),
165
169
  },
166
170
  enrichmentTrailer: {
167
171
  appliedFilters: {
@@ -194,8 +198,8 @@ export const createEurostatQueryDataset = (clampLimits) => tool('eurostat_query_
194
198
  {
195
199
  reason: 'no_results',
196
200
  code: JsonRpcErrorCode.NotFound,
197
- when: 'The query matched no observation cells — including Eurostat HTTP-200 error id 100. The dataset is valid, but no cell carries a value or a status flag for that filter combination and period range. When Eurostat returns the empty table, the error names the filter values that matched nothing (data.unmatchedValues) and the selected periods that carry no value (data.matchedPeriods, the newest 24, with data.matchedPeriodCount counting all of them).',
198
- recovery: 'Verify dimension values with eurostat_get_dimension_values and keep the period range inside the dataset coverage; both an unmatched value and an out-of-coverage range return no data rather than an error.',
201
+ when: 'The query matched no observation cells — including Eurostat HTTP-200 error id 100. The dataset is valid, but no cell carries a value or a status flag for that filter combination and period range. When Eurostat returns the empty table, the error names the filter values that matched nothing (data.unmatchedValues), the selected periods that carry no value (data.matchedPeriods, the newest 24, with data.matchedPeriodCount counting all of them), and, for a range that selected no period, whether it misses the coverage, holds no whole period, or holds no published one. When error id 100 answers a query that set geo_level, the error names geo_level as the likely cause, and lists the dataset\'s dimensions when it has no "geo" dimension.',
202
+ recovery: 'Verify dimension values with eurostat_get_dimension_values and keep the period range inside the dataset coverage, holding a whole period; an unmatched value, an out-of-coverage range and a range inside one period all return no data rather than an error. When the error names geo_level, drop it instead, and filter the "geo" codes the query then returns, or the dimension that holds geography.',
199
203
  },
200
204
  {
201
205
  reason: 'invalid_period',
@@ -240,11 +244,12 @@ export const createEurostatQueryDataset = (clampLimits) => tool('eurostat_query_
240
244
  const input = { ...request, preview_limit: preview.value };
241
245
  const svc = getEurostatDataService();
242
246
  // Trimmed, checked, and rewritten to canonical form: this is both what is sent and
243
- // what appliedFilters echoes.
244
- const periods = resolvePeriods({
247
+ // what appliedFilters echoes. The period notice quotes the literals as written.
248
+ const written = {
245
249
  since_period: input.since_period?.trim() || undefined,
246
250
  until_period: input.until_period?.trim() || undefined,
247
- });
251
+ };
252
+ const periods = resolvePeriods(written);
248
253
  if (!periods.ok) {
249
254
  throw ctx.fail('invalid_period', periods.message);
250
255
  }
@@ -263,7 +268,10 @@ export const createEurostatQueryDataset = (clampLimits) => tool('eurostat_query_
263
268
  const explained = explainNoResults(input.dataset_code, data, {
264
269
  lastN: input.last_n_periods,
265
270
  ranged: Boolean(sinceP || untilP),
266
- });
271
+ }) ??
272
+ (input.geo_level
273
+ ? await explainGeoLevel(input.dataset_code, input.geo_level, ctx)
274
+ : undefined);
267
275
  throw ctx.fail('no_results', explained?.message ?? err.message, {
268
276
  ...(data.unmatchedValues && { unmatchedValues: data.unmatchedValues }),
269
277
  ...(data.matchedPeriods && {
@@ -326,18 +334,18 @@ export const createEurostatQueryDataset = (clampLimits) => tool('eurostat_query_
326
334
  }
327
335
  // The service bounds `observations` to the requested preview, so its length says nothing
328
336
  // about match size. `obsCount` is the full total and is what truncation turns on.
329
- const { appliedFilters, rows, ...queryResult } = result;
337
+ const { appliedFilters, periodCuts, rows, unpopulatedPeriods, ...queryResult } = result;
330
338
  const truncated = result.obsCount > OBS_CAP;
331
339
  /**
332
- * Stage the whole match only above the independent 5,000-row threshold.
333
- * A smaller preview does not make an under-threshold match eligible, so it
334
- * cannot burn a per-tenant canvas slot by itself.
340
+ * Stage the whole match on explicit request or above the independent
341
+ * 5,000-row threshold. Preview length never triggers staging by itself.
335
342
  *
336
343
  * `rows()` is a generator over the response body already in memory, so this
337
344
  * costs no extra upstream request and never builds the full row set as an
338
345
  * array — the canvas appender pulls one row at a time.
339
346
  */
340
- const canvas = truncated ? getCanvas() : undefined;
347
+ const availableCanvas = getCanvas();
348
+ const canvas = truncated || input.stage ? availableCanvas : undefined;
341
349
  let staged;
342
350
  if (canvas) {
343
351
  // Re-thrown so the declared recovery replaces the canvas service's generic one.
@@ -378,6 +386,16 @@ export const createEurostatQueryDataset = (clampLimits) => tool('eurostat_query_
378
386
  });
379
387
  // `notice` is last-wins, so every sentence is collected here and written once.
380
388
  const notices = preview.notice ? [preview.notice] : [];
389
+ if (periodCuts)
390
+ notices.push(cutNotice(periodCuts, written));
391
+ if (input.last_n_periods && unpopulatedPeriods?.length) {
392
+ const listed = unpopulatedPeriods.slice(-MATCHED_PERIODS_LISTED);
393
+ const omitted = unpopulatedPeriods.length - listed.length;
394
+ notices.push(`${countOf(unpopulatedPeriods.length, 'selected period')} (${listed.join(', ')}${omitted ? `; ${countOf(omitted, 'earlier period')} omitted` : ''}) ${unpopulatedPeriods.length === 1 ? 'carries' : 'carry'} no populated cells anywhere in this match. last_n_periods counts dataset time positions, not periods with populated cells for this slice; preview_limit does not select periods. Increase last_n_periods, or replace last_n_periods with until_period ending at a period this slice has published.`);
395
+ }
396
+ if (input.stage && !availableCanvas) {
397
+ notices.push('Dataframe staging is unavailable on this deployment, so stage=true did not stage any rows. Use dimension filters or period controls to reduce the match.');
398
+ }
381
399
  if (result.unmatchedValues) {
382
400
  notices.push(`These filter values matched nothing and contribute no rows: ${formatValues(result.unmatchedValues)}. Check the valid codes for ${joinAnd(Object.keys(result.unmatchedValues))} with eurostat_get_dimension_values.`);
383
401
  }
@@ -386,7 +404,10 @@ export const createEurostatQueryDataset = (clampLimits) => tool('eurostat_query_
386
404
  const filterOn = `dimension filters (${result.dimensionsUsed.filter((dim) => dim !== 'time').join(', ')})`;
387
405
  notices.push(staged
388
406
  ? `preview_limit=${input.preview_limit.toLocaleString()} returns the first ${result.observations.length.toLocaleString()} of ${result.obsCount.toLocaleString()} matched rows inline; it does not reduce the match. All ${staged.stagedRowCount.toLocaleString()} matched rows are staged as table "${staged.tableName}" on canvas "${staged.canvasId}". Call eurostat_dataframe_describe with that canvas_id first to confirm the table and columns, then call eurostat_dataframe_query. Use ${filterOn} or a period range when the match itself should be smaller.`
389
- : `preview_limit=${input.preview_limit.toLocaleString()} returns the first ${result.observations.length.toLocaleString()} of ${result.obsCount.toLocaleString()} matched rows inline; it does not reduce the match. Use ${filterOn} or a period range to reduce the match itself.`);
407
+ : `preview_limit=${input.preview_limit.toLocaleString()} returns the first ${result.observations.length.toLocaleString()} of ${result.obsCount.toLocaleString()} matched rows inline; it does not reduce the match. ${availableCanvas ? 'Set stage=true to retain every matched row on a dataframe canvas. ' : ''}Use ${filterOn} or a period range to reduce the match itself.`);
408
+ }
409
+ if (staged && result.obsCount <= result.observations.length) {
410
+ notices.push(`All ${staged.stagedRowCount.toLocaleString()} matched rows are staged as table "${staged.tableName}" on canvas "${staged.canvasId}". Call eurostat_dataframe_describe with that canvas_id first to confirm the table and columns, then call eurostat_dataframe_query.`);
390
411
  }
391
412
  if (notices.length > 0)
392
413
  ctx.enrich.notice(notices.join(' '));
@@ -418,13 +439,20 @@ export const createEurostatQueryDataset = (clampLimits) => tool('eurostat_query_
418
439
  if (result.tableName) {
419
440
  lines.push(`**Staged:** table \`${result.tableName}\` on canvas \`${result.canvasId}\` (stagedRowCount ${result.stagedRowCount}) — inspect it with eurostat_dataframe_describe first, then query it with eurostat_dataframe_query`);
420
441
  }
442
+ const cell = (obs, dim) => {
443
+ // dimensions is typed as {} from passthrough() — cast to the runtime shape for rendering
444
+ const value = obs.dimensions[dim];
445
+ return value && `${dim}=${value.code} (${value.label})`;
446
+ };
447
+ const { header, hoisted } = hoistDimensions(result.observations, result.dimensionsUsed, cell);
448
+ if (header)
449
+ lines.push(header);
421
450
  lines.push('');
422
451
  // Render every observation so content[] carries the same rows as structuredContent —
423
452
  // both surfaces are already bounded by the row cap the decoder applies.
453
+ const varying = result.dimensionsUsed.filter((dim) => !hoisted.has(dim));
424
454
  for (const obs of result.observations) {
425
- // dimensions is typed as {} from passthrough() — cast to the runtime shape for rendering
426
- const dims = obs.dimensions;
427
- const dimParts = result.dimensionsUsed.map((dim) => `${dim}=${dims[dim]?.code ?? '?'} (${dims[dim]?.label ?? '?'})`);
455
+ const dimParts = varying.map((dim) => cell(obs, dim) ?? `${dim}=? (?)`);
428
456
  const val = obs.value != null ? String(obs.value) : 'N/A';
429
457
  const textPart = obs.valueText ? ` [valueText "${obs.valueText}"]` : '';
430
458
  const statusPart = obs.status ? ` [${obs.status.code}: ${obs.status.label}]` : '';
@@ -465,8 +493,8 @@ const countOf = (n, noun) => `${n.toLocaleString()} ${noun}${n === 1 ? '' : 's'}
465
493
  * slice's narrower coverage, and with neither the combination itself is empty.
466
494
  */
467
495
  function explainNoResults(datasetCode, diagnosis, periods) {
468
- const { unmatchedValues, matchedPeriods, outsideCoverage } = diagnosis;
469
- if (!unmatchedValues && !matchedPeriods && !outsideCoverage)
496
+ const { unmatchedValues, matchedPeriods, emptyRange } = diagnosis;
497
+ if (!unmatchedValues && !matchedPeriods && !emptyRange)
470
498
  return;
471
499
  const found = [];
472
500
  const next = [];
@@ -474,13 +502,29 @@ function explainNoResults(datasetCode, diagnosis, periods) {
474
502
  found.push(`These filter values match nothing in "${datasetCode}": ${formatValues(unmatchedValues)}.`);
475
503
  next.push(`Check the valid codes for ${joinAnd(Object.keys(unmatchedValues))} with eurostat_get_dimension_values.`);
476
504
  }
477
- if (outsideCoverage) {
478
- const { oldest, latest } = outsideCoverage;
505
+ if (emptyRange) {
506
+ const { oldest, latest } = emptyRange.coverage;
507
+ const reported = oldest || latest;
479
508
  const span = `${oldest ?? 'an unreported start'} – ${latest ?? 'an unreported end'}`;
480
- found.push(`The requested period range selects no period of "${datasetCode}", whose data runs ${span}.`);
481
- next.push(oldest || latest
482
- ? `Set since_period/until_period inside ${span}.`
483
- : "Set since_period/until_period inside the dataset's coverage, which eurostat_get_dataset_info reports.");
509
+ const overlap = reported ? `overlaps ${span} but ` : '';
510
+ switch (emptyRange.kind) {
511
+ case 'outside_coverage':
512
+ found.push(`The requested period range selects no period of "${datasetCode}", whose data runs ${span}.`);
513
+ next.push(reported
514
+ ? `Set since_period/until_period inside ${span}.`
515
+ : "Set since_period/until_period inside the dataset's coverage, which eurostat_get_dataset_info reports.");
516
+ break;
517
+ case 'no_whole_period':
518
+ found.push(`The requested period range ${overlap}holds no whole ${emptyRange.cuts[0]?.frequency} period of "${datasetCode}": Eurostat keeps only periods wholly inside the range.`);
519
+ next.push(`Set ${emptyRange.cuts.map(cutSelector).join(' or ')} to select a whole period.`);
520
+ break;
521
+ case 'no_published_period':
522
+ found.push(`The requested period range ${overlap}holds no published period of "${datasetCode}".`);
523
+ next.push(`List the periods "${datasetCode}" publishes with eurostat_get_dimension_values, dimension "time", then set since_period/until_period on one of them.`);
524
+ break;
525
+ default:
526
+ return emptyRange;
527
+ }
484
528
  }
485
529
  if (matchedPeriods) {
486
530
  const selected = spanOf(matchedPeriods);
@@ -504,4 +548,31 @@ function explainNoResults(datasetCode, diagnosis, periods) {
504
548
  }
505
549
  return { message: `No observations matched. ${found.join(' ')}`, hint: next.join(' ') };
506
550
  }
551
+ /**
552
+ * Name `geo_level` behind a reply {@link explainNoResults} could not read. Eurostat answers
553
+ * with no envelope when the level selects no code, whatever the period range, and with
554
+ * an envelope when it selects some, so the empty reply alone points at the level.
555
+ *
556
+ * The recovery depends on whether the dataset has a `geo` dimension, which only its
557
+ * structure definition says: geography can sit on `cities` or `reporter`, where Eurostat
558
+ * still applies the level. Nothing in hand tells the two apart when that read fails, so
559
+ * the hint then keeps to what holds in both.
560
+ */
561
+ async function explainGeoLevel(datasetCode, geoLevel, ctx) {
562
+ const dimensions = await dimensionsToNarrow(datasetCode, [], ctx);
563
+ const message = `No observations matched. geo_level "${geoLevel}" likely selects no code for this query.`;
564
+ if (!dimensions)
565
+ return { message, hint: 'Drop geo_level and send the query again.' };
566
+ if (dimensions.includes('geo')) {
567
+ return {
568
+ message,
569
+ hint: 'Drop geo_level. If the other filters and the period range match anything, the same query then returns the "geo" codes this slice carries, and they work in filters.geo.',
570
+ };
571
+ }
572
+ const listed = dimensions.join(', ');
573
+ return {
574
+ message: `${message} "${datasetCode}" has no "geo" dimension; its dimensions are ${listed}.`,
575
+ hint: `Drop geo_level. To select geography, filter whichever of ${listed} holds it, with codes from eurostat_get_dimension_values.`,
576
+ };
577
+ }
507
578
  //# sourceMappingURL=eurostat-query-dataset.tool.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"eurostat-query-dataset.tool.js","sourceRoot":"","sources":["../../../../src/mcp-server/tools/definitions/eurostat-query-dataset.tool.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"eurostat-query-dataset.tool.js","sourceRoot":"","sources":["../../../../src/mcp-server/tools/definitions/eurostat-query-dataset.tool.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ /**
2
+ * @fileoverview Lift dimensions holding one value across the rows shown into a single
3
+ * header line, so content[] does not repeat them on every row.
4
+ * @module mcp-server/tools/hoist-dimensions
5
+ */
6
+ /**
7
+ * Picks the dimensions `cell` renders identically on every row and joins them into a header.
8
+ * Fewer than two rows hoist nothing. `cell` returns undefined where a row has no value, which
9
+ * keeps that dimension on the rows: a header entry must rebuild every row exactly.
10
+ *
11
+ * The header says "rows shown" because a preview shorter than the match can show one value of
12
+ * a dimension the whole match varies on.
13
+ */
14
+ export declare function hoistDimensions<Row>(rows: Row[], dimensions: string[], cell: (row: Row, dimension: string) => string | undefined): {
15
+ header: string | undefined;
16
+ hoisted: Set<string>;
17
+ };
18
+ //# sourceMappingURL=hoist-dimensions.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hoist-dimensions.d.ts","sourceRoot":"","sources":["../../../src/mcp-server/tools/hoist-dimensions.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH;;;;;;;GAOG;AACH,wBAAgB,eAAe,CAAC,GAAG,EACjC,IAAI,EAAE,GAAG,EAAE,EACX,UAAU,EAAE,MAAM,EAAE,EACpB,IAAI,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,SAAS,EAAE,MAAM,KAAK,MAAM,GAAG,SAAS,GACxD;IAAE,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC;IAAC,OAAO,EAAE,GAAG,CAAC,MAAM,CAAC,CAAA;CAAE,CActD"}
@@ -0,0 +1,29 @@
1
+ /**
2
+ * @fileoverview Lift dimensions holding one value across the rows shown into a single
3
+ * header line, so content[] does not repeat them on every row.
4
+ * @module mcp-server/tools/hoist-dimensions
5
+ */
6
+ /**
7
+ * Picks the dimensions `cell` renders identically on every row and joins them into a header.
8
+ * Fewer than two rows hoist nothing. `cell` returns undefined where a row has no value, which
9
+ * keeps that dimension on the rows: a header entry must rebuild every row exactly.
10
+ *
11
+ * The header says "rows shown" because a preview shorter than the match can show one value of
12
+ * a dimension the whole match varies on.
13
+ */
14
+ export function hoistDimensions(rows, dimensions, cell) {
15
+ const shared = new Map();
16
+ for (const dimension of rows.length < 2 ? [] : dimensions) {
17
+ const values = new Set(rows.map((row) => cell(row, dimension)));
18
+ const [value] = values;
19
+ if (values.size === 1 && value !== undefined)
20
+ shared.set(dimension, value);
21
+ }
22
+ return {
23
+ header: shared.size > 0
24
+ ? `**Same in all ${rows.length} rows shown:** ${[...shared.values()].join(' | ')}`
25
+ : undefined,
26
+ hoisted: new Set(shared.keys()),
27
+ };
28
+ }
29
+ //# sourceMappingURL=hoist-dimensions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hoist-dimensions.js","sourceRoot":"","sources":["../../../src/mcp-server/tools/hoist-dimensions.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH;;;;;;;GAOG;AACH,MAAM,UAAU,eAAe,CAC7B,IAAW,EACX,UAAoB,EACpB,IAAyD;IAEzD,MAAM,MAAM,GAAG,IAAI,GAAG,EAAkB,CAAC;IACzC,KAAK,MAAM,SAAS,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,UAAU,EAAE,CAAC;QAC1D,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC;QAChE,MAAM,CAAC,KAAK,CAAC,GAAG,MAAM,CAAC;QACvB,IAAI,MAAM,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,KAAK,SAAS;YAAE,MAAM,CAAC,GAAG,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;IAC7E,CAAC;IACD,OAAO;QACL,MAAM,EACJ,MAAM,CAAC,IAAI,GAAG,CAAC;YACb,CAAC,CAAC,iBAAiB,IAAI,CAAC,MAAM,kBAAkB,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE;YAClF,CAAC,CAAC,SAAS;QACf,OAAO,EAAE,IAAI,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;KAChC,CAAC;AACJ,CAAC"}
@@ -1,15 +1,16 @@
1
1
  /**
2
- * @fileoverview Recovery wording for a request Eurostat refused as too large, shared by
3
- * the two data tools so both name the dataset's own dimensions the same way.
2
+ * @fileoverview Recovery wording that names a dataset's own dimensions, shared by the two
3
+ * data tools: the best-effort structure read behind it, and the advice for a request
4
+ * Eurostat refused as too large.
4
5
  * @module mcp-server/tools/narrowing-advice
5
6
  */
6
7
  import type { Context } from '@cyanheads/mcp-ts-core';
7
8
  /**
8
- * The dataset's key dimensions, for a too-large refusal's hint to name. `known` is the
9
- * order the request already read, if any; otherwise the structure definition is read
10
- * now, a few KB. The refusal itself carries no dimension list, and the hint is only
11
- * more specific with one, so a failed read leaves it generic rather than replacing the
12
- * refusal with a second error. A cancelled call is the exception: its abort is
9
+ * The dataset's key dimensions, for a recovery hint to name. `known` is the order the
10
+ * request already read, if any; otherwise the structure definition is read now, a few
11
+ * KB. The failure being explained carries no dimension list, and its hint is only more
12
+ * specific with one, so a failed or late read returns `undefined` rather than replacing
13
+ * that failure with a second error. A cancelled call is the exception: its abort is
13
14
  * rethrown so it reaches the caller as a cancellation.
14
15
  */
15
16
  export declare function dimensionsToNarrow(datasetCode: string, known: string[], ctx: Context): Promise<string[] | undefined>;
@@ -1 +1 @@
1
- {"version":3,"file":"narrowing-advice.d.ts","sourceRoot":"","sources":["../../../src/mcp-server/tools/narrowing-advice.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AAGtD;;;;;;;GAOG;AACH,wBAAsB,kBAAkB,CACtC,WAAW,EAAE,MAAM,EACnB,KAAK,EAAE,MAAM,EAAE,EACf,GAAG,EAAE,OAAO,GACX,OAAO,CAAC,MAAM,EAAE,GAAG,SAAS,CAAC,CAY/B;AAED;;;;;GAKG;AACH,wBAAgB,eAAe,CAC7B,WAAW,EAAE,MAAM,EACnB,UAAU,EAAE,MAAM,EAAE,GAAG,SAAS,EAChC,QAAQ,EAAE,MAAM,EAAE,GACjB,MAAM,CASR"}
1
+ {"version":3,"file":"narrowing-advice.d.ts","sourceRoot":"","sources":["../../../src/mcp-server/tools/narrowing-advice.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AAUtD;;;;;;;GAOG;AACH,wBAAsB,kBAAkB,CACtC,WAAW,EAAE,MAAM,EACnB,KAAK,EAAE,MAAM,EAAE,EACf,GAAG,EAAE,OAAO,GACX,OAAO,CAAC,MAAM,EAAE,GAAG,SAAS,CAAC,CAgB/B;AAED;;;;;GAKG;AACH,wBAAgB,eAAe,CAC7B,WAAW,EAAE,MAAM,EACnB,UAAU,EAAE,MAAM,EAAE,GAAG,SAAS,EAChC,QAAQ,EAAE,MAAM,EAAE,GACjB,MAAM,CASR"}
@@ -1,27 +1,34 @@
1
1
  /**
2
- * @fileoverview Recovery wording for a request Eurostat refused as too large, shared by
3
- * the two data tools so both name the dataset's own dimensions the same way.
2
+ * @fileoverview Recovery wording that names a dataset's own dimensions, shared by the two
3
+ * data tools: the best-effort structure read behind it, and the advice for a request
4
+ * Eurostat refused as too large.
4
5
  * @module mcp-server/tools/narrowing-advice
5
6
  */
6
7
  import { getEurostatDataService } from '../../services/eurostat-data/eurostat-data-service.js';
7
8
  /**
8
- * The dataset's key dimensions, for a too-large refusal's hint to name. `known` is the
9
- * order the request already read, if any; otherwise the structure definition is read
10
- * now, a few KB. The refusal itself carries no dimension list, and the hint is only
11
- * more specific with one, so a failed read leaves it generic rather than replacing the
12
- * refusal with a second error. A cancelled call is the exception: its abort is
9
+ * Total allowance for the read behind a hint, every attempt and backoff included. It
10
+ * runs after the request it explains, which can have spent its own 30 s, and MCP SDK
11
+ * clients give up at 60 s. The structure definition answers in about half a second.
12
+ */
13
+ const HINT_READ_DEADLINE_MS = 5_000;
14
+ /**
15
+ * The dataset's key dimensions, for a recovery hint to name. `known` is the order the
16
+ * request already read, if any; otherwise the structure definition is read now, a few
17
+ * KB. The failure being explained carries no dimension list, and its hint is only more
18
+ * specific with one, so a failed or late read returns `undefined` rather than replacing
19
+ * that failure with a second error. A cancelled call is the exception: its abort is
13
20
  * rethrown so it reaches the caller as a cancellation.
14
21
  */
15
22
  export async function dimensionsToNarrow(datasetCode, known, ctx) {
16
23
  if (known.length > 0)
17
24
  return known;
18
25
  try {
19
- return await getEurostatDataService().getDimensionOrder(datasetCode, ctx);
26
+ return await getEurostatDataService().getDimensionOrder(datasetCode, ctx, HINT_READ_DEADLINE_MS);
20
27
  }
21
28
  catch (error) {
22
29
  if (ctx.signal.aborted)
23
30
  throw error;
24
- ctx.log.debug('Could not read dimensions for a too-large refusal hint', {
31
+ ctx.log.debug('Could not read dimensions for a recovery hint', {
25
32
  datasetCode,
26
33
  error: error instanceof Error ? error.message : String(error),
27
34
  });
@@ -1 +1 @@
1
- {"version":3,"file":"narrowing-advice.js","sourceRoot":"","sources":["../../../src/mcp-server/tools/narrowing-advice.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EAAE,sBAAsB,EAAE,MAAM,mDAAmD,CAAC;AAE3F;;;;;;;GAOG;AACH,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACtC,WAAmB,EACnB,KAAe,EACf,GAAY;IAEZ,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC;QAAE,OAAO,KAAK,CAAC;IACnC,IAAI,CAAC;QACH,OAAO,MAAM,sBAAsB,EAAE,CAAC,iBAAiB,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC;IAC5E,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,GAAG,CAAC,MAAM,CAAC,OAAO;YAAE,MAAM,KAAK,CAAC;QACpC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,wDAAwD,EAAE;YACtE,WAAW;YACX,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;SAC9D,CAAC,CAAC;QACH,OAAO;IACT,CAAC;AACH,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,eAAe,CAC7B,WAAmB,EACnB,UAAgC,EAChC,QAAkB;IAElB,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,OAAO,8EAA8E,WAAW,oDAAoD,CAAC;IACvJ,CAAC;IACD,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;IAC/D,MAAM,IAAI,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,KAAK,MAAM,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;IACxF,OAAO,IAAI,CAAC,MAAM,GAAG,CAAC;QACpB,CAAC,CAAC,aAAa,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,yBAAyB,WAAW,uEAAuE;QACzI,CAAC,CAAC,uBAAuB,WAAW,MAAM,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,0GAA0G,CAAC;AAC9K,CAAC"}
1
+ {"version":3,"file":"narrowing-advice.js","sourceRoot":"","sources":["../../../src/mcp-server/tools/narrowing-advice.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EAAE,sBAAsB,EAAE,MAAM,mDAAmD,CAAC;AAE3F;;;;GAIG;AACH,MAAM,qBAAqB,GAAG,KAAK,CAAC;AAEpC;;;;;;;GAOG;AACH,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACtC,WAAmB,EACnB,KAAe,EACf,GAAY;IAEZ,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC;QAAE,OAAO,KAAK,CAAC;IACnC,IAAI,CAAC;QACH,OAAO,MAAM,sBAAsB,EAAE,CAAC,iBAAiB,CACrD,WAAW,EACX,GAAG,EACH,qBAAqB,CACtB,CAAC;IACJ,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,GAAG,CAAC,MAAM,CAAC,OAAO;YAAE,MAAM,KAAK,CAAC;QACpC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,+CAA+C,EAAE;YAC7D,WAAW;YACX,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;SAC9D,CAAC,CAAC;QACH,OAAO;IACT,CAAC;AACH,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,eAAe,CAC7B,WAAmB,EACnB,UAAgC,EAChC,QAAkB;IAElB,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,OAAO,8EAA8E,WAAW,oDAAoD,CAAC;IACvJ,CAAC;IACD,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;IAC/D,MAAM,IAAI,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,KAAK,MAAM,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;IACxF,OAAO,IAAI,CAAC,MAAM,GAAG,CAAC;QACpB,CAAC,CAAC,aAAa,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,yBAAyB,WAAW,uEAAuE;QACzI,CAAC,CAAC,uBAAuB,WAAW,MAAM,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,0GAA0G,CAAC;AAC9K,CAAC"}
@@ -1,35 +1,7 @@
1
1
  /**
2
- * @fileoverview Paging and word filtering for a dimension's code/label list:
3
- * the byte budget each response surface is held to, the search for the most
4
- * whole values a page can carry within it, and the case- and accent-blind
5
- * token match the filter applies.
2
+ * @fileoverview Case- and accent-blind word filtering for dimension code/label lists.
6
3
  * @module mcp-server/tools/value-list-paging
7
4
  */
8
- /**
9
- * UTF-8 bytes each response surface may carry, charged separately to the
10
- * serialized structuredContent and to the content[] text (every block,
11
- * enrichment trailer included). A code constant, not an env var, so a page's
12
- * size cannot drift between deployments. structuredContent is the larger
13
- * surface on every list measured, so it is the one that ends a page.
14
- */
15
- export declare const INLINE_BUDGET_BYTES = 64000;
16
- /** Byte length of `text` once UTF-8 encoded — what a surface costs on the wire. */
17
- export declare function utf8Bytes(text: string): number;
18
- /** Bytes on each response surface. */
19
- export interface SurfaceBytes {
20
- structured: number;
21
- text: number;
22
- }
23
- /**
24
- * The most values, out of `count`, a page can carry within the budget on both
25
- * surfaces — never fewer than one, even when that one alone exceeds it. `measure(k)` gives the exact bytes of the
26
- * response carrying the first `k` values; `costOf(i)` what value `i` adds to
27
- * each surface. The costs grow an estimate from a one-value response, so only
28
- * the values that can fit are serialized, and `measure` then settles the exact
29
- * answer: the response's own fields (the cursor, the notice) differ by a few
30
- * bytes from one page length to the next.
31
- */
32
- export declare function fitPage(count: number, measure: (k: number) => SurfaceBytes, costOf: (index: number) => SurfaceBytes): number;
33
5
  /** Lowercase, compatibility-decompose, and drop combining marks: "Zürich" → "zurich". */
34
6
  export declare function foldForMatch(text: string): string;
35
7
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"value-list-paging.d.ts","sourceRoot":"","sources":["../../../src/mcp-server/tools/value-list-paging.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH;;;;;;GAMG;AACH,eAAO,MAAM,mBAAmB,QAAS,CAAC;AAE1C,mFAAmF;AACnF,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAE9C;AAED,sCAAsC;AACtC,MAAM,WAAW,YAAY;IAC3B,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;CACd;AAKD;;;;;;;;GAQG;AACH,wBAAgB,OAAO,CACrB,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,YAAY,EACpC,MAAM,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,YAAY,GACtC,MAAM,CAmBR;AAED,yFAAyF;AACzF,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAEjD;AAED;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,CAErD;AAED;;;GAGG;AACH,wBAAgB,WAAW,CAAC,CAAC,SAAS;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,EACnE,MAAM,EAAE,SAAS,CAAC,EAAE,EACpB,MAAM,EAAE,SAAS,MAAM,EAAE,GACxB,CAAC,EAAE,CAKL"}
1
+ {"version":3,"file":"value-list-paging.d.ts","sourceRoot":"","sources":["../../../src/mcp-server/tools/value-list-paging.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,yFAAyF;AACzF,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAEjD;AAED;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,CAErD;AAED;;;GAGG;AACH,wBAAgB,WAAW,CAAC,CAAC,SAAS;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,EACnE,MAAM,EAAE,SAAS,CAAC,EAAE,EACpB,MAAM,EAAE,SAAS,MAAM,EAAE,GACxB,CAAC,EAAE,CAKL"}