@hypequery/mcp 0.8.2 → 0.8.4

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.
@@ -1,4 +1,5 @@
1
1
  import { expectTypeOf, it } from 'vitest';
2
+ import { dataset, dimension, measure } from '@hypequery/datasets';
2
3
  import { HypequeryMCPExecutor, HypequeryMCPProtocolServer, HypequeryMCPServer, MCPToolError, connectMCPServerStdio, createMCPExecutor, createMCPProtocolServer, createMCPServer, startStdioMCPServer, } from './index.js';
3
4
  it('exports the transport-neutral and backwards-compatible MCP APIs', () => {
4
5
  expectTypeOf(HypequeryMCPExecutor).toBeConstructibleWith({});
@@ -12,3 +13,19 @@ it('exports the transport-neutral and backwards-compatible MCP APIs', () => {
12
13
  expectTypeOf(new MCPToolError('MCP_UNAUTHORIZED', 'Forbidden').code)
13
14
  .toMatchTypeOf();
14
15
  });
16
+ it('accepts segments in the exported query argument types', () => {
17
+ expectTypeOf().toEqualTypeOf();
18
+ expectTypeOf().toEqualTypeOf();
19
+ const _orders = dataset('orders', {
20
+ source: 'orders',
21
+ dimensions: { status: dimension.string() },
22
+ measures: { revenue: measure.sum('amount') },
23
+ segments: { paid: { filters: [{ field: 'status', operator: 'eq', value: 'paid' }] } },
24
+ });
25
+ expectTypeOf()
26
+ .toEqualTypeOf();
27
+ expectTypeOf()
28
+ .toEqualTypeOf();
29
+ expectTypeOf().toEqualTypeOf();
30
+ expectTypeOf().toEqualTypeOf();
31
+ });
@@ -1 +1 @@
1
- {"version":3,"file":"dataset-guide.d.ts","sourceRoot":"","sources":["../../src/prompts/dataset-guide.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAEnD,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,eAAe,EAAE,WAAW,CAAC,EAAE,MAAM;;;;;;;;EAuIjF"}
1
+ {"version":3,"file":"dataset-guide.d.ts","sourceRoot":"","sources":["../../src/prompts/dataset-guide.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAGnD,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,eAAe,EAAE,WAAW,CAAC,EAAE,MAAM;;;;;;;;EA+IjF"}
@@ -3,6 +3,7 @@
3
3
  *
4
4
  * Provides natural language guidance for querying datasets.
5
5
  */
6
+ import { getDatasetCatalog } from '@hypequery/datasets';
6
7
  export function datasetGuidePrompt(datasets, datasetName) {
7
8
  if (datasetName) {
8
9
  const dataset = datasets[datasetName];
@@ -12,7 +13,10 @@ export function datasetGuidePrompt(datasets, datasetName) {
12
13
  const datasetAny = dataset;
13
14
  // Generate dataset-specific guide
14
15
  const dimensions = datasetAny.dimensions ? Object.keys(datasetAny.dimensions) : [];
15
- const measures = datasetAny.measures ? Object.keys(datasetAny.measures) : [];
16
+ const catalog = datasetAny.__type === 'dataset' ? getDatasetCatalog(datasetAny) : undefined;
17
+ const measures = catalog
18
+ ? [...Object.keys(catalog.measures), ...Object.keys(catalog.derivedMeasures ?? {})]
19
+ : datasetAny.measures ? Object.keys(datasetAny.measures) : [];
16
20
  const metrics = datasetAny.metrics ? Object.keys(datasetAny.metrics) : [];
17
21
  const guide = `# Querying the ${datasetName} dataset
18
22
 
@@ -20,7 +24,12 @@ export function datasetGuidePrompt(datasets, datasetName) {
20
24
  ${dimensions.map((d) => `- ${d}`).join('\n')}
21
25
 
22
26
  ## Available Measures
23
- ${measures.map((m) => `- ${m}`).join('\n')}
27
+ ${measures.map((m) => {
28
+ const definition = catalog?.measures[m] ?? catalog?.derivedMeasures?.[m];
29
+ const range = definition?.requiresTimeRange ? ` (requires by and a bounded ISO time range on ${catalog?.timeKey})` : '';
30
+ const grains = definition?.supportedGrains ? ` [grains: ${definition.supportedGrains.join(', ')}]` : '';
31
+ return `- ${m}${range}${grains}`;
32
+ }).join('\n')}
24
33
 
25
34
  ## Available Metrics
26
35
  ${metrics.map((m) => `- ${m}`).join('\n')}
@@ -1,5 +1,5 @@
1
1
  import { z } from 'zod';
2
- import { type MetricFilter } from '@hypequery/datasets';
2
+ import { type MetricFilter, type TimeGrain } from '@hypequery/datasets';
3
3
  export declare const queryMetricArgsSchema: z.ZodObject<{
4
4
  dimensions: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
5
5
  filters: z.ZodOptional<z.ZodArray<z.ZodObject<{
@@ -15,7 +15,9 @@ export declare const queryMetricArgsSchema: z.ZodObject<{
15
15
  operator: "eq" | "neq" | "gt" | "gte" | "lt" | "lte" | "in" | "notIn" | "between" | "like";
16
16
  value?: any;
17
17
  }>, "many">>;
18
- grain: z.ZodOptional<z.ZodEnum<["day", "week", "month", "quarter", "year"]>>;
18
+ segments: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
19
+ grain: z.ZodOptional<z.ZodEnum<[TimeGrain, ...TimeGrain[]]>>;
20
+ timezone: z.ZodOptional<z.ZodString>;
19
21
  orderBy: z.ZodOptional<z.ZodArray<z.ZodObject<{
20
22
  field: z.ZodString;
21
23
  direction: z.ZodEnum<["asc", "desc"]>;
@@ -32,15 +34,17 @@ export declare const queryMetricArgsSchema: z.ZodObject<{
32
34
  dataset: z.ZodOptional<z.ZodString>;
33
35
  metric: z.ZodOptional<z.ZodString>;
34
36
  }, "strict", z.ZodTypeAny, {
37
+ dataset?: string | undefined;
35
38
  dimensions?: string[] | undefined;
36
39
  filters?: {
37
40
  field: string;
38
41
  operator: "eq" | "neq" | "gt" | "gte" | "lt" | "lte" | "in" | "notIn" | "between" | "like";
39
42
  value?: any;
40
43
  }[] | undefined;
44
+ segments?: string[] | undefined;
41
45
  metric?: string | undefined;
42
- dataset?: string | undefined;
43
- grain?: "day" | "week" | "month" | "quarter" | "year" | undefined;
46
+ grain?: TimeGrain | undefined;
47
+ timezone?: string | undefined;
44
48
  orderBy?: {
45
49
  field: string;
46
50
  direction: "asc" | "desc";
@@ -48,15 +52,17 @@ export declare const queryMetricArgsSchema: z.ZodObject<{
48
52
  limit?: number | undefined;
49
53
  offset?: number | undefined;
50
54
  }, {
55
+ dataset?: string | undefined;
51
56
  dimensions?: string[] | undefined;
52
57
  filters?: {
53
58
  field: string;
54
59
  operator: "eq" | "neq" | "gt" | "gte" | "lt" | "lte" | "in" | "notIn" | "between" | "like";
55
60
  value?: any;
56
61
  }[] | undefined;
62
+ segments?: string[] | undefined;
57
63
  metric?: string | undefined;
58
- dataset?: string | undefined;
59
- grain?: "day" | "week" | "month" | "quarter" | "year" | undefined;
64
+ grain?: TimeGrain | undefined;
65
+ timezone?: string | undefined;
60
66
  orderBy?: {
61
67
  field: string;
62
68
  direction: "asc" | "desc";
@@ -79,7 +85,9 @@ export declare const queryDatasetArgsSchema: z.ZodObject<{
79
85
  operator: "eq" | "neq" | "gt" | "gte" | "lt" | "lte" | "in" | "notIn" | "between" | "like";
80
86
  value?: any;
81
87
  }>, "many">>;
82
- grain: z.ZodOptional<z.ZodEnum<["day", "week", "month", "quarter", "year"]>>;
88
+ segments: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
89
+ grain: z.ZodOptional<z.ZodEnum<[TimeGrain, ...TimeGrain[]]>>;
90
+ timezone: z.ZodOptional<z.ZodString>;
83
91
  orderBy: z.ZodOptional<z.ZodArray<z.ZodObject<{
84
92
  field: z.ZodString;
85
93
  direction: z.ZodEnum<["asc", "desc"]>;
@@ -96,15 +104,17 @@ export declare const queryDatasetArgsSchema: z.ZodObject<{
96
104
  dataset: z.ZodOptional<z.ZodString>;
97
105
  measures: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
98
106
  }, "strict", z.ZodTypeAny, {
107
+ dataset?: string | undefined;
99
108
  dimensions?: string[] | undefined;
109
+ measures?: string[] | undefined;
100
110
  filters?: {
101
111
  field: string;
102
112
  operator: "eq" | "neq" | "gt" | "gte" | "lt" | "lte" | "in" | "notIn" | "between" | "like";
103
113
  value?: any;
104
114
  }[] | undefined;
105
- measures?: string[] | undefined;
106
- dataset?: string | undefined;
107
- grain?: "day" | "week" | "month" | "quarter" | "year" | undefined;
115
+ segments?: string[] | undefined;
116
+ grain?: TimeGrain | undefined;
117
+ timezone?: string | undefined;
108
118
  orderBy?: {
109
119
  field: string;
110
120
  direction: "asc" | "desc";
@@ -112,15 +122,17 @@ export declare const queryDatasetArgsSchema: z.ZodObject<{
112
122
  limit?: number | undefined;
113
123
  offset?: number | undefined;
114
124
  }, {
125
+ dataset?: string | undefined;
115
126
  dimensions?: string[] | undefined;
127
+ measures?: string[] | undefined;
116
128
  filters?: {
117
129
  field: string;
118
130
  operator: "eq" | "neq" | "gt" | "gte" | "lt" | "lte" | "in" | "notIn" | "between" | "like";
119
131
  value?: any;
120
132
  }[] | undefined;
121
- measures?: string[] | undefined;
122
- dataset?: string | undefined;
123
- grain?: "day" | "week" | "month" | "quarter" | "year" | undefined;
133
+ segments?: string[] | undefined;
134
+ grain?: TimeGrain | undefined;
135
+ timezone?: string | undefined;
124
136
  orderBy?: {
125
137
  field: string;
126
138
  direction: "asc" | "desc";
@@ -1 +1 @@
1
- {"version":3,"file":"args.d.ts","sourceRoot":"","sources":["../../src/tools/args.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAA6B,KAAK,YAAY,EAAE,MAAM,qBAAqB,CAAC;AA+BnF,eAAO,MAAM,qBAAqB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAGhC,CAAC;AAEH,eAAO,MAAM,sBAAsB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAGjC,CAAC;AAWH,wBAAgB,aAAa,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,GAAG,CAAC,CASzF;AAED,wBAAgB,eAAe,CAC7B,OAAO,GAAE,KAAK,CAAC;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,YAAY,CAAC,UAAU,CAAC,CAAC;IAAC,KAAK,CAAC,EAAE,OAAO,CAAA;CAAE,CAAM,GAC1F,YAAY,EAAE,CAMhB"}
1
+ {"version":3,"file":"args.d.ts","sourceRoot":"","sources":["../../src/tools/args.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAGL,KAAK,YAAY,EACjB,KAAK,SAAS,EACf,MAAM,qBAAqB,CAAC;AAmC7B,eAAO,MAAM,qBAAqB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAGhC,CAAC;AAEH,eAAO,MAAM,sBAAsB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAGjC,CAAC;AAWH,wBAAgB,aAAa,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,GAAG,CAAC,CASzF;AAED,wBAAgB,eAAe,CAC7B,OAAO,GAAE,KAAK,CAAC;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,YAAY,CAAC,UAAU,CAAC,CAAC;IAAC,KAAK,CAAC,EAAE,OAAO,CAAA;CAAE,CAAM,GAC1F,YAAY,EAAE,CAMhB"}
@@ -1,5 +1,5 @@
1
1
  import { z } from 'zod';
2
- import { SEMANTIC_FILTER_OPERATORS } from '@hypequery/datasets';
2
+ import { SEMANTIC_FILTER_OPERATORS, SUPPORTED_TIME_GRAINS, } from '@hypequery/datasets';
3
3
  import { MCPToolError } from '../errors.js';
4
4
  import { MAX_QUERY_DIMENSIONS, MAX_QUERY_FILTERS, MAX_QUERY_LIMIT, MAX_QUERY_MEASURES, MAX_QUERY_OFFSET, MAX_QUERY_ORDER_BY, } from '../types.js';
5
5
  const filterSchema = z.object({
@@ -14,7 +14,11 @@ const orderBySchema = z.object({
14
14
  const baseQuerySchema = z.object({
15
15
  dimensions: z.array(z.string().min(1)).max(MAX_QUERY_DIMENSIONS).optional(),
16
16
  filters: z.array(filterSchema).max(MAX_QUERY_FILTERS).optional(),
17
- grain: z.enum(['day', 'week', 'month', 'quarter', 'year']).optional(),
17
+ // Each dataset narrows this to the segment names it declares.
18
+ segments: z.array(z.string().min(1)).max(MAX_QUERY_FILTERS).optional(),
19
+ // Each dataset narrows this further through its catalog `supportedGrains`.
20
+ grain: z.enum(SUPPORTED_TIME_GRAINS).optional(),
21
+ timezone: z.string().min(1).max(100).optional(),
18
22
  orderBy: z.array(orderBySchema).max(MAX_QUERY_ORDER_BY).optional(),
19
23
  limit: z.number().int().positive().max(MAX_QUERY_LIMIT).optional(),
20
24
  offset: z.number().int().nonnegative().max(MAX_QUERY_OFFSET).optional(),
@@ -1 +1 @@
1
- {"version":3,"file":"query-dataset.d.ts","sourceRoot":"","sources":["../../src/tools/query-dataset.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAgB,MAAM,qBAAqB,CAAC;AAEvE,OAAO,KAAK,EAAE,eAAe,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAYtF,wBAAsB,gBAAgB,CACpC,QAAQ,EAAE,eAAe,EACzB,SAAS,EAAE,aAAa,EACxB,IAAI,EAAE,OAAO,EACb,OAAO,GAAE,gBAAqB,GAC7B,OAAO,CAAC,eAAe,CAAC,CA2D1B"}
1
+ {"version":3,"file":"query-dataset.d.ts","sourceRoot":"","sources":["../../src/tools/query-dataset.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAgB,MAAM,qBAAqB,CAAC;AAEvE,OAAO,KAAK,EAAE,eAAe,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAYtF,wBAAsB,gBAAgB,CACpC,QAAQ,EAAE,eAAe,EACzB,SAAS,EAAE,aAAa,EACxB,IAAI,EAAE,OAAO,EACb,OAAO,GAAE,gBAAqB,GAC7B,OAAO,CAAC,eAAe,CAAC,CAiE1B"}
@@ -13,7 +13,7 @@ import { createMCPToolResponse } from './utils/tool-response.js';
13
13
  export async function queryDatasetTool(datasets, analytics, args, options = {}) {
14
14
  const inputSchema = options.inputSchema ?? buildMCPQuerySchemas(datasets, options.limits).queryDataset;
15
15
  const validatedArgs = parseToolArgs(inputSchema, 'query_dataset', args);
16
- const { dataset: datasetName, dimensions, measures, filters, grain, orderBy } = validatedArgs;
16
+ const { dataset: datasetName, dimensions, measures, filters, segments, grain, timezone, orderBy } = validatedArgs;
17
17
  if (!datasetName) {
18
18
  throw new MCPToolError('MCP_INVALID_ARGUMENTS', 'dataset parameter is required');
19
19
  }
@@ -34,9 +34,14 @@ export async function queryDatasetTool(datasets, analytics, args, options = {})
34
34
  orderBy: orderBy || [],
35
35
  limit: pagination.limit,
36
36
  };
37
+ if (timezone !== undefined)
38
+ query.timezone = timezone;
37
39
  if (grain) {
38
40
  query.by = grain;
39
41
  }
42
+ if (segments?.length) {
43
+ query.segments = segments;
44
+ }
40
45
  if (pagination.offset !== undefined) {
41
46
  query.offset = pagination.offset;
42
47
  }
@@ -1 +1 @@
1
- {"version":3,"file":"query-metric.d.ts","sourceRoot":"","sources":["../../src/tools/query-metric.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAe,MAAM,qBAAqB,CAAC;AAEtE,OAAO,KAAK,EAAE,eAAe,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAYtF,wBAAsB,eAAe,CACnC,QAAQ,EAAE,eAAe,EACzB,SAAS,EAAE,aAAa,EACxB,IAAI,EAAE,OAAO,EACb,OAAO,GAAE,gBAAqB,GAC7B,OAAO,CAAC,eAAe,CAAC,CAkE1B"}
1
+ {"version":3,"file":"query-metric.d.ts","sourceRoot":"","sources":["../../src/tools/query-metric.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAe,MAAM,qBAAqB,CAAC;AAEtE,OAAO,KAAK,EAAE,eAAe,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAYtF,wBAAsB,eAAe,CACnC,QAAQ,EAAE,eAAe,EACzB,SAAS,EAAE,aAAa,EACxB,IAAI,EAAE,OAAO,EACb,OAAO,GAAE,gBAAqB,GAC7B,OAAO,CAAC,eAAe,CAAC,CAwE1B"}
@@ -13,7 +13,7 @@ import { createMCPToolResponse } from './utils/tool-response.js';
13
13
  export async function queryMetricTool(datasets, analytics, args, options = {}) {
14
14
  const inputSchema = options.inputSchema ?? buildMCPQuerySchemas(datasets, options.limits).queryMetric;
15
15
  const validatedArgs = parseToolArgs(inputSchema, 'query_metric', args);
16
- const { dataset: datasetName, metric: metricName, dimensions, filters, grain, orderBy } = validatedArgs;
16
+ const { dataset: datasetName, metric: metricName, dimensions, filters, segments, grain, timezone, orderBy } = validatedArgs;
17
17
  if (!datasetName) {
18
18
  throw new MCPToolError('MCP_INVALID_ARGUMENTS', 'dataset parameter is required');
19
19
  }
@@ -38,9 +38,14 @@ export async function queryMetricTool(datasets, analytics, args, options = {}) {
38
38
  orderBy: orderBy || [],
39
39
  limit: pagination.limit,
40
40
  };
41
+ if (timezone !== undefined)
42
+ query.timezone = timezone;
41
43
  if (grain) {
42
44
  query.by = grain;
43
45
  }
46
+ if (segments?.length) {
47
+ query.segments = segments;
48
+ }
44
49
  if (pagination.offset !== undefined) {
45
50
  query.offset = pagination.offset;
46
51
  }
@@ -1,4 +1,4 @@
1
- import type { CanonicalSemanticQuerySchemas } from '@hypequery/datasets';
1
+ import { type CanonicalSemanticQuerySchemas } from '@hypequery/datasets';
2
2
  import type { ListToolsResult } from '@modelcontextprotocol/sdk/types.js';
3
3
  export declare const DATASET_LIST_OUTPUT_SCHEMA: {
4
4
  [x: string]: unknown;
@@ -1 +1 @@
1
- {"version":3,"file":"tool-manifest.d.ts","sourceRoot":"","sources":["../../src/tools/tool-manifest.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,6BAA6B,EAAE,MAAM,qBAAqB,CAAC;AACzE,OAAO,KAAK,EAAE,eAAe,EAAQ,MAAM,oCAAoC,CAAC;AAkEhF,eAAO,MAAM,0BAA0B;;;;;;;2BAsBrC,CAAC;AAEH,eAAO,MAAM,4BAA4B;;;;;;;2BA0HvC,CAAC;AAEH,eAAO,MAAM,mBAAmB;;;;;;;2BAwC9B,CAAC;AAYH,wBAAgB,oBAAoB,CAClC,YAAY,EAAE,6BAA6B,GAC1C,eAAe,CA8CjB"}
1
+ {"version":3,"file":"tool-manifest.d.ts","sourceRoot":"","sources":["../../src/tools/tool-manifest.ts"],"names":[],"mappings":"AAAA,OAAO,EAAyB,KAAK,6BAA6B,EAAE,MAAM,qBAAqB,CAAC;AAChG,OAAO,KAAK,EAAE,eAAe,EAAQ,MAAM,oCAAoC,CAAC;AAiEhF,eAAO,MAAM,0BAA0B;;;;;;;2BAsBrC,CAAC;AAEH,eAAO,MAAM,4BAA4B;;;;;;;2BAmIvC,CAAC;AAEH,eAAO,MAAM,mBAAmB;;;;;;;2BAwC9B,CAAC;AAYH,wBAAgB,oBAAoB,CAClC,YAAY,EAAE,6BAA6B,GAC1C,eAAe,CA8CjB"}
@@ -1,10 +1,10 @@
1
+ import { SUPPORTED_TIME_GRAINS } from '@hypequery/datasets';
1
2
  const semanticMetadataProperties = {
2
3
  examples: { type: 'array', items: { type: 'string' } },
3
4
  synonyms: { type: 'array', items: { type: 'string' } },
4
5
  format: { type: 'string' },
5
6
  unit: { type: 'string' },
6
7
  currency: { type: 'string' },
7
- timezone: { type: 'string' },
8
8
  sensitivity: {
9
9
  type: 'string',
10
10
  enum: ['public', 'internal', 'confidential', 'restricted'],
@@ -99,7 +99,7 @@ export const DATASET_SCHEMA_OUTPUT_SCHEMA = resultSchema({
99
99
  additionalProperties: false,
100
100
  properties: {
101
101
  dimensions: { type: 'array', items: { type: 'string' } },
102
- timeGrain: { type: 'string', enum: ['day', 'week', 'month', 'quarter', 'year'] },
102
+ timeGrain: { type: 'string', enum: [...SUPPORTED_TIME_GRAINS] },
103
103
  },
104
104
  },
105
105
  timeDimension: { type: ['string', 'null'] },
@@ -130,6 +130,15 @@ export const DATASET_SCHEMA_OUTPUT_SCHEMA = resultSchema({
130
130
  label: { type: 'string' },
131
131
  description: { type: 'string' },
132
132
  ...semanticMetadataProperties,
133
+ kind: { type: 'string', enum: ['window', 'shift'] },
134
+ measure: { type: 'string' },
135
+ interval: { type: 'object', properties: { amount: { type: 'integer', minimum: 1 }, unit: { type: 'string', enum: [...SUPPORTED_TIME_GRAINS] } }, required: ['amount', 'unit'], additionalProperties: false },
136
+ trailing: { type: 'object', properties: { amount: { type: 'integer', minimum: 1 }, unit: { type: 'string', enum: [...SUPPORTED_TIME_GRAINS] } }, required: ['amount', 'unit'], additionalProperties: false },
137
+ toDate: { type: 'string', enum: SUPPORTED_TIME_GRAINS.filter(grain => grain !== 'minute') },
138
+ cumulative: { const: true },
139
+ requiresTimeRange: { const: true },
140
+ supportedGrains: { type: 'array', items: { type: 'string', enum: [...SUPPORTED_TIME_GRAINS] } },
141
+ approximate: { const: true },
133
142
  },
134
143
  required: ['name'],
135
144
  },
@@ -1 +1 @@
1
- {"version":3,"file":"legacy-agent-catalog.d.ts","sourceRoot":"","sources":["../../../src/tools/utils/legacy-agent-catalog.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,mBAAmB,EAQpB,MAAM,qBAAqB,CAAC;AAE7B,KAAK,aAAa,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AA4F7C;;;;;;;;;;;;;GAaG;AACH,wBAAgB,yBAAyB,CACvC,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,aAAa,EACpB,QAAQ,GAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAM,GAC/C,mBAAmB,CAuFrB"}
1
+ {"version":3,"file":"legacy-agent-catalog.d.ts","sourceRoot":"","sources":["../../../src/tools/utils/legacy-agent-catalog.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,mBAAmB,EAQpB,MAAM,qBAAqB,CAAC;AAG7B,KAAK,aAAa,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AA2F7C;;;;;;;;;;;;;GAaG;AACH,wBAAgB,yBAAyB,CACvC,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,aAAa,EACpB,QAAQ,GAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAM,GAC/C,mBAAmB,CAuFrB"}
@@ -1,8 +1,9 @@
1
+ import { SUPPORTED_TIME_GRAINS } from '@hypequery/datasets';
1
2
  /**
2
3
  * Grains the semantic planner can actually execute. A legacy registry is
3
4
  * untyped, so anything outside this set is dropped rather than advertised.
4
5
  */
5
- const TIME_GRAINS = new Set(['day', 'week', 'month', 'quarter', 'year']);
6
+ const TIME_GRAINS = new Set(SUPPORTED_TIME_GRAINS);
6
7
  function record(value) {
7
8
  return value !== null && typeof value === 'object' && !Array.isArray(value)
8
9
  ? value
@@ -42,7 +43,6 @@ function semanticMetadata(value) {
42
43
  ...(text(value.format) !== undefined ? { format: text(value.format) } : {}),
43
44
  ...(text(value.unit) !== undefined ? { unit: text(value.unit) } : {}),
44
45
  ...(/^[A-Z]{3}$/.test(String(value.currency)) ? { currency: String(value.currency) } : {}),
45
- ...(text(value.timezone) !== undefined ? { timezone: text(value.timezone) } : {}),
46
46
  ...(sensitivity !== undefined ? { sensitivity } : {}),
47
47
  };
48
48
  }
package/dist/types.d.ts CHANGED
@@ -1,33 +1,37 @@
1
1
  /**
2
2
  * Type definitions for MCP Server
3
3
  */
4
- import type { AgentCatalogDataset, AgentCatalogDimension, AgentCatalogFilter, AgentCatalogMeasure, AgentCatalogMetric, AgentCatalogRelationship, AnyDatasetInstance, MetricFilter, TimeGrain, MetricOrderBy } from '@hypequery/datasets';
4
+ import type { AgentCatalogDataset, AgentCatalogDimension, AgentCatalogFilter, AgentCatalogMeasure, AgentCatalogMetric, AgentCatalogRelationship, AnyDatasetInstance, DatasetSegmentNames, MetricFilter, TimeGrain, MetricOrderBy } from '@hypequery/datasets';
5
5
  import type { ZodTypeAny } from 'zod';
6
6
  /**
7
7
  * Registry of datasets - maps dataset names to dataset instances
8
8
  */
9
9
  export type DatasetRegistry = Record<string, AnyDatasetInstance | Record<string, unknown>>;
10
10
  /**
11
- * Arguments for query_metric tool
11
+ * Arguments for query_metric tool. Supply a dataset type to restrict the
12
+ * dataset and segment names; the default supports dynamic registries.
12
13
  */
13
- export interface QueryMetricArgs {
14
- dataset: string;
14
+ export interface QueryMetricArgs<TDataset extends AnyDatasetInstance = AnyDatasetInstance> {
15
+ dataset: TDataset['name'];
15
16
  metric: string;
16
17
  dimensions?: string[];
17
18
  filters?: MetricFilter[];
19
+ segments?: DatasetSegmentNames<TDataset>[];
18
20
  grain?: TimeGrain;
19
21
  orderBy?: MetricOrderBy[];
20
22
  limit?: number;
21
23
  offset?: number;
22
24
  }
23
25
  /**
24
- * Arguments for query_dataset tool
26
+ * Arguments for query_dataset tool. Supply a dataset type to restrict the
27
+ * dataset and segment names; the default supports dynamic registries.
25
28
  */
26
- export interface QueryDatasetArgs {
27
- dataset: string;
29
+ export interface QueryDatasetArgs<TDataset extends AnyDatasetInstance = AnyDatasetInstance> {
30
+ dataset: TDataset['name'];
28
31
  dimensions?: string[];
29
32
  measures?: string[];
30
33
  filters?: MetricFilter[];
34
+ segments?: DatasetSegmentNames<TDataset>[];
31
35
  grain?: TimeGrain;
32
36
  orderBy?: MetricOrderBy[];
33
37
  limit?: number;
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
package/dist/version.d.ts CHANGED
@@ -1,2 +1,2 @@
1
- export declare const MCP_PACKAGE_VERSION = "0.8.2";
1
+ export declare const MCP_PACKAGE_VERSION = "0.8.4";
2
2
  //# sourceMappingURL=version.d.ts.map
package/dist/version.js CHANGED
@@ -2,4 +2,4 @@
2
2
  //
3
3
  // Resolved at build time rather than read from package.json at import time, so
4
4
  // importing this package touches no filesystem and survives bundling.
5
- export const MCP_PACKAGE_VERSION = '0.8.2';
5
+ export const MCP_PACKAGE_VERSION = '0.8.4';
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@hypequery/mcp",
3
- "version": "0.8.2",
3
+ "version": "0.8.4",
4
4
  "description": "Governed ClickHouse MCP server for semantic metrics, datasets, Claude, Cursor, and AI agents",
5
5
  "keywords": [
6
6
  "mcp",
@@ -33,7 +33,7 @@
33
33
  "dist"
34
34
  ],
35
35
  "dependencies": {
36
- "@hypequery/datasets": "^0.18.0",
36
+ "@hypequery/datasets": "^0.20.0",
37
37
  "@modelcontextprotocol/sdk": "^1.29.0",
38
38
  "zod": "^3.23.8"
39
39
  },
@@ -41,7 +41,7 @@
41
41
  "@types/node": "^20.11.30",
42
42
  "typescript": "^5.7.3",
43
43
  "vitest": "^3.2.6",
44
- "@hypequery/clickhouse": "2.11.2"
44
+ "@hypequery/clickhouse": "2.12.1"
45
45
  },
46
46
  "repository": {
47
47
  "type": "git",