@contextvm/mcp-sdk 1.27.1-contextvm.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/LICENSE +21 -0
- package/README.md +141 -0
- package/dist/cjs/client/index.d.ts +588 -0
- package/dist/cjs/client/index.d.ts.map +1 -0
- package/dist/cjs/client/index.js +629 -0
- package/dist/cjs/client/index.js.map +1 -0
- package/dist/cjs/client/stdio.d.ts +77 -0
- package/dist/cjs/client/stdio.d.ts.map +1 -0
- package/dist/cjs/client/stdio.js +199 -0
- package/dist/cjs/client/stdio.js.map +1 -0
- package/dist/cjs/experimental/index.d.ts +13 -0
- package/dist/cjs/experimental/index.d.ts.map +1 -0
- package/dist/cjs/experimental/index.js +29 -0
- package/dist/cjs/experimental/index.js.map +1 -0
- package/dist/cjs/experimental/tasks/client.d.ts +121 -0
- package/dist/cjs/experimental/tasks/client.d.ts.map +1 -0
- package/dist/cjs/experimental/tasks/client.js +188 -0
- package/dist/cjs/experimental/tasks/client.js.map +1 -0
- package/dist/cjs/experimental/tasks/helpers.d.ts +47 -0
- package/dist/cjs/experimental/tasks/helpers.d.ts.map +1 -0
- package/dist/cjs/experimental/tasks/helpers.js +68 -0
- package/dist/cjs/experimental/tasks/helpers.js.map +1 -0
- package/dist/cjs/experimental/tasks/index.d.ts +16 -0
- package/dist/cjs/experimental/tasks/index.d.ts.map +1 -0
- package/dist/cjs/experimental/tasks/index.js +39 -0
- package/dist/cjs/experimental/tasks/index.js.map +1 -0
- package/dist/cjs/experimental/tasks/interfaces.d.ts +232 -0
- package/dist/cjs/experimental/tasks/interfaces.d.ts.map +1 -0
- package/dist/cjs/experimental/tasks/interfaces.js +19 -0
- package/dist/cjs/experimental/tasks/interfaces.js.map +1 -0
- package/dist/cjs/experimental/tasks/mcp-server.d.ts +77 -0
- package/dist/cjs/experimental/tasks/mcp-server.d.ts.map +1 -0
- package/dist/cjs/experimental/tasks/mcp-server.js +36 -0
- package/dist/cjs/experimental/tasks/mcp-server.js.map +1 -0
- package/dist/cjs/experimental/tasks/server.d.ts +170 -0
- package/dist/cjs/experimental/tasks/server.d.ts.map +1 -0
- package/dist/cjs/experimental/tasks/server.js +250 -0
- package/dist/cjs/experimental/tasks/server.js.map +1 -0
- package/dist/cjs/experimental/tasks/stores/in-memory.d.ts +94 -0
- package/dist/cjs/experimental/tasks/stores/in-memory.d.ts.map +1 -0
- package/dist/cjs/experimental/tasks/stores/in-memory.js +251 -0
- package/dist/cjs/experimental/tasks/stores/in-memory.js.map +1 -0
- package/dist/cjs/experimental/tasks/types.d.ts +10 -0
- package/dist/cjs/experimental/tasks/types.d.ts.map +1 -0
- package/dist/cjs/experimental/tasks/types.js +28 -0
- package/dist/cjs/experimental/tasks/types.js.map +1 -0
- package/dist/cjs/inMemory.d.ts +31 -0
- package/dist/cjs/inMemory.d.ts.map +1 -0
- package/dist/cjs/inMemory.js +51 -0
- package/dist/cjs/inMemory.js.map +1 -0
- package/dist/cjs/package.json +1 -0
- package/dist/cjs/server/completable.d.ts +38 -0
- package/dist/cjs/server/completable.d.ts.map +1 -0
- package/dist/cjs/server/completable.js +48 -0
- package/dist/cjs/server/completable.js.map +1 -0
- package/dist/cjs/server/index.d.ts +196 -0
- package/dist/cjs/server/index.d.ts.map +1 -0
- package/dist/cjs/server/index.js +444 -0
- package/dist/cjs/server/index.js.map +1 -0
- package/dist/cjs/server/mcp.d.ts +364 -0
- package/dist/cjs/server/mcp.d.ts.map +1 -0
- package/dist/cjs/server/mcp.js +918 -0
- package/dist/cjs/server/mcp.js.map +1 -0
- package/dist/cjs/server/stdio.d.ts +28 -0
- package/dist/cjs/server/stdio.d.ts.map +1 -0
- package/dist/cjs/server/stdio.js +82 -0
- package/dist/cjs/server/stdio.js.map +1 -0
- package/dist/cjs/server/zod-compat.d.ts +84 -0
- package/dist/cjs/server/zod-compat.d.ts.map +1 -0
- package/dist/cjs/server/zod-compat.js +244 -0
- package/dist/cjs/server/zod-compat.js.map +1 -0
- package/dist/cjs/server/zod-json-schema-compat.d.ts +12 -0
- package/dist/cjs/server/zod-json-schema-compat.d.ts.map +1 -0
- package/dist/cjs/server/zod-json-schema-compat.js +79 -0
- package/dist/cjs/server/zod-json-schema-compat.js.map +1 -0
- package/dist/cjs/shared/auth-info.d.ts +32 -0
- package/dist/cjs/shared/auth-info.d.ts.map +1 -0
- package/dist/cjs/shared/auth-info.js +3 -0
- package/dist/cjs/shared/auth-info.js.map +1 -0
- package/dist/cjs/shared/metadataUtils.d.ts +16 -0
- package/dist/cjs/shared/metadataUtils.d.ts.map +1 -0
- package/dist/cjs/shared/metadataUtils.js +25 -0
- package/dist/cjs/shared/metadataUtils.js.map +1 -0
- package/dist/cjs/shared/protocol.d.ts +443 -0
- package/dist/cjs/shared/protocol.d.ts.map +1 -0
- package/dist/cjs/shared/protocol.js +1104 -0
- package/dist/cjs/shared/protocol.js.map +1 -0
- package/dist/cjs/shared/responseMessage.d.ts +45 -0
- package/dist/cjs/shared/responseMessage.d.ts.map +1 -0
- package/dist/cjs/shared/responseMessage.js +23 -0
- package/dist/cjs/shared/responseMessage.js.map +1 -0
- package/dist/cjs/shared/stdio.d.ts +13 -0
- package/dist/cjs/shared/stdio.d.ts.map +1 -0
- package/dist/cjs/shared/stdio.js +37 -0
- package/dist/cjs/shared/stdio.js.map +1 -0
- package/dist/cjs/shared/toolNameValidation.d.ts +31 -0
- package/dist/cjs/shared/toolNameValidation.d.ts.map +1 -0
- package/dist/cjs/shared/toolNameValidation.js +97 -0
- package/dist/cjs/shared/toolNameValidation.js.map +1 -0
- package/dist/cjs/shared/transport.d.ts +89 -0
- package/dist/cjs/shared/transport.d.ts.map +1 -0
- package/dist/cjs/shared/transport.js +43 -0
- package/dist/cjs/shared/transport.js.map +1 -0
- package/dist/cjs/shared/uriTemplate.d.ts +25 -0
- package/dist/cjs/shared/uriTemplate.d.ts.map +1 -0
- package/dist/cjs/shared/uriTemplate.js +243 -0
- package/dist/cjs/shared/uriTemplate.js.map +1 -0
- package/dist/cjs/spec.types.d.ts +2299 -0
- package/dist/cjs/spec.types.d.ts.map +1 -0
- package/dist/cjs/spec.types.js +27 -0
- package/dist/cjs/spec.types.js.map +1 -0
- package/dist/cjs/types.d.ts +8137 -0
- package/dist/cjs/types.d.ts.map +1 -0
- package/dist/cjs/types.js +2092 -0
- package/dist/cjs/types.js.map +1 -0
- package/dist/cjs/validation/ajv-provider.d.ts +53 -0
- package/dist/cjs/validation/ajv-provider.d.ts.map +1 -0
- package/dist/cjs/validation/ajv-provider.js +94 -0
- package/dist/cjs/validation/ajv-provider.js.map +1 -0
- package/dist/cjs/validation/cfworker-provider.d.ts +51 -0
- package/dist/cjs/validation/cfworker-provider.d.ts.map +1 -0
- package/dist/cjs/validation/cfworker-provider.js +69 -0
- package/dist/cjs/validation/cfworker-provider.js.map +1 -0
- package/dist/cjs/validation/index.d.ts +29 -0
- package/dist/cjs/validation/index.d.ts.map +1 -0
- package/dist/cjs/validation/index.js +30 -0
- package/dist/cjs/validation/index.js.map +1 -0
- package/dist/cjs/validation/types.d.ts +65 -0
- package/dist/cjs/validation/types.d.ts.map +1 -0
- package/dist/cjs/validation/types.js +3 -0
- package/dist/cjs/validation/types.js.map +1 -0
- package/dist/esm/client/index.d.ts +588 -0
- package/dist/esm/client/index.d.ts.map +1 -0
- package/dist/esm/client/index.js +624 -0
- package/dist/esm/client/index.js.map +1 -0
- package/dist/esm/client/stdio.d.ts +77 -0
- package/dist/esm/client/stdio.d.ts.map +1 -0
- package/dist/esm/client/stdio.js +191 -0
- package/dist/esm/client/stdio.js.map +1 -0
- package/dist/esm/experimental/index.d.ts +13 -0
- package/dist/esm/experimental/index.d.ts.map +1 -0
- package/dist/esm/experimental/index.js +13 -0
- package/dist/esm/experimental/index.js.map +1 -0
- package/dist/esm/experimental/tasks/client.d.ts +121 -0
- package/dist/esm/experimental/tasks/client.d.ts.map +1 -0
- package/dist/esm/experimental/tasks/client.js +184 -0
- package/dist/esm/experimental/tasks/client.js.map +1 -0
- package/dist/esm/experimental/tasks/helpers.d.ts +47 -0
- package/dist/esm/experimental/tasks/helpers.d.ts.map +1 -0
- package/dist/esm/experimental/tasks/helpers.js +64 -0
- package/dist/esm/experimental/tasks/helpers.js.map +1 -0
- package/dist/esm/experimental/tasks/index.d.ts +16 -0
- package/dist/esm/experimental/tasks/index.d.ts.map +1 -0
- package/dist/esm/experimental/tasks/index.js +20 -0
- package/dist/esm/experimental/tasks/index.js.map +1 -0
- package/dist/esm/experimental/tasks/interfaces.d.ts +232 -0
- package/dist/esm/experimental/tasks/interfaces.d.ts.map +1 -0
- package/dist/esm/experimental/tasks/interfaces.js +16 -0
- package/dist/esm/experimental/tasks/interfaces.js.map +1 -0
- package/dist/esm/experimental/tasks/mcp-server.d.ts +77 -0
- package/dist/esm/experimental/tasks/mcp-server.d.ts.map +1 -0
- package/dist/esm/experimental/tasks/mcp-server.js +32 -0
- package/dist/esm/experimental/tasks/mcp-server.js.map +1 -0
- package/dist/esm/experimental/tasks/server.d.ts +170 -0
- package/dist/esm/experimental/tasks/server.d.ts.map +1 -0
- package/dist/esm/experimental/tasks/server.js +246 -0
- package/dist/esm/experimental/tasks/server.js.map +1 -0
- package/dist/esm/experimental/tasks/stores/in-memory.d.ts +94 -0
- package/dist/esm/experimental/tasks/stores/in-memory.d.ts.map +1 -0
- package/dist/esm/experimental/tasks/stores/in-memory.js +246 -0
- package/dist/esm/experimental/tasks/stores/in-memory.js.map +1 -0
- package/dist/esm/experimental/tasks/types.d.ts +10 -0
- package/dist/esm/experimental/tasks/types.d.ts.map +1 -0
- package/dist/esm/experimental/tasks/types.js +10 -0
- package/dist/esm/experimental/tasks/types.js.map +1 -0
- package/dist/esm/inMemory.d.ts +31 -0
- package/dist/esm/inMemory.d.ts.map +1 -0
- package/dist/esm/inMemory.js +47 -0
- package/dist/esm/inMemory.js.map +1 -0
- package/dist/esm/package.json +1 -0
- package/dist/esm/server/completable.d.ts +38 -0
- package/dist/esm/server/completable.d.ts.map +1 -0
- package/dist/esm/server/completable.js +41 -0
- package/dist/esm/server/completable.js.map +1 -0
- package/dist/esm/server/index.d.ts +196 -0
- package/dist/esm/server/index.d.ts.map +1 -0
- package/dist/esm/server/index.js +440 -0
- package/dist/esm/server/index.js.map +1 -0
- package/dist/esm/server/mcp.d.ts +364 -0
- package/dist/esm/server/mcp.d.ts.map +1 -0
- package/dist/esm/server/mcp.js +913 -0
- package/dist/esm/server/mcp.js.map +1 -0
- package/dist/esm/server/stdio.d.ts +28 -0
- package/dist/esm/server/stdio.d.ts.map +1 -0
- package/dist/esm/server/stdio.js +75 -0
- package/dist/esm/server/stdio.js.map +1 -0
- package/dist/esm/server/zod-compat.d.ts +84 -0
- package/dist/esm/server/zod-compat.d.ts.map +1 -0
- package/dist/esm/server/zod-compat.js +209 -0
- package/dist/esm/server/zod-compat.js.map +1 -0
- package/dist/esm/server/zod-json-schema-compat.d.ts +12 -0
- package/dist/esm/server/zod-json-schema-compat.d.ts.map +1 -0
- package/dist/esm/server/zod-json-schema-compat.js +51 -0
- package/dist/esm/server/zod-json-schema-compat.js.map +1 -0
- package/dist/esm/shared/auth-info.d.ts +32 -0
- package/dist/esm/shared/auth-info.d.ts.map +1 -0
- package/dist/esm/shared/auth-info.js +2 -0
- package/dist/esm/shared/auth-info.js.map +1 -0
- package/dist/esm/shared/metadataUtils.d.ts +16 -0
- package/dist/esm/shared/metadataUtils.d.ts.map +1 -0
- package/dist/esm/shared/metadataUtils.js +22 -0
- package/dist/esm/shared/metadataUtils.js.map +1 -0
- package/dist/esm/shared/protocol.d.ts +443 -0
- package/dist/esm/shared/protocol.d.ts.map +1 -0
- package/dist/esm/shared/protocol.js +1099 -0
- package/dist/esm/shared/protocol.js.map +1 -0
- package/dist/esm/shared/responseMessage.d.ts +45 -0
- package/dist/esm/shared/responseMessage.d.ts.map +1 -0
- package/dist/esm/shared/responseMessage.js +19 -0
- package/dist/esm/shared/responseMessage.js.map +1 -0
- package/dist/esm/shared/stdio.d.ts +13 -0
- package/dist/esm/shared/stdio.d.ts.map +1 -0
- package/dist/esm/shared/stdio.js +31 -0
- package/dist/esm/shared/stdio.js.map +1 -0
- package/dist/esm/shared/toolNameValidation.d.ts +31 -0
- package/dist/esm/shared/toolNameValidation.d.ts.map +1 -0
- package/dist/esm/shared/toolNameValidation.js +92 -0
- package/dist/esm/shared/toolNameValidation.js.map +1 -0
- package/dist/esm/shared/transport.d.ts +89 -0
- package/dist/esm/shared/transport.d.ts.map +1 -0
- package/dist/esm/shared/transport.js +39 -0
- package/dist/esm/shared/transport.js.map +1 -0
- package/dist/esm/shared/uriTemplate.d.ts +25 -0
- package/dist/esm/shared/uriTemplate.d.ts.map +1 -0
- package/dist/esm/shared/uriTemplate.js +239 -0
- package/dist/esm/shared/uriTemplate.js.map +1 -0
- package/dist/esm/spec.types.d.ts +2299 -0
- package/dist/esm/spec.types.d.ts.map +1 -0
- package/dist/esm/spec.types.js +24 -0
- package/dist/esm/spec.types.js.map +1 -0
- package/dist/esm/types.d.ts +8137 -0
- package/dist/esm/types.d.ts.map +1 -0
- package/dist/esm/types.js +2052 -0
- package/dist/esm/types.js.map +1 -0
- package/dist/esm/validation/ajv-provider.d.ts +53 -0
- package/dist/esm/validation/ajv-provider.d.ts.map +1 -0
- package/dist/esm/validation/ajv-provider.js +87 -0
- package/dist/esm/validation/ajv-provider.js.map +1 -0
- package/dist/esm/validation/cfworker-provider.d.ts +51 -0
- package/dist/esm/validation/cfworker-provider.d.ts.map +1 -0
- package/dist/esm/validation/cfworker-provider.js +65 -0
- package/dist/esm/validation/cfworker-provider.js.map +1 -0
- package/dist/esm/validation/index.d.ts +29 -0
- package/dist/esm/validation/index.d.ts.map +1 -0
- package/dist/esm/validation/index.js +29 -0
- package/dist/esm/validation/index.js.map +1 -0
- package/dist/esm/validation/types.d.ts +65 -0
- package/dist/esm/validation/types.d.ts.map +1 -0
- package/dist/esm/validation/types.js +2 -0
- package/dist/esm/validation/types.js.map +1 -0
- package/package.json +124 -0
|
@@ -0,0 +1,629 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.Client = void 0;
|
|
4
|
+
exports.getSupportedElicitationModes = getSupportedElicitationModes;
|
|
5
|
+
const protocol_js_1 = require("../shared/protocol.js");
|
|
6
|
+
const types_js_1 = require("../types.js");
|
|
7
|
+
const ajv_provider_js_1 = require("../validation/ajv-provider.js");
|
|
8
|
+
const zod_compat_js_1 = require("../server/zod-compat.js");
|
|
9
|
+
const client_js_1 = require("../experimental/tasks/client.js");
|
|
10
|
+
const helpers_js_1 = require("../experimental/tasks/helpers.js");
|
|
11
|
+
/**
|
|
12
|
+
* Elicitation default application helper. Applies defaults to the data based on the schema.
|
|
13
|
+
*
|
|
14
|
+
* @param schema - The schema to apply defaults to.
|
|
15
|
+
* @param data - The data to apply defaults to.
|
|
16
|
+
*/
|
|
17
|
+
function applyElicitationDefaults(schema, data) {
|
|
18
|
+
if (!schema || data === null || typeof data !== 'object')
|
|
19
|
+
return;
|
|
20
|
+
// Handle object properties
|
|
21
|
+
if (schema.type === 'object' && schema.properties && typeof schema.properties === 'object') {
|
|
22
|
+
const obj = data;
|
|
23
|
+
const props = schema.properties;
|
|
24
|
+
for (const key of Object.keys(props)) {
|
|
25
|
+
const propSchema = props[key];
|
|
26
|
+
// If missing or explicitly undefined, apply default if present
|
|
27
|
+
if (obj[key] === undefined && Object.prototype.hasOwnProperty.call(propSchema, 'default')) {
|
|
28
|
+
obj[key] = propSchema.default;
|
|
29
|
+
}
|
|
30
|
+
// Recurse into existing nested objects/arrays
|
|
31
|
+
if (obj[key] !== undefined) {
|
|
32
|
+
applyElicitationDefaults(propSchema, obj[key]);
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
if (Array.isArray(schema.anyOf)) {
|
|
37
|
+
for (const sub of schema.anyOf) {
|
|
38
|
+
// Skip boolean schemas (true/false are valid JSON Schemas but have no defaults)
|
|
39
|
+
if (typeof sub !== 'boolean') {
|
|
40
|
+
applyElicitationDefaults(sub, data);
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
// Combine schemas
|
|
45
|
+
if (Array.isArray(schema.oneOf)) {
|
|
46
|
+
for (const sub of schema.oneOf) {
|
|
47
|
+
// Skip boolean schemas (true/false are valid JSON Schemas but have no defaults)
|
|
48
|
+
if (typeof sub !== 'boolean') {
|
|
49
|
+
applyElicitationDefaults(sub, data);
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Determines which elicitation modes are supported based on declared client capabilities.
|
|
56
|
+
*
|
|
57
|
+
* According to the spec:
|
|
58
|
+
* - An empty elicitation capability object defaults to form mode support (backwards compatibility)
|
|
59
|
+
* - URL mode is only supported if explicitly declared
|
|
60
|
+
*
|
|
61
|
+
* @param capabilities - The client's elicitation capabilities
|
|
62
|
+
* @returns An object indicating which modes are supported
|
|
63
|
+
*/
|
|
64
|
+
function getSupportedElicitationModes(capabilities) {
|
|
65
|
+
if (!capabilities) {
|
|
66
|
+
return { supportsFormMode: false, supportsUrlMode: false };
|
|
67
|
+
}
|
|
68
|
+
const hasFormCapability = capabilities.form !== undefined;
|
|
69
|
+
const hasUrlCapability = capabilities.url !== undefined;
|
|
70
|
+
// If neither form nor url are explicitly declared, form mode is supported (backwards compatibility)
|
|
71
|
+
const supportsFormMode = hasFormCapability || (!hasFormCapability && !hasUrlCapability);
|
|
72
|
+
const supportsUrlMode = hasUrlCapability;
|
|
73
|
+
return { supportsFormMode, supportsUrlMode };
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* An MCP client on top of a pluggable transport.
|
|
77
|
+
*
|
|
78
|
+
* The client will automatically begin the initialization flow with the server when connect() is called.
|
|
79
|
+
*
|
|
80
|
+
* To use with custom types, extend the base Request/Notification/Result types and pass them as type parameters:
|
|
81
|
+
*
|
|
82
|
+
* ```typescript
|
|
83
|
+
* // Custom schemas
|
|
84
|
+
* const CustomRequestSchema = RequestSchema.extend({...})
|
|
85
|
+
* const CustomNotificationSchema = NotificationSchema.extend({...})
|
|
86
|
+
* const CustomResultSchema = ResultSchema.extend({...})
|
|
87
|
+
*
|
|
88
|
+
* // Type aliases
|
|
89
|
+
* type CustomRequest = z.infer<typeof CustomRequestSchema>
|
|
90
|
+
* type CustomNotification = z.infer<typeof CustomNotificationSchema>
|
|
91
|
+
* type CustomResult = z.infer<typeof CustomResultSchema>
|
|
92
|
+
*
|
|
93
|
+
* // Create typed client
|
|
94
|
+
* const client = new Client<CustomRequest, CustomNotification, CustomResult>({
|
|
95
|
+
* name: "CustomClient",
|
|
96
|
+
* version: "1.0.0"
|
|
97
|
+
* })
|
|
98
|
+
* ```
|
|
99
|
+
*/
|
|
100
|
+
class Client extends protocol_js_1.Protocol {
|
|
101
|
+
/**
|
|
102
|
+
* Initializes this client with the given name and version information.
|
|
103
|
+
*/
|
|
104
|
+
constructor(_clientInfo, options) {
|
|
105
|
+
super(options);
|
|
106
|
+
this._clientInfo = _clientInfo;
|
|
107
|
+
this._cachedToolOutputValidators = new Map();
|
|
108
|
+
this._cachedKnownTaskTools = new Set();
|
|
109
|
+
this._cachedRequiredTaskTools = new Set();
|
|
110
|
+
this._listChangedDebounceTimers = new Map();
|
|
111
|
+
this._capabilities = options?.capabilities ?? {};
|
|
112
|
+
this._jsonSchemaValidator = options?.jsonSchemaValidator ?? new ajv_provider_js_1.AjvJsonSchemaValidator();
|
|
113
|
+
// Store list changed config for setup after connection (when we know server capabilities)
|
|
114
|
+
if (options?.listChanged) {
|
|
115
|
+
this._pendingListChangedConfig = options.listChanged;
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
/**
|
|
119
|
+
* Set up handlers for list changed notifications based on config and server capabilities.
|
|
120
|
+
* This should only be called after initialization when server capabilities are known.
|
|
121
|
+
* Handlers are silently skipped if the server doesn't advertise the corresponding listChanged capability.
|
|
122
|
+
* @internal
|
|
123
|
+
*/
|
|
124
|
+
_setupListChangedHandlers(config) {
|
|
125
|
+
if (config.tools && this._serverCapabilities?.tools?.listChanged) {
|
|
126
|
+
this._setupListChangedHandler('tools', types_js_1.ToolListChangedNotificationSchema, config.tools, async () => {
|
|
127
|
+
const result = await this.listTools();
|
|
128
|
+
return result.tools;
|
|
129
|
+
});
|
|
130
|
+
}
|
|
131
|
+
if (config.prompts && this._serverCapabilities?.prompts?.listChanged) {
|
|
132
|
+
this._setupListChangedHandler('prompts', types_js_1.PromptListChangedNotificationSchema, config.prompts, async () => {
|
|
133
|
+
const result = await this.listPrompts();
|
|
134
|
+
return result.prompts;
|
|
135
|
+
});
|
|
136
|
+
}
|
|
137
|
+
if (config.resources && this._serverCapabilities?.resources?.listChanged) {
|
|
138
|
+
this._setupListChangedHandler('resources', types_js_1.ResourceListChangedNotificationSchema, config.resources, async () => {
|
|
139
|
+
const result = await this.listResources();
|
|
140
|
+
return result.resources;
|
|
141
|
+
});
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
/**
|
|
145
|
+
* Access experimental features.
|
|
146
|
+
*
|
|
147
|
+
* WARNING: These APIs are experimental and may change without notice.
|
|
148
|
+
*
|
|
149
|
+
* @experimental
|
|
150
|
+
*/
|
|
151
|
+
get experimental() {
|
|
152
|
+
if (!this._experimental) {
|
|
153
|
+
this._experimental = {
|
|
154
|
+
tasks: new client_js_1.ExperimentalClientTasks(this)
|
|
155
|
+
};
|
|
156
|
+
}
|
|
157
|
+
return this._experimental;
|
|
158
|
+
}
|
|
159
|
+
/**
|
|
160
|
+
* Registers new capabilities. This can only be called before connecting to a transport.
|
|
161
|
+
*
|
|
162
|
+
* The new capabilities will be merged with any existing capabilities previously given (e.g., at initialization).
|
|
163
|
+
*/
|
|
164
|
+
registerCapabilities(capabilities) {
|
|
165
|
+
if (this.transport) {
|
|
166
|
+
throw new Error('Cannot register capabilities after connecting to transport');
|
|
167
|
+
}
|
|
168
|
+
this._capabilities = (0, protocol_js_1.mergeCapabilities)(this._capabilities, capabilities);
|
|
169
|
+
}
|
|
170
|
+
/**
|
|
171
|
+
* Override request handler registration to enforce client-side validation for elicitation.
|
|
172
|
+
*/
|
|
173
|
+
setRequestHandler(requestSchema, handler) {
|
|
174
|
+
const shape = (0, zod_compat_js_1.getObjectShape)(requestSchema);
|
|
175
|
+
const methodSchema = shape?.method;
|
|
176
|
+
if (!methodSchema) {
|
|
177
|
+
throw new Error('Schema is missing a method literal');
|
|
178
|
+
}
|
|
179
|
+
// Extract literal value using type-safe property access
|
|
180
|
+
let methodValue;
|
|
181
|
+
if ((0, zod_compat_js_1.isZ4Schema)(methodSchema)) {
|
|
182
|
+
const v4Schema = methodSchema;
|
|
183
|
+
const v4Def = v4Schema._zod?.def;
|
|
184
|
+
methodValue = v4Def?.value ?? v4Schema.value;
|
|
185
|
+
}
|
|
186
|
+
else {
|
|
187
|
+
const v3Schema = methodSchema;
|
|
188
|
+
const legacyDef = v3Schema._def;
|
|
189
|
+
methodValue = legacyDef?.value ?? v3Schema.value;
|
|
190
|
+
}
|
|
191
|
+
if (typeof methodValue !== 'string') {
|
|
192
|
+
throw new Error('Schema method literal must be a string');
|
|
193
|
+
}
|
|
194
|
+
const method = methodValue;
|
|
195
|
+
if (method === 'elicitation/create') {
|
|
196
|
+
const wrappedHandler = async (request, extra) => {
|
|
197
|
+
const validatedRequest = (0, zod_compat_js_1.safeParse)(types_js_1.ElicitRequestSchema, request);
|
|
198
|
+
if (!validatedRequest.success) {
|
|
199
|
+
// Type guard: if success is false, error is guaranteed to exist
|
|
200
|
+
const errorMessage = validatedRequest.error instanceof Error ? validatedRequest.error.message : String(validatedRequest.error);
|
|
201
|
+
throw new types_js_1.McpError(types_js_1.ErrorCode.InvalidParams, `Invalid elicitation request: ${errorMessage}`);
|
|
202
|
+
}
|
|
203
|
+
const { params } = validatedRequest.data;
|
|
204
|
+
params.mode = params.mode ?? 'form';
|
|
205
|
+
const { supportsFormMode, supportsUrlMode } = getSupportedElicitationModes(this._capabilities.elicitation);
|
|
206
|
+
if (params.mode === 'form' && !supportsFormMode) {
|
|
207
|
+
throw new types_js_1.McpError(types_js_1.ErrorCode.InvalidParams, 'Client does not support form-mode elicitation requests');
|
|
208
|
+
}
|
|
209
|
+
if (params.mode === 'url' && !supportsUrlMode) {
|
|
210
|
+
throw new types_js_1.McpError(types_js_1.ErrorCode.InvalidParams, 'Client does not support URL-mode elicitation requests');
|
|
211
|
+
}
|
|
212
|
+
const result = await Promise.resolve(handler(request, extra));
|
|
213
|
+
// When task creation is requested, validate and return CreateTaskResult
|
|
214
|
+
if (params.task) {
|
|
215
|
+
const taskValidationResult = (0, zod_compat_js_1.safeParse)(types_js_1.CreateTaskResultSchema, result);
|
|
216
|
+
if (!taskValidationResult.success) {
|
|
217
|
+
const errorMessage = taskValidationResult.error instanceof Error
|
|
218
|
+
? taskValidationResult.error.message
|
|
219
|
+
: String(taskValidationResult.error);
|
|
220
|
+
throw new types_js_1.McpError(types_js_1.ErrorCode.InvalidParams, `Invalid task creation result: ${errorMessage}`);
|
|
221
|
+
}
|
|
222
|
+
return taskValidationResult.data;
|
|
223
|
+
}
|
|
224
|
+
// For non-task requests, validate against ElicitResultSchema
|
|
225
|
+
const validationResult = (0, zod_compat_js_1.safeParse)(types_js_1.ElicitResultSchema, result);
|
|
226
|
+
if (!validationResult.success) {
|
|
227
|
+
// Type guard: if success is false, error is guaranteed to exist
|
|
228
|
+
const errorMessage = validationResult.error instanceof Error ? validationResult.error.message : String(validationResult.error);
|
|
229
|
+
throw new types_js_1.McpError(types_js_1.ErrorCode.InvalidParams, `Invalid elicitation result: ${errorMessage}`);
|
|
230
|
+
}
|
|
231
|
+
const validatedResult = validationResult.data;
|
|
232
|
+
const requestedSchema = params.mode === 'form' ? params.requestedSchema : undefined;
|
|
233
|
+
if (params.mode === 'form' && validatedResult.action === 'accept' && validatedResult.content && requestedSchema) {
|
|
234
|
+
if (this._capabilities.elicitation?.form?.applyDefaults) {
|
|
235
|
+
try {
|
|
236
|
+
applyElicitationDefaults(requestedSchema, validatedResult.content);
|
|
237
|
+
}
|
|
238
|
+
catch {
|
|
239
|
+
// gracefully ignore errors in default application
|
|
240
|
+
}
|
|
241
|
+
}
|
|
242
|
+
}
|
|
243
|
+
return validatedResult;
|
|
244
|
+
};
|
|
245
|
+
// Install the wrapped handler
|
|
246
|
+
return super.setRequestHandler(requestSchema, wrappedHandler);
|
|
247
|
+
}
|
|
248
|
+
if (method === 'sampling/createMessage') {
|
|
249
|
+
const wrappedHandler = async (request, extra) => {
|
|
250
|
+
const validatedRequest = (0, zod_compat_js_1.safeParse)(types_js_1.CreateMessageRequestSchema, request);
|
|
251
|
+
if (!validatedRequest.success) {
|
|
252
|
+
const errorMessage = validatedRequest.error instanceof Error ? validatedRequest.error.message : String(validatedRequest.error);
|
|
253
|
+
throw new types_js_1.McpError(types_js_1.ErrorCode.InvalidParams, `Invalid sampling request: ${errorMessage}`);
|
|
254
|
+
}
|
|
255
|
+
const { params } = validatedRequest.data;
|
|
256
|
+
const result = await Promise.resolve(handler(request, extra));
|
|
257
|
+
// When task creation is requested, validate and return CreateTaskResult
|
|
258
|
+
if (params.task) {
|
|
259
|
+
const taskValidationResult = (0, zod_compat_js_1.safeParse)(types_js_1.CreateTaskResultSchema, result);
|
|
260
|
+
if (!taskValidationResult.success) {
|
|
261
|
+
const errorMessage = taskValidationResult.error instanceof Error
|
|
262
|
+
? taskValidationResult.error.message
|
|
263
|
+
: String(taskValidationResult.error);
|
|
264
|
+
throw new types_js_1.McpError(types_js_1.ErrorCode.InvalidParams, `Invalid task creation result: ${errorMessage}`);
|
|
265
|
+
}
|
|
266
|
+
return taskValidationResult.data;
|
|
267
|
+
}
|
|
268
|
+
// For non-task requests, validate against appropriate schema based on tools presence
|
|
269
|
+
const hasTools = params.tools || params.toolChoice;
|
|
270
|
+
const resultSchema = hasTools ? types_js_1.CreateMessageResultWithToolsSchema : types_js_1.CreateMessageResultSchema;
|
|
271
|
+
const validationResult = (0, zod_compat_js_1.safeParse)(resultSchema, result);
|
|
272
|
+
if (!validationResult.success) {
|
|
273
|
+
const errorMessage = validationResult.error instanceof Error ? validationResult.error.message : String(validationResult.error);
|
|
274
|
+
throw new types_js_1.McpError(types_js_1.ErrorCode.InvalidParams, `Invalid sampling result: ${errorMessage}`);
|
|
275
|
+
}
|
|
276
|
+
return validationResult.data;
|
|
277
|
+
};
|
|
278
|
+
// Install the wrapped handler
|
|
279
|
+
return super.setRequestHandler(requestSchema, wrappedHandler);
|
|
280
|
+
}
|
|
281
|
+
// Other handlers use default behavior
|
|
282
|
+
return super.setRequestHandler(requestSchema, handler);
|
|
283
|
+
}
|
|
284
|
+
assertCapability(capability, method) {
|
|
285
|
+
if (!this._serverCapabilities?.[capability]) {
|
|
286
|
+
throw new Error(`Server does not support ${capability} (required for ${method})`);
|
|
287
|
+
}
|
|
288
|
+
}
|
|
289
|
+
async connect(transport, options) {
|
|
290
|
+
await super.connect(transport);
|
|
291
|
+
// When transport sessionId is already set this means we are trying to reconnect.
|
|
292
|
+
// In this case we don't need to initialize again.
|
|
293
|
+
if (transport.sessionId !== undefined) {
|
|
294
|
+
return;
|
|
295
|
+
}
|
|
296
|
+
try {
|
|
297
|
+
const result = await this.request({
|
|
298
|
+
method: 'initialize',
|
|
299
|
+
params: {
|
|
300
|
+
protocolVersion: types_js_1.LATEST_PROTOCOL_VERSION,
|
|
301
|
+
capabilities: this._capabilities,
|
|
302
|
+
clientInfo: this._clientInfo
|
|
303
|
+
}
|
|
304
|
+
}, types_js_1.InitializeResultSchema, options);
|
|
305
|
+
if (result === undefined) {
|
|
306
|
+
throw new Error(`Server sent invalid initialize result: ${result}`);
|
|
307
|
+
}
|
|
308
|
+
if (!types_js_1.SUPPORTED_PROTOCOL_VERSIONS.includes(result.protocolVersion)) {
|
|
309
|
+
throw new Error(`Server's protocol version is not supported: ${result.protocolVersion}`);
|
|
310
|
+
}
|
|
311
|
+
this._serverCapabilities = result.capabilities;
|
|
312
|
+
this._serverVersion = result.serverInfo;
|
|
313
|
+
// HTTP transports must set the protocol version in each header after initialization.
|
|
314
|
+
if (transport.setProtocolVersion) {
|
|
315
|
+
transport.setProtocolVersion(result.protocolVersion);
|
|
316
|
+
}
|
|
317
|
+
this._instructions = result.instructions;
|
|
318
|
+
await this.notification({
|
|
319
|
+
method: 'notifications/initialized'
|
|
320
|
+
});
|
|
321
|
+
// Set up list changed handlers now that we know server capabilities
|
|
322
|
+
if (this._pendingListChangedConfig) {
|
|
323
|
+
this._setupListChangedHandlers(this._pendingListChangedConfig);
|
|
324
|
+
this._pendingListChangedConfig = undefined;
|
|
325
|
+
}
|
|
326
|
+
}
|
|
327
|
+
catch (error) {
|
|
328
|
+
// Disconnect if initialization fails.
|
|
329
|
+
void this.close();
|
|
330
|
+
throw error;
|
|
331
|
+
}
|
|
332
|
+
}
|
|
333
|
+
/**
|
|
334
|
+
* After initialization has completed, this will be populated with the server's reported capabilities.
|
|
335
|
+
*/
|
|
336
|
+
getServerCapabilities() {
|
|
337
|
+
return this._serverCapabilities;
|
|
338
|
+
}
|
|
339
|
+
/**
|
|
340
|
+
* After initialization has completed, this will be populated with information about the server's name and version.
|
|
341
|
+
*/
|
|
342
|
+
getServerVersion() {
|
|
343
|
+
return this._serverVersion;
|
|
344
|
+
}
|
|
345
|
+
/**
|
|
346
|
+
* After initialization has completed, this may be populated with information about the server's instructions.
|
|
347
|
+
*/
|
|
348
|
+
getInstructions() {
|
|
349
|
+
return this._instructions;
|
|
350
|
+
}
|
|
351
|
+
assertCapabilityForMethod(method) {
|
|
352
|
+
switch (method) {
|
|
353
|
+
case 'logging/setLevel':
|
|
354
|
+
if (!this._serverCapabilities?.logging) {
|
|
355
|
+
throw new Error(`Server does not support logging (required for ${method})`);
|
|
356
|
+
}
|
|
357
|
+
break;
|
|
358
|
+
case 'prompts/get':
|
|
359
|
+
case 'prompts/list':
|
|
360
|
+
if (!this._serverCapabilities?.prompts) {
|
|
361
|
+
throw new Error(`Server does not support prompts (required for ${method})`);
|
|
362
|
+
}
|
|
363
|
+
break;
|
|
364
|
+
case 'resources/list':
|
|
365
|
+
case 'resources/templates/list':
|
|
366
|
+
case 'resources/read':
|
|
367
|
+
case 'resources/subscribe':
|
|
368
|
+
case 'resources/unsubscribe':
|
|
369
|
+
if (!this._serverCapabilities?.resources) {
|
|
370
|
+
throw new Error(`Server does not support resources (required for ${method})`);
|
|
371
|
+
}
|
|
372
|
+
if (method === 'resources/subscribe' && !this._serverCapabilities.resources.subscribe) {
|
|
373
|
+
throw new Error(`Server does not support resource subscriptions (required for ${method})`);
|
|
374
|
+
}
|
|
375
|
+
break;
|
|
376
|
+
case 'tools/call':
|
|
377
|
+
case 'tools/list':
|
|
378
|
+
if (!this._serverCapabilities?.tools) {
|
|
379
|
+
throw new Error(`Server does not support tools (required for ${method})`);
|
|
380
|
+
}
|
|
381
|
+
break;
|
|
382
|
+
case 'completion/complete':
|
|
383
|
+
if (!this._serverCapabilities?.completions) {
|
|
384
|
+
throw new Error(`Server does not support completions (required for ${method})`);
|
|
385
|
+
}
|
|
386
|
+
break;
|
|
387
|
+
case 'initialize':
|
|
388
|
+
// No specific capability required for initialize
|
|
389
|
+
break;
|
|
390
|
+
case 'ping':
|
|
391
|
+
// No specific capability required for ping
|
|
392
|
+
break;
|
|
393
|
+
}
|
|
394
|
+
}
|
|
395
|
+
assertNotificationCapability(method) {
|
|
396
|
+
switch (method) {
|
|
397
|
+
case 'notifications/roots/list_changed':
|
|
398
|
+
if (!this._capabilities.roots?.listChanged) {
|
|
399
|
+
throw new Error(`Client does not support roots list changed notifications (required for ${method})`);
|
|
400
|
+
}
|
|
401
|
+
break;
|
|
402
|
+
case 'notifications/initialized':
|
|
403
|
+
// No specific capability required for initialized
|
|
404
|
+
break;
|
|
405
|
+
case 'notifications/cancelled':
|
|
406
|
+
// Cancellation notifications are always allowed
|
|
407
|
+
break;
|
|
408
|
+
case 'notifications/progress':
|
|
409
|
+
// Progress notifications are always allowed
|
|
410
|
+
break;
|
|
411
|
+
}
|
|
412
|
+
}
|
|
413
|
+
assertRequestHandlerCapability(method) {
|
|
414
|
+
// Task handlers are registered in Protocol constructor before _capabilities is initialized
|
|
415
|
+
// Skip capability check for task methods during initialization
|
|
416
|
+
if (!this._capabilities) {
|
|
417
|
+
return;
|
|
418
|
+
}
|
|
419
|
+
switch (method) {
|
|
420
|
+
case 'sampling/createMessage':
|
|
421
|
+
if (!this._capabilities.sampling) {
|
|
422
|
+
throw new Error(`Client does not support sampling capability (required for ${method})`);
|
|
423
|
+
}
|
|
424
|
+
break;
|
|
425
|
+
case 'elicitation/create':
|
|
426
|
+
if (!this._capabilities.elicitation) {
|
|
427
|
+
throw new Error(`Client does not support elicitation capability (required for ${method})`);
|
|
428
|
+
}
|
|
429
|
+
break;
|
|
430
|
+
case 'roots/list':
|
|
431
|
+
if (!this._capabilities.roots) {
|
|
432
|
+
throw new Error(`Client does not support roots capability (required for ${method})`);
|
|
433
|
+
}
|
|
434
|
+
break;
|
|
435
|
+
case 'tasks/get':
|
|
436
|
+
case 'tasks/list':
|
|
437
|
+
case 'tasks/result':
|
|
438
|
+
case 'tasks/cancel':
|
|
439
|
+
if (!this._capabilities.tasks) {
|
|
440
|
+
throw new Error(`Client does not support tasks capability (required for ${method})`);
|
|
441
|
+
}
|
|
442
|
+
break;
|
|
443
|
+
case 'ping':
|
|
444
|
+
// No specific capability required for ping
|
|
445
|
+
break;
|
|
446
|
+
}
|
|
447
|
+
}
|
|
448
|
+
assertTaskCapability(method) {
|
|
449
|
+
(0, helpers_js_1.assertToolsCallTaskCapability)(this._serverCapabilities?.tasks?.requests, method, 'Server');
|
|
450
|
+
}
|
|
451
|
+
assertTaskHandlerCapability(method) {
|
|
452
|
+
// Task handlers are registered in Protocol constructor before _capabilities is initialized
|
|
453
|
+
// Skip capability check for task methods during initialization
|
|
454
|
+
if (!this._capabilities) {
|
|
455
|
+
return;
|
|
456
|
+
}
|
|
457
|
+
(0, helpers_js_1.assertClientRequestTaskCapability)(this._capabilities.tasks?.requests, method, 'Client');
|
|
458
|
+
}
|
|
459
|
+
async ping(options) {
|
|
460
|
+
return this.request({ method: 'ping' }, types_js_1.EmptyResultSchema, options);
|
|
461
|
+
}
|
|
462
|
+
async complete(params, options) {
|
|
463
|
+
return this.request({ method: 'completion/complete', params }, types_js_1.CompleteResultSchema, options);
|
|
464
|
+
}
|
|
465
|
+
async setLoggingLevel(level, options) {
|
|
466
|
+
return this.request({ method: 'logging/setLevel', params: { level } }, types_js_1.EmptyResultSchema, options);
|
|
467
|
+
}
|
|
468
|
+
async getPrompt(params, options) {
|
|
469
|
+
return this.request({ method: 'prompts/get', params }, types_js_1.GetPromptResultSchema, options);
|
|
470
|
+
}
|
|
471
|
+
async listPrompts(params, options) {
|
|
472
|
+
return this.request({ method: 'prompts/list', params }, types_js_1.ListPromptsResultSchema, options);
|
|
473
|
+
}
|
|
474
|
+
async listResources(params, options) {
|
|
475
|
+
return this.request({ method: 'resources/list', params }, types_js_1.ListResourcesResultSchema, options);
|
|
476
|
+
}
|
|
477
|
+
async listResourceTemplates(params, options) {
|
|
478
|
+
return this.request({ method: 'resources/templates/list', params }, types_js_1.ListResourceTemplatesResultSchema, options);
|
|
479
|
+
}
|
|
480
|
+
async readResource(params, options) {
|
|
481
|
+
return this.request({ method: 'resources/read', params }, types_js_1.ReadResourceResultSchema, options);
|
|
482
|
+
}
|
|
483
|
+
async subscribeResource(params, options) {
|
|
484
|
+
return this.request({ method: 'resources/subscribe', params }, types_js_1.EmptyResultSchema, options);
|
|
485
|
+
}
|
|
486
|
+
async unsubscribeResource(params, options) {
|
|
487
|
+
return this.request({ method: 'resources/unsubscribe', params }, types_js_1.EmptyResultSchema, options);
|
|
488
|
+
}
|
|
489
|
+
/**
|
|
490
|
+
* Calls a tool and waits for the result. Automatically validates structured output if the tool has an outputSchema.
|
|
491
|
+
*
|
|
492
|
+
* For task-based execution with streaming behavior, use client.experimental.tasks.callToolStream() instead.
|
|
493
|
+
*/
|
|
494
|
+
async callTool(params, resultSchema = types_js_1.CallToolResultSchema, options) {
|
|
495
|
+
// Guard: required-task tools need experimental API
|
|
496
|
+
if (this.isToolTaskRequired(params.name)) {
|
|
497
|
+
throw new types_js_1.McpError(types_js_1.ErrorCode.InvalidRequest, `Tool "${params.name}" requires task-based execution. Use client.experimental.tasks.callToolStream() instead.`);
|
|
498
|
+
}
|
|
499
|
+
const result = await this.request({ method: 'tools/call', params }, resultSchema, options);
|
|
500
|
+
// Check if the tool has an outputSchema
|
|
501
|
+
const validator = this.getToolOutputValidator(params.name);
|
|
502
|
+
if (validator) {
|
|
503
|
+
// If tool has outputSchema, it MUST return structuredContent (unless it's an error)
|
|
504
|
+
if (!result.structuredContent && !result.isError) {
|
|
505
|
+
throw new types_js_1.McpError(types_js_1.ErrorCode.InvalidRequest, `Tool ${params.name} has an output schema but did not return structured content`);
|
|
506
|
+
}
|
|
507
|
+
// Only validate structured content if present (not when there's an error)
|
|
508
|
+
if (result.structuredContent) {
|
|
509
|
+
try {
|
|
510
|
+
// Validate the structured content against the schema
|
|
511
|
+
const validationResult = validator(result.structuredContent);
|
|
512
|
+
if (!validationResult.valid) {
|
|
513
|
+
throw new types_js_1.McpError(types_js_1.ErrorCode.InvalidParams, `Structured content does not match the tool's output schema: ${validationResult.errorMessage}`);
|
|
514
|
+
}
|
|
515
|
+
}
|
|
516
|
+
catch (error) {
|
|
517
|
+
if (error instanceof types_js_1.McpError) {
|
|
518
|
+
throw error;
|
|
519
|
+
}
|
|
520
|
+
throw new types_js_1.McpError(types_js_1.ErrorCode.InvalidParams, `Failed to validate structured content: ${error instanceof Error ? error.message : String(error)}`);
|
|
521
|
+
}
|
|
522
|
+
}
|
|
523
|
+
}
|
|
524
|
+
return result;
|
|
525
|
+
}
|
|
526
|
+
isToolTask(toolName) {
|
|
527
|
+
if (!this._serverCapabilities?.tasks?.requests?.tools?.call) {
|
|
528
|
+
return false;
|
|
529
|
+
}
|
|
530
|
+
return this._cachedKnownTaskTools.has(toolName);
|
|
531
|
+
}
|
|
532
|
+
/**
|
|
533
|
+
* Check if a tool requires task-based execution.
|
|
534
|
+
* Unlike isToolTask which includes 'optional' tools, this only checks for 'required'.
|
|
535
|
+
*/
|
|
536
|
+
isToolTaskRequired(toolName) {
|
|
537
|
+
return this._cachedRequiredTaskTools.has(toolName);
|
|
538
|
+
}
|
|
539
|
+
/**
|
|
540
|
+
* Cache validators for tool output schemas.
|
|
541
|
+
* Called after listTools() to pre-compile validators for better performance.
|
|
542
|
+
*/
|
|
543
|
+
cacheToolMetadata(tools) {
|
|
544
|
+
this._cachedToolOutputValidators.clear();
|
|
545
|
+
this._cachedKnownTaskTools.clear();
|
|
546
|
+
this._cachedRequiredTaskTools.clear();
|
|
547
|
+
for (const tool of tools) {
|
|
548
|
+
// If the tool has an outputSchema, create and cache the validator
|
|
549
|
+
if (tool.outputSchema) {
|
|
550
|
+
const toolValidator = this._jsonSchemaValidator.getValidator(tool.outputSchema);
|
|
551
|
+
this._cachedToolOutputValidators.set(tool.name, toolValidator);
|
|
552
|
+
}
|
|
553
|
+
// If the tool supports task-based execution, cache that information
|
|
554
|
+
const taskSupport = tool.execution?.taskSupport;
|
|
555
|
+
if (taskSupport === 'required' || taskSupport === 'optional') {
|
|
556
|
+
this._cachedKnownTaskTools.add(tool.name);
|
|
557
|
+
}
|
|
558
|
+
if (taskSupport === 'required') {
|
|
559
|
+
this._cachedRequiredTaskTools.add(tool.name);
|
|
560
|
+
}
|
|
561
|
+
}
|
|
562
|
+
}
|
|
563
|
+
/**
|
|
564
|
+
* Get cached validator for a tool
|
|
565
|
+
*/
|
|
566
|
+
getToolOutputValidator(toolName) {
|
|
567
|
+
return this._cachedToolOutputValidators.get(toolName);
|
|
568
|
+
}
|
|
569
|
+
async listTools(params, options) {
|
|
570
|
+
const result = await this.request({ method: 'tools/list', params }, types_js_1.ListToolsResultSchema, options);
|
|
571
|
+
// Cache the tools and their output schemas for future validation
|
|
572
|
+
this.cacheToolMetadata(result.tools);
|
|
573
|
+
return result;
|
|
574
|
+
}
|
|
575
|
+
/**
|
|
576
|
+
* Set up a single list changed handler.
|
|
577
|
+
* @internal
|
|
578
|
+
*/
|
|
579
|
+
_setupListChangedHandler(listType, notificationSchema, options, fetcher) {
|
|
580
|
+
// Validate options using Zod schema (validates autoRefresh and debounceMs)
|
|
581
|
+
const parseResult = types_js_1.ListChangedOptionsBaseSchema.safeParse(options);
|
|
582
|
+
if (!parseResult.success) {
|
|
583
|
+
throw new Error(`Invalid ${listType} listChanged options: ${parseResult.error.message}`);
|
|
584
|
+
}
|
|
585
|
+
// Validate callback
|
|
586
|
+
if (typeof options.onChanged !== 'function') {
|
|
587
|
+
throw new Error(`Invalid ${listType} listChanged options: onChanged must be a function`);
|
|
588
|
+
}
|
|
589
|
+
const { autoRefresh, debounceMs } = parseResult.data;
|
|
590
|
+
const { onChanged } = options;
|
|
591
|
+
const refresh = async () => {
|
|
592
|
+
if (!autoRefresh) {
|
|
593
|
+
onChanged(null, null);
|
|
594
|
+
return;
|
|
595
|
+
}
|
|
596
|
+
try {
|
|
597
|
+
const items = await fetcher();
|
|
598
|
+
onChanged(null, items);
|
|
599
|
+
}
|
|
600
|
+
catch (e) {
|
|
601
|
+
const error = e instanceof Error ? e : new Error(String(e));
|
|
602
|
+
onChanged(error, null);
|
|
603
|
+
}
|
|
604
|
+
};
|
|
605
|
+
const handler = () => {
|
|
606
|
+
if (debounceMs) {
|
|
607
|
+
// Clear any pending debounce timer for this list type
|
|
608
|
+
const existingTimer = this._listChangedDebounceTimers.get(listType);
|
|
609
|
+
if (existingTimer) {
|
|
610
|
+
clearTimeout(existingTimer);
|
|
611
|
+
}
|
|
612
|
+
// Set up debounced refresh
|
|
613
|
+
const timer = setTimeout(refresh, debounceMs);
|
|
614
|
+
this._listChangedDebounceTimers.set(listType, timer);
|
|
615
|
+
}
|
|
616
|
+
else {
|
|
617
|
+
// No debounce, refresh immediately
|
|
618
|
+
refresh();
|
|
619
|
+
}
|
|
620
|
+
};
|
|
621
|
+
// Register notification handler
|
|
622
|
+
this.setNotificationHandler(notificationSchema, handler);
|
|
623
|
+
}
|
|
624
|
+
async sendRootsListChanged() {
|
|
625
|
+
return this.notification({ method: 'notifications/roots/list_changed' });
|
|
626
|
+
}
|
|
627
|
+
}
|
|
628
|
+
exports.Client = Client;
|
|
629
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/client/index.ts"],"names":[],"mappings":"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"}
|