@hypequery/mcp 0.7.0 → 0.8.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/discovery-executor.d.ts +12 -1
- package/dist/discovery-executor.d.ts.map +1 -1
- package/dist/discovery-executor.js +6 -1
- package/dist/errors.d.ts +15 -1
- package/dist/errors.d.ts.map +1 -1
- package/dist/errors.js +20 -0
- package/dist/executor.d.ts +4 -1
- package/dist/executor.d.ts.map +1 -1
- package/dist/executor.js +4 -1
- package/dist/index.d.ts +3 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -2
- package/dist/tools/utils/catalog-budget.d.ts +16 -0
- package/dist/tools/utils/catalog-budget.d.ts.map +1 -0
- package/dist/tools/utils/catalog-budget.js +33 -0
- package/dist/types.d.ts +32 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +4 -0
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/package.json +3 -3
|
@@ -22,7 +22,7 @@
|
|
|
22
22
|
*/
|
|
23
23
|
import type { CallToolResult, GetPromptResult, ListPromptsResult, ListToolsResult } from '@modelcontextprotocol/sdk/types.js';
|
|
24
24
|
import type { MCPToolExecutor } from './executor.js';
|
|
25
|
-
import type { DatasetRegistry, MCPQueryLimits } from './types.js';
|
|
25
|
+
import type { DatasetRegistry, MCPCatalogBudget, MCPQueryLimits } from './types.js';
|
|
26
26
|
/**
|
|
27
27
|
* Provenance a client needs to cache a manifest and know when it went stale.
|
|
28
28
|
*
|
|
@@ -52,6 +52,16 @@ export interface MCPDiscoveryExecutorConfig {
|
|
|
52
52
|
queryableDatasets?: readonly string[];
|
|
53
53
|
/** Server-side query ceilings, so advertised schemas match what will run. */
|
|
54
54
|
queryLimits?: MCPQueryLimits;
|
|
55
|
+
/**
|
|
56
|
+
* Tool-count and manifest-byte ceilings.
|
|
57
|
+
*
|
|
58
|
+
* This is where they bite. A gateway lists one manifest per authorized
|
|
59
|
+
* catalog, and a large deployment's `query_dataset` schema names every
|
|
60
|
+
* dataset, dimension, measure, and filter field it published. Exceeding the
|
|
61
|
+
* budget raises `MCPCatalogBudgetError`, which a caller is expected to catch
|
|
62
|
+
* and answer by choosing a narrower tool mode.
|
|
63
|
+
*/
|
|
64
|
+
catalogBudget?: MCPCatalogBudget;
|
|
55
65
|
/** Attached to `listTools`, so a client can pin what it listed. */
|
|
56
66
|
meta?: MCPToolManifestMeta;
|
|
57
67
|
}
|
|
@@ -65,6 +75,7 @@ export interface MCPDiscoveryExecutorConfig {
|
|
|
65
75
|
export declare class HypequeryMCPDiscoveryExecutor implements MCPToolExecutor {
|
|
66
76
|
private readonly config;
|
|
67
77
|
private readonly querySchemas;
|
|
78
|
+
private readonly catalogBudget;
|
|
68
79
|
private readonly meta;
|
|
69
80
|
constructor(config: MCPDiscoveryExecutorConfig);
|
|
70
81
|
/** The catalog these tools were compiled from, for caching by content. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"discovery-executor.d.ts","sourceRoot":"","sources":["../src/discovery-executor.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH,OAAO,KAAK,EACV,cAAc,EACd,eAAe,EACf,iBAAiB,EACjB,eAAe,EAChB,MAAM,oCAAoC,CAAC;AAG5C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"discovery-executor.d.ts","sourceRoot":"","sources":["../src/discovery-executor.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH,OAAO,KAAK,EACV,cAAc,EACd,eAAe,EACf,iBAAiB,EACjB,eAAe,EAChB,MAAM,oCAAoC,CAAC;AAG5C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAYrD,OAAO,KAAK,EAAE,eAAe,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAEpF;;;;;GAKG;AACH,MAAM,WAAW,mBAAmB;IAClC,6DAA6D;IAC7D,QAAQ,CAAC,kBAAkB,CAAC,EAAE,MAAM,CAAC;IACrC,8DAA8D;IAC9D,QAAQ,CAAC,kBAAkB,CAAC,EAAE,MAAM,CAAC;IACrC,6EAA6E;IAC7E,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;CAC5B;AAED,MAAM,WAAW,0BAA0B;IACzC,0EAA0E;IAC1E,QAAQ,EAAE,eAAe,CAAC;IAC1B;;;;;;;;OAQG;IACH,iBAAiB,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACtC,6EAA6E;IAC7E,WAAW,CAAC,EAAE,cAAc,CAAC;IAC7B;;;;;;;;OAQG;IACH,aAAa,CAAC,EAAE,gBAAgB,CAAC;IACjC,mEAAmE;IACnE,IAAI,CAAC,EAAE,mBAAmB,CAAC;CAC5B;AAeD;;;;;;GAMG;AACH,qBAAa,6BAA8B,YAAW,eAAe;IAKvD,OAAO,CAAC,QAAQ,CAAC,MAAM;IAJnC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAgC;IAC7D,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAyB;IACvD,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAqC;gBAE7B,MAAM,EAAE,0BAA0B;IAY/D,0EAA0E;IAC1E,eAAe,IAAI,MAAM;IAInB,SAAS,IAAI,OAAO,CAAC,eAAe,CAAC;IAUrC,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,cAAc,CAAC;IAyB/E,WAAW,IAAI,OAAO,CAAC,iBAAiB,CAAC;IAczC,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,eAAe,CAAC;CAMvF;AAED,wBAAgB,0BAA0B,CACxC,MAAM,EAAE,0BAA0B,GACjC,eAAe,CAEjB"}
|
|
@@ -26,6 +26,7 @@ import { getDatasetSchemaTool } from './tools/introspect.js';
|
|
|
26
26
|
import { listDatasetsTool } from './tools/list-datasets.js';
|
|
27
27
|
import { buildMCPToolManifest } from './tools/tool-manifest.js';
|
|
28
28
|
import { buildMCPQuerySchemas } from './tools/utils/canonical-query-schemas.js';
|
|
29
|
+
import { assertManifestWithinBudget, resolveCatalogBudget, } from './tools/utils/catalog-budget.js';
|
|
29
30
|
import { createMCPErrorResponse } from './tools/utils/tool-response.js';
|
|
30
31
|
const NOT_EXECUTABLE = 'This endpoint lists datasets and metrics but does not execute queries.';
|
|
31
32
|
function metaEntries(meta) {
|
|
@@ -48,12 +49,14 @@ function metaEntries(meta) {
|
|
|
48
49
|
export class HypequeryMCPDiscoveryExecutor {
|
|
49
50
|
config;
|
|
50
51
|
querySchemas;
|
|
52
|
+
catalogBudget;
|
|
51
53
|
meta;
|
|
52
54
|
constructor(config) {
|
|
53
55
|
this.config = config;
|
|
54
56
|
// Deliberately no tenant assertion. A gateway has no fixed tenant to
|
|
55
57
|
// declare, and none is needed: nothing here reaches a table.
|
|
56
58
|
this.querySchemas = buildMCPQuerySchemas(config.datasets ?? {}, config.queryLimits, config.queryableDatasets);
|
|
59
|
+
this.catalogBudget = resolveCatalogBudget(config.catalogBudget);
|
|
57
60
|
this.meta = metaEntries(config.meta);
|
|
58
61
|
}
|
|
59
62
|
/** The catalog these tools were compiled from, for caching by content. */
|
|
@@ -61,7 +64,9 @@ export class HypequeryMCPDiscoveryExecutor {
|
|
|
61
64
|
return this.querySchemas.manifestHash;
|
|
62
65
|
}
|
|
63
66
|
async listTools() {
|
|
64
|
-
|
|
67
|
+
// Budgeted before `_meta` is attached, so the ceiling measures the catalog
|
|
68
|
+
// rather than the provenance a gateway chose to stamp on it.
|
|
69
|
+
const manifest = assertManifestWithinBudget(buildMCPToolManifest(this.querySchemas), this.catalogBudget);
|
|
65
70
|
return this.meta === undefined ? manifest : { ...manifest, _meta: this.meta };
|
|
66
71
|
}
|
|
67
72
|
async callTool(name, args) {
|
package/dist/errors.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export type MCPToolErrorCode = 'MCP_INVALID_ARGUMENTS' | 'MCP_NOT_FOUND' | 'MCP_UNKNOWN_TOOL' | 'MCP_UNAUTHORIZED' | 'MCP_STALE_CONTRACT' | 'MCP_REQUEST_CANCELLED' | 'MCP_QUERY_TIMEOUT' | 'MCP_RESULT_TOO_LARGE' | 'MCP_EXECUTION_FAILED';
|
|
1
|
+
export type MCPToolErrorCode = 'MCP_INVALID_ARGUMENTS' | 'MCP_NOT_FOUND' | 'MCP_UNKNOWN_TOOL' | 'MCP_UNAUTHORIZED' | 'MCP_STALE_CONTRACT' | 'MCP_REQUEST_CANCELLED' | 'MCP_QUERY_TIMEOUT' | 'MCP_RESULT_TOO_LARGE' | 'MCP_CATALOG_TOO_LARGE' | 'MCP_EXECUTION_FAILED';
|
|
2
2
|
export type MCPToolErrorCategory = 'correctable_input' | 'unauthorized' | 'stale_contract' | 'budget' | 'internal';
|
|
3
3
|
/** @deprecated Use MCPToolErrorCode. */
|
|
4
4
|
export type MCPExecutionErrorCode = Extract<MCPToolErrorCode, 'MCP_REQUEST_CANCELLED' | 'MCP_QUERY_TIMEOUT' | 'MCP_RESULT_TOO_LARGE'>;
|
|
@@ -24,6 +24,20 @@ export declare class MCPExecutionBudgetError extends MCPToolError {
|
|
|
24
24
|
readonly code: MCPExecutionErrorCode;
|
|
25
25
|
constructor(code: MCPExecutionErrorCode, message: string);
|
|
26
26
|
}
|
|
27
|
+
/**
|
|
28
|
+
* A catalog too large to advertise.
|
|
29
|
+
*
|
|
30
|
+
* Separate from `MCPExecutionBudgetError` because it is not raised by a query:
|
|
31
|
+
* it is raised while listing, before any call exists, and a hosted gateway is
|
|
32
|
+
* expected to catch it and choose a smaller tool mode rather than surface it to
|
|
33
|
+
* a client. Truncating instead would be worse — an agent would be shown fewer
|
|
34
|
+
* targets than the validators behind it accept, and the manifest hash would
|
|
35
|
+
* stop identifying the catalog it was built from.
|
|
36
|
+
*/
|
|
37
|
+
export declare class MCPCatalogBudgetError extends MCPToolError {
|
|
38
|
+
readonly code: 'MCP_CATALOG_TOO_LARGE';
|
|
39
|
+
constructor(message: string);
|
|
40
|
+
}
|
|
27
41
|
export declare function classifyMCPToolError(error: unknown): MCPErrorDetails;
|
|
28
42
|
export declare function formatMCPToolError(error: unknown): string;
|
|
29
43
|
//# sourceMappingURL=errors.d.ts.map
|
package/dist/errors.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,gBAAgB,GACxB,uBAAuB,GACvB,eAAe,GACf,kBAAkB,GAClB,kBAAkB,GAClB,oBAAoB,GACpB,uBAAuB,GACvB,mBAAmB,GACnB,sBAAsB,GACtB,sBAAsB,CAAC;AAE3B,MAAM,MAAM,oBAAoB,GAC5B,mBAAmB,GACnB,cAAc,GACd,gBAAgB,GAChB,QAAQ,GACR,UAAU,CAAC;AAEf,wCAAwC;AACxC,MAAM,MAAM,qBAAqB,GAAG,OAAO,CACzC,gBAAgB,EAChB,uBAAuB,GAAG,mBAAmB,GAAG,sBAAsB,CACvE,CAAC;AAEF,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,gBAAgB,CAAC;IACvB,QAAQ,EAAE,oBAAoB,CAAC;IAC/B,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,OAAO,CAAC;IACnB,WAAW,EAAE,OAAO,CAAC;CACtB;
|
|
1
|
+
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,gBAAgB,GACxB,uBAAuB,GACvB,eAAe,GACf,kBAAkB,GAClB,kBAAkB,GAClB,oBAAoB,GACpB,uBAAuB,GACvB,mBAAmB,GACnB,sBAAsB,GACtB,uBAAuB,GACvB,sBAAsB,CAAC;AAE3B,MAAM,MAAM,oBAAoB,GAC5B,mBAAmB,GACnB,cAAc,GACd,gBAAgB,GAChB,QAAQ,GACR,UAAU,CAAC;AAEf,wCAAwC;AACxC,MAAM,MAAM,qBAAqB,GAAG,OAAO,CACzC,gBAAgB,EAChB,uBAAuB,GAAG,mBAAmB,GAAG,sBAAsB,CACvE,CAAC;AAEF,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,gBAAgB,CAAC;IACvB,QAAQ,EAAE,oBAAoB,CAAC;IAC/B,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,OAAO,CAAC;IACnB,WAAW,EAAE,OAAO,CAAC;CACtB;AA0BD,qBAAa,YAAa,SAAQ,KAAK;IACrC,QAAQ,CAAC,IAAI,EAAE,gBAAgB,CAAC;IAChC,QAAQ,CAAC,QAAQ,EAAE,oBAAoB,CAAC;IACxC,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;IAC5B,QAAQ,CAAC,WAAW,EAAE,OAAO,CAAC;gBAG5B,IAAI,EAAE,gBAAgB,EACtB,OAAO,EAAE,MAAM,EACf,OAAO,GAAE;QACP,QAAQ,CAAC,EAAE,oBAAoB,CAAC;QAChC,SAAS,CAAC,EAAE,OAAO,CAAC;QACpB,WAAW,CAAC,EAAE,OAAO,CAAC;KAClB;CAUT;AAED,qBAAa,uBAAwB,SAAQ,YAAY;IACvD,SAAiB,IAAI,EAAE,qBAAqB,CAAC;gBAEjC,IAAI,EAAE,qBAAqB,EAAE,OAAO,EAAE,MAAM;CAOzD;AAED;;;;;;;;;GASG;AACH,qBAAa,qBAAsB,SAAQ,YAAY;IACrD,SAAiB,IAAI,EAAE,uBAAuB,CAAC;gBAEnC,OAAO,EAAE,MAAM;CAI5B;AAED,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,OAAO,GAAG,eAAe,CAkBpE;AAED,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAGzD"}
|
package/dist/errors.js
CHANGED
|
@@ -8,8 +8,12 @@ function defaultErrorMetadata(code) {
|
|
|
8
8
|
return { category: 'unauthorized', retryable: false, correctable: false };
|
|
9
9
|
case 'MCP_STALE_CONTRACT':
|
|
10
10
|
return { category: 'stale_contract', retryable: true, correctable: false };
|
|
11
|
+
// `MCP_CATALOG_TOO_LARGE` is not retryable: the same catalog produces the
|
|
12
|
+
// same manifest every time. A caller fixes it by publishing fewer targets
|
|
13
|
+
// or choosing a tool mode that does not name every one of them.
|
|
11
14
|
case 'MCP_REQUEST_CANCELLED':
|
|
12
15
|
case 'MCP_RESULT_TOO_LARGE':
|
|
16
|
+
case 'MCP_CATALOG_TOO_LARGE':
|
|
13
17
|
return { category: 'budget', retryable: false, correctable: false };
|
|
14
18
|
case 'MCP_QUERY_TIMEOUT':
|
|
15
19
|
return { category: 'budget', retryable: true, correctable: false };
|
|
@@ -41,6 +45,22 @@ export class MCPExecutionBudgetError extends MCPToolError {
|
|
|
41
45
|
this.name = 'MCPExecutionBudgetError';
|
|
42
46
|
}
|
|
43
47
|
}
|
|
48
|
+
/**
|
|
49
|
+
* A catalog too large to advertise.
|
|
50
|
+
*
|
|
51
|
+
* Separate from `MCPExecutionBudgetError` because it is not raised by a query:
|
|
52
|
+
* it is raised while listing, before any call exists, and a hosted gateway is
|
|
53
|
+
* expected to catch it and choose a smaller tool mode rather than surface it to
|
|
54
|
+
* a client. Truncating instead would be worse — an agent would be shown fewer
|
|
55
|
+
* targets than the validators behind it accept, and the manifest hash would
|
|
56
|
+
* stop identifying the catalog it was built from.
|
|
57
|
+
*/
|
|
58
|
+
export class MCPCatalogBudgetError extends MCPToolError {
|
|
59
|
+
constructor(message) {
|
|
60
|
+
super('MCP_CATALOG_TOO_LARGE', message, { category: 'budget', retryable: false });
|
|
61
|
+
this.name = 'MCPCatalogBudgetError';
|
|
62
|
+
}
|
|
63
|
+
}
|
|
44
64
|
export function classifyMCPToolError(error) {
|
|
45
65
|
if (error instanceof MCPToolError) {
|
|
46
66
|
return {
|
package/dist/executor.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { CallToolResult, GetPromptResult, ListPromptsResult, ListToolsResult } from '@modelcontextprotocol/sdk/types.js';
|
|
2
2
|
import type { DatasetClient } from '@hypequery/datasets';
|
|
3
|
-
import type { DatasetRegistry, MCPExecutionBudget, MCPQueryLimits } from './types.js';
|
|
3
|
+
import type { DatasetRegistry, MCPCatalogBudget, MCPExecutionBudget, MCPQueryLimits } from './types.js';
|
|
4
4
|
export interface MCPExecutorConfig {
|
|
5
5
|
/** Dataset registry - map of dataset names to instances. */
|
|
6
6
|
datasets: DatasetRegistry;
|
|
@@ -14,6 +14,8 @@ export interface MCPExecutorConfig {
|
|
|
14
14
|
queryLimits?: MCPQueryLimits;
|
|
15
15
|
/** Query deadline and serialized-result byte ceilings. */
|
|
16
16
|
executionBudget?: MCPExecutionBudget;
|
|
17
|
+
/** Tool-count and manifest-byte ceilings applied when listing tools. */
|
|
18
|
+
catalogBudget?: MCPCatalogBudget;
|
|
17
19
|
}
|
|
18
20
|
export interface MCPServerConfig extends MCPExecutorConfig {
|
|
19
21
|
/** Server name shown to MCP clients. */
|
|
@@ -39,6 +41,7 @@ export declare class HypequeryMCPExecutor implements MCPToolExecutor {
|
|
|
39
41
|
private readonly config;
|
|
40
42
|
private readonly querySchemas;
|
|
41
43
|
private readonly executionBudget;
|
|
44
|
+
private readonly catalogBudget;
|
|
42
45
|
constructor(config: MCPExecutorConfig);
|
|
43
46
|
getManifestHash(): string;
|
|
44
47
|
listTools(): Promise<ListToolsResult>;
|
package/dist/executor.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"executor.d.ts","sourceRoot":"","sources":["../src/executor.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,cAAc,EACd,eAAe,EACf,iBAAiB,EACjB,eAAe,EAChB,MAAM,oCAAoC,CAAC;AAC5C,OAAO,KAAK,EAEV,aAAa,EACd,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"executor.d.ts","sourceRoot":"","sources":["../src/executor.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,cAAc,EACd,eAAe,EACf,iBAAiB,EACjB,eAAe,EAChB,MAAM,oCAAoC,CAAC;AAC5C,OAAO,KAAK,EAEV,aAAa,EACd,MAAM,qBAAqB,CAAC;AAoB7B,OAAO,KAAK,EACV,eAAe,EACf,gBAAgB,EAChB,kBAAkB,EAClB,cAAc,EACf,MAAM,YAAY,CAAC;AAOpB,MAAM,WAAW,iBAAiB;IAChC,4DAA4D;IAC5D,QAAQ,EAAE,eAAe,CAAC;IAC1B,wEAAwE;IACxE,SAAS,EAAE,aAAa,CAAC;IACzB,6DAA6D;IAC7D,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,2EAA2E;IAC3E,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,wEAAwE;IACxE,WAAW,CAAC,EAAE,cAAc,CAAC;IAC7B,0DAA0D;IAC1D,eAAe,CAAC,EAAE,kBAAkB,CAAC;IACrC,wEAAwE;IACxE,aAAa,CAAC,EAAE,gBAAgB,CAAC;CAClC;AAED,MAAM,WAAW,eAAgB,SAAQ,iBAAiB;IACxD,wCAAwC;IACxC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,2CAA2C;IAC3C,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,eAAe;IAC9B,SAAS,IAAI,OAAO,CAAC,eAAe,CAAC,CAAC;IACtC,QAAQ,CACN,IAAI,EAAE,MAAM,EACZ,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC9B,MAAM,CAAC,EAAE,WAAW,GACnB,OAAO,CAAC,cAAc,CAAC,CAAC;IAC3B,WAAW,IAAI,OAAO,CAAC,iBAAiB,CAAC,CAAC;IAC1C,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,eAAe,CAAC,CAAC;IACjF,eAAe,IAAI,MAAM,CAAC;CAC3B;AAED;;;;;;GAMG;AACH,qBAAa,oBAAqB,YAAW,eAAe;IAK9C,OAAO,CAAC,QAAQ,CAAC,MAAM;IAJnC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAgC;IAC7D,OAAO,CAAC,QAAQ,CAAC,eAAe,CAA2B;IAC3D,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAyB;gBAE1B,MAAM,EAAE,iBAAiB;IAQtD,eAAe,IAAI,MAAM;IAInB,SAAS,IAAI,OAAO,CAAC,eAAe,CAAC;IAIrC,QAAQ,CACZ,IAAI,EAAE,MAAM,EACZ,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC9B,MAAM,CAAC,EAAE,WAAW,GACnB,OAAO,CAAC,cAAc,CAAC;IAwDpB,WAAW,IAAI,OAAO,CAAC,iBAAiB,CAAC;IAkBzC,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,eAAe,CAAC;CAOvF;AAED,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,iBAAiB,GAAG,oBAAoB,CAEjF"}
|
package/dist/executor.js
CHANGED
|
@@ -6,6 +6,7 @@ import { queryDatasetTool } from './tools/query-dataset.js';
|
|
|
6
6
|
import { queryMetricTool } from './tools/query-metric.js';
|
|
7
7
|
import { buildMCPToolManifest } from './tools/tool-manifest.js';
|
|
8
8
|
import { buildMCPQuerySchemas } from './tools/utils/canonical-query-schemas.js';
|
|
9
|
+
import { assertManifestWithinBudget, resolveCatalogBudget, } from './tools/utils/catalog-budget.js';
|
|
9
10
|
import { assertWithinBudget, resolveExecutionBudget, } from './tools/utils/execution-budget.js';
|
|
10
11
|
import { resolveQueryLimits } from './tools/utils/query-limits.js';
|
|
11
12
|
import { validateMCPServerTenantConfig } from './utils/tenant-config.js';
|
|
@@ -21,18 +22,20 @@ export class HypequeryMCPExecutor {
|
|
|
21
22
|
config;
|
|
22
23
|
querySchemas;
|
|
23
24
|
executionBudget;
|
|
25
|
+
catalogBudget;
|
|
24
26
|
constructor(config) {
|
|
25
27
|
this.config = config;
|
|
26
28
|
validateMCPServerTenantConfig(config);
|
|
27
29
|
resolveQueryLimits(undefined, config.queryLimits);
|
|
28
30
|
this.executionBudget = resolveExecutionBudget(config.executionBudget);
|
|
31
|
+
this.catalogBudget = resolveCatalogBudget(config.catalogBudget);
|
|
29
32
|
this.querySchemas = buildMCPQuerySchemas(config.datasets ?? {}, config.queryLimits);
|
|
30
33
|
}
|
|
31
34
|
getManifestHash() {
|
|
32
35
|
return this.querySchemas.manifestHash;
|
|
33
36
|
}
|
|
34
37
|
async listTools() {
|
|
35
|
-
return buildMCPToolManifest(this.querySchemas);
|
|
38
|
+
return assertManifestWithinBudget(buildMCPToolManifest(this.querySchemas), this.catalogBudget);
|
|
36
39
|
}
|
|
37
40
|
async callTool(name, args, signal) {
|
|
38
41
|
try {
|
package/dist/index.d.ts
CHANGED
|
@@ -14,8 +14,8 @@ export { getDatasetSchemaTool, getTrustedDatasetSchema } from './tools/introspec
|
|
|
14
14
|
export { queryMetricTool } from './tools/query-metric.js';
|
|
15
15
|
export { queryDatasetTool } from './tools/query-dataset.js';
|
|
16
16
|
export { datasetGuidePrompt } from './prompts/dataset-guide.js';
|
|
17
|
-
export type { DatasetRegistry, QueryMetricArgs, QueryDatasetArgs, QueryToolOptions, MCPExecutionBudget, MCPQueryLimits, SchemaToolOptions, GetDatasetSchemaArgs, MCPToolResponse, DatasetSchema, DimensionSchema, MetricSchema, RelationshipSchema, DatasetListItem, DatasetsListResponse, QueryResultResponse, QueryResultMeta, } from './types.js';
|
|
18
|
-
export { MCPExecutionBudgetError, MCPToolError, classifyMCPToolError, formatMCPToolError, type MCPErrorDetails, type MCPExecutionErrorCode, type MCPToolErrorCode, type MCPToolErrorCategory, } from './errors.js';
|
|
19
|
-
export { MAX_QUERY_LIMIT, DEFAULT_QUERY_LIMIT, MAX_QUERY_OFFSET, MAX_QUERY_DIMENSIONS, MAX_QUERY_MEASURES, MAX_QUERY_FILTERS, MAX_QUERY_ORDER_BY, DEFAULT_QUERY_TIMEOUT_MS, MAX_QUERY_TIMEOUT_MS, DEFAULT_RESPONSE_BYTES, MAX_RESPONSE_BYTES, } from './types.js';
|
|
17
|
+
export type { DatasetRegistry, QueryMetricArgs, QueryDatasetArgs, QueryToolOptions, MCPExecutionBudget, MCPCatalogBudget, MCPQueryLimits, SchemaToolOptions, GetDatasetSchemaArgs, MCPToolResponse, DatasetSchema, DimensionSchema, MetricSchema, RelationshipSchema, DatasetListItem, DatasetsListResponse, QueryResultResponse, QueryResultMeta, } from './types.js';
|
|
18
|
+
export { MCPCatalogBudgetError, MCPExecutionBudgetError, MCPToolError, classifyMCPToolError, formatMCPToolError, type MCPErrorDetails, type MCPExecutionErrorCode, type MCPToolErrorCode, type MCPToolErrorCategory, } from './errors.js';
|
|
19
|
+
export { MAX_QUERY_LIMIT, DEFAULT_QUERY_LIMIT, MAX_QUERY_OFFSET, MAX_QUERY_DIMENSIONS, MAX_QUERY_MEASURES, MAX_QUERY_FILTERS, MAX_QUERY_ORDER_BY, DEFAULT_QUERY_TIMEOUT_MS, MAX_QUERY_TIMEOUT_MS, DEFAULT_RESPONSE_BYTES, MAX_RESPONSE_BYTES, DEFAULT_MANIFEST_TOOLS, MAX_MANIFEST_TOOLS, DEFAULT_MANIFEST_BYTES, MAX_MANIFEST_BYTES, } from './types.js';
|
|
20
20
|
export { MCP_PACKAGE_VERSION } from './version.js';
|
|
21
21
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,kBAAkB,EAAE,eAAe,EAAE,KAAK,eAAe,EAAE,MAAM,aAAa,CAAC;AACxF,OAAO,EACL,oBAAoB,EACpB,iBAAiB,EACjB,KAAK,iBAAiB,EACtB,KAAK,eAAe,GACrB,MAAM,eAAe,CAAC;AACvB,OAAO,EACL,6BAA6B,EAC7B,0BAA0B,EAC1B,KAAK,0BAA0B,EAC/B,KAAK,mBAAmB,GACzB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EACL,0BAA0B,EAC1B,uBAAuB,EACvB,KAAK,wBAAwB,GAC9B,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,qBAAqB,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AACxE,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAC5D,OAAO,EAAE,oBAAoB,EAAE,uBAAuB,EAAE,MAAM,uBAAuB,CAAC;AACtF,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC1D,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAC5D,OAAO,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AAGhE,YAAY,EACV,eAAe,EACf,eAAe,EACf,gBAAgB,EAChB,gBAAgB,EAChB,kBAAkB,EAClB,cAAc,EACd,iBAAiB,EACjB,oBAAoB,EACpB,eAAe,EACf,aAAa,EACb,eAAe,EACf,YAAY,EACZ,kBAAkB,EAClB,eAAe,EACf,oBAAoB,EACpB,mBAAmB,EACnB,eAAe,GAChB,MAAM,YAAY,CAAC;AACpB,OAAO,EACL,uBAAuB,EACvB,YAAY,EACZ,oBAAoB,EACpB,kBAAkB,EAClB,KAAK,eAAe,EACpB,KAAK,qBAAqB,EAC1B,KAAK,gBAAgB,EACrB,KAAK,oBAAoB,GAC1B,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,eAAe,EACf,mBAAmB,EACnB,gBAAgB,EAChB,oBAAoB,EACpB,kBAAkB,EAClB,iBAAiB,EACjB,kBAAkB,EAClB,wBAAwB,EACxB,oBAAoB,EACpB,sBAAsB,EACtB,kBAAkB,GACnB,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,kBAAkB,EAAE,eAAe,EAAE,KAAK,eAAe,EAAE,MAAM,aAAa,CAAC;AACxF,OAAO,EACL,oBAAoB,EACpB,iBAAiB,EACjB,KAAK,iBAAiB,EACtB,KAAK,eAAe,GACrB,MAAM,eAAe,CAAC;AACvB,OAAO,EACL,6BAA6B,EAC7B,0BAA0B,EAC1B,KAAK,0BAA0B,EAC/B,KAAK,mBAAmB,GACzB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EACL,0BAA0B,EAC1B,uBAAuB,EACvB,KAAK,wBAAwB,GAC9B,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,qBAAqB,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AACxE,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAC5D,OAAO,EAAE,oBAAoB,EAAE,uBAAuB,EAAE,MAAM,uBAAuB,CAAC;AACtF,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC1D,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAC5D,OAAO,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AAGhE,YAAY,EACV,eAAe,EACf,eAAe,EACf,gBAAgB,EAChB,gBAAgB,EAChB,kBAAkB,EAClB,gBAAgB,EAChB,cAAc,EACd,iBAAiB,EACjB,oBAAoB,EACpB,eAAe,EACf,aAAa,EACb,eAAe,EACf,YAAY,EACZ,kBAAkB,EAClB,eAAe,EACf,oBAAoB,EACpB,mBAAmB,EACnB,eAAe,GAChB,MAAM,YAAY,CAAC;AACpB,OAAO,EACL,qBAAqB,EACrB,uBAAuB,EACvB,YAAY,EACZ,oBAAoB,EACpB,kBAAkB,EAClB,KAAK,eAAe,EACpB,KAAK,qBAAqB,EAC1B,KAAK,gBAAgB,EACrB,KAAK,oBAAoB,GAC1B,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,eAAe,EACf,mBAAmB,EACnB,gBAAgB,EAChB,oBAAoB,EACpB,kBAAkB,EAClB,iBAAiB,EACjB,kBAAkB,EAClB,wBAAwB,EACxB,oBAAoB,EACpB,sBAAsB,EACtB,kBAAkB,EAClB,sBAAsB,EACtB,kBAAkB,EAClB,sBAAsB,EACtB,kBAAkB,GACnB,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -14,6 +14,6 @@ export { getDatasetSchemaTool, getTrustedDatasetSchema } from './tools/introspec
|
|
|
14
14
|
export { queryMetricTool } from './tools/query-metric.js';
|
|
15
15
|
export { queryDatasetTool } from './tools/query-dataset.js';
|
|
16
16
|
export { datasetGuidePrompt } from './prompts/dataset-guide.js';
|
|
17
|
-
export { MCPExecutionBudgetError, MCPToolError, classifyMCPToolError, formatMCPToolError, } from './errors.js';
|
|
18
|
-
export { MAX_QUERY_LIMIT, DEFAULT_QUERY_LIMIT, MAX_QUERY_OFFSET, MAX_QUERY_DIMENSIONS, MAX_QUERY_MEASURES, MAX_QUERY_FILTERS, MAX_QUERY_ORDER_BY, DEFAULT_QUERY_TIMEOUT_MS, MAX_QUERY_TIMEOUT_MS, DEFAULT_RESPONSE_BYTES, MAX_RESPONSE_BYTES, } from './types.js';
|
|
17
|
+
export { MCPCatalogBudgetError, MCPExecutionBudgetError, MCPToolError, classifyMCPToolError, formatMCPToolError, } from './errors.js';
|
|
18
|
+
export { MAX_QUERY_LIMIT, DEFAULT_QUERY_LIMIT, MAX_QUERY_OFFSET, MAX_QUERY_DIMENSIONS, MAX_QUERY_MEASURES, MAX_QUERY_FILTERS, MAX_QUERY_ORDER_BY, DEFAULT_QUERY_TIMEOUT_MS, MAX_QUERY_TIMEOUT_MS, DEFAULT_RESPONSE_BYTES, MAX_RESPONSE_BYTES, DEFAULT_MANIFEST_TOOLS, MAX_MANIFEST_TOOLS, DEFAULT_MANIFEST_BYTES, MAX_MANIFEST_BYTES, } from './types.js';
|
|
19
19
|
export { MCP_PACKAGE_VERSION } from './version.js';
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { type MCPCatalogBudget } from '../../types.js';
|
|
2
|
+
import type { ListToolsResult } from '@modelcontextprotocol/sdk/types.js';
|
|
3
|
+
export interface EffectiveCatalogBudget {
|
|
4
|
+
readonly maxTools: number;
|
|
5
|
+
readonly maxManifestBytes: number;
|
|
6
|
+
}
|
|
7
|
+
export declare function resolveCatalogBudget(configured?: MCPCatalogBudget): EffectiveCatalogBudget;
|
|
8
|
+
/**
|
|
9
|
+
* Refuses a manifest too large to advertise, and says which ceiling it hit.
|
|
10
|
+
*
|
|
11
|
+
* Both counts are reported so a caller choosing a tool mode can tell a catalog
|
|
12
|
+
* with too many targets from one with a few enormous ones; the answers are
|
|
13
|
+
* different — fewer tools versus fewer enum members per tool.
|
|
14
|
+
*/
|
|
15
|
+
export declare function assertManifestWithinBudget(manifest: ListToolsResult, budget: EffectiveCatalogBudget): ListToolsResult;
|
|
16
|
+
//# sourceMappingURL=catalog-budget.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"catalog-budget.d.ts","sourceRoot":"","sources":["../../../src/tools/utils/catalog-budget.ts"],"names":[],"mappings":"AACA,OAAO,EAKL,KAAK,gBAAgB,EACtB,MAAM,gBAAgB,CAAC;AACxB,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,oCAAoC,CAAC;AAE1E,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;CACnC;AAeD,wBAAgB,oBAAoB,CAClC,UAAU,GAAE,gBAAqB,GAChC,sBAAsB,CAUxB;AAED;;;;;;GAMG;AACH,wBAAgB,0BAA0B,CACxC,QAAQ,EAAE,eAAe,EACzB,MAAM,EAAE,sBAAsB,GAC7B,eAAe,CAcjB"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { MCPCatalogBudgetError } from '../../errors.js';
|
|
2
|
+
import { DEFAULT_MANIFEST_BYTES, DEFAULT_MANIFEST_TOOLS, MAX_MANIFEST_BYTES, MAX_MANIFEST_TOOLS, } from '../../types.js';
|
|
3
|
+
function ceiling(value, fallback, maximum, name) {
|
|
4
|
+
const resolved = value ?? fallback;
|
|
5
|
+
if (!Number.isSafeInteger(resolved) || resolved < 1 || resolved > maximum) {
|
|
6
|
+
throw new Error(`${name} must be an integer between 1 and ${maximum}`);
|
|
7
|
+
}
|
|
8
|
+
return resolved;
|
|
9
|
+
}
|
|
10
|
+
export function resolveCatalogBudget(configured = {}) {
|
|
11
|
+
return Object.freeze({
|
|
12
|
+
maxTools: ceiling(configured.maxTools, DEFAULT_MANIFEST_TOOLS, MAX_MANIFEST_TOOLS, 'maxTools'),
|
|
13
|
+
maxManifestBytes: ceiling(configured.maxManifestBytes, DEFAULT_MANIFEST_BYTES, MAX_MANIFEST_BYTES, 'maxManifestBytes'),
|
|
14
|
+
});
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Refuses a manifest too large to advertise, and says which ceiling it hit.
|
|
18
|
+
*
|
|
19
|
+
* Both counts are reported so a caller choosing a tool mode can tell a catalog
|
|
20
|
+
* with too many targets from one with a few enormous ones; the answers are
|
|
21
|
+
* different — fewer tools versus fewer enum members per tool.
|
|
22
|
+
*/
|
|
23
|
+
export function assertManifestWithinBudget(manifest, budget) {
|
|
24
|
+
if (manifest.tools.length > budget.maxTools) {
|
|
25
|
+
throw new MCPCatalogBudgetError(`The tool manifest advertises ${manifest.tools.length} tools; maximum is ${budget.maxTools}`);
|
|
26
|
+
}
|
|
27
|
+
const size = Buffer.byteLength(JSON.stringify(manifest), 'utf8');
|
|
28
|
+
if (size > budget.maxManifestBytes) {
|
|
29
|
+
throw new MCPCatalogBudgetError(`The tool manifest is ${size} bytes across ${manifest.tools.length} tools; `
|
|
30
|
+
+ `maximum is ${budget.maxManifestBytes} bytes`);
|
|
31
|
+
}
|
|
32
|
+
return manifest;
|
|
33
|
+
}
|
package/dist/types.d.ts
CHANGED
|
@@ -49,6 +49,34 @@ export interface MCPExecutionBudget {
|
|
|
49
49
|
/** Maximum UTF-8 bytes in the serialized query response. Defaults to 1 MiB. */
|
|
50
50
|
maxResponseBytes?: number;
|
|
51
51
|
}
|
|
52
|
+
/**
|
|
53
|
+
* Ceilings on the tool manifest itself, rather than on any one call.
|
|
54
|
+
*
|
|
55
|
+
* Every other budget here bounds a query. This one bounds what a client is
|
|
56
|
+
* handed before it makes one: `query_dataset` and `query_metric` carry exact
|
|
57
|
+
* enums of every published dataset, dimension, measure, and filter field, so a
|
|
58
|
+
* large catalog produces a large manifest — paid by every client on every
|
|
59
|
+
* connection, and spent out of the model's context before a question is asked.
|
|
60
|
+
*
|
|
61
|
+
* A breach raises `MCPCatalogBudgetError`. It is not truncated: an agent shown
|
|
62
|
+
* fewer targets than the validators accept would be misled, and the manifest
|
|
63
|
+
* hash would no longer identify the catalog behind it.
|
|
64
|
+
*/
|
|
65
|
+
export interface MCPCatalogBudget {
|
|
66
|
+
/**
|
|
67
|
+
* Maximum tools a manifest may advertise. Defaults to 64, ceiling 256.
|
|
68
|
+
*
|
|
69
|
+
* The local server publishes a fixed four. This exists for the hosted tool
|
|
70
|
+
* modes that publish one tool per dataset or per verified metric, where the
|
|
71
|
+
* count follows the catalog and needs a stop.
|
|
72
|
+
*/
|
|
73
|
+
maxTools?: number;
|
|
74
|
+
/**
|
|
75
|
+
* Maximum UTF-8 bytes in the serialized manifest. Defaults to 256 KiB,
|
|
76
|
+
* ceiling 1 MiB.
|
|
77
|
+
*/
|
|
78
|
+
maxManifestBytes?: number;
|
|
79
|
+
}
|
|
52
80
|
/** Server-side ceilings applied in addition to Dataset limits. */
|
|
53
81
|
export interface MCPQueryLimits {
|
|
54
82
|
/** Rows used when a tool call omits `limit`. Defaults to 100. */
|
|
@@ -174,4 +202,8 @@ export declare const DEFAULT_QUERY_TIMEOUT_MS = 30000;
|
|
|
174
202
|
export declare const MAX_QUERY_TIMEOUT_MS = 120000;
|
|
175
203
|
export declare const DEFAULT_RESPONSE_BYTES = 1048576;
|
|
176
204
|
export declare const MAX_RESPONSE_BYTES = 10485760;
|
|
205
|
+
export declare const DEFAULT_MANIFEST_TOOLS = 64;
|
|
206
|
+
export declare const MAX_MANIFEST_TOOLS = 256;
|
|
207
|
+
export declare const DEFAULT_MANIFEST_BYTES = 262144;
|
|
208
|
+
export declare const MAX_MANIFEST_BYTES = 1048576;
|
|
177
209
|
//# sourceMappingURL=types.d.ts.map
|
package/dist/types.d.ts.map
CHANGED
|
@@ -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/types.js
CHANGED
|
@@ -15,3 +15,7 @@ export const DEFAULT_QUERY_TIMEOUT_MS = 30_000;
|
|
|
15
15
|
export const MAX_QUERY_TIMEOUT_MS = 120_000;
|
|
16
16
|
export const DEFAULT_RESPONSE_BYTES = 1_048_576;
|
|
17
17
|
export const MAX_RESPONSE_BYTES = 10_485_760;
|
|
18
|
+
export const DEFAULT_MANIFEST_TOOLS = 64;
|
|
19
|
+
export const MAX_MANIFEST_TOOLS = 256;
|
|
20
|
+
export const DEFAULT_MANIFEST_BYTES = 262_144;
|
|
21
|
+
export const MAX_MANIFEST_BYTES = 1_048_576;
|
package/dist/version.d.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export declare const MCP_PACKAGE_VERSION = "0.
|
|
1
|
+
export declare const MCP_PACKAGE_VERSION = "0.8.0";
|
|
2
2
|
//# sourceMappingURL=version.d.ts.map
|
package/dist/version.js
CHANGED
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@hypequery/mcp",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.8.0",
|
|
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.
|
|
36
|
+
"@hypequery/datasets": "^0.16.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.
|
|
44
|
+
"@hypequery/clickhouse": "2.11.0"
|
|
45
45
|
},
|
|
46
46
|
"repository": {
|
|
47
47
|
"type": "git",
|