@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,77 @@
|
|
|
1
|
+
import { IOType } from 'node:child_process';
|
|
2
|
+
import { Stream } from 'node:stream';
|
|
3
|
+
import { Transport } from '../shared/transport.js';
|
|
4
|
+
import { JSONRPCMessage } from '../types.js';
|
|
5
|
+
export type StdioServerParameters = {
|
|
6
|
+
/**
|
|
7
|
+
* The executable to run to start the server.
|
|
8
|
+
*/
|
|
9
|
+
command: string;
|
|
10
|
+
/**
|
|
11
|
+
* Command line arguments to pass to the executable.
|
|
12
|
+
*/
|
|
13
|
+
args?: string[];
|
|
14
|
+
/**
|
|
15
|
+
* The environment to use when spawning the process.
|
|
16
|
+
*
|
|
17
|
+
* If not specified, the result of getDefaultEnvironment() will be used.
|
|
18
|
+
*/
|
|
19
|
+
env?: Record<string, string>;
|
|
20
|
+
/**
|
|
21
|
+
* How to handle stderr of the child process. This matches the semantics of Node's `child_process.spawn`.
|
|
22
|
+
*
|
|
23
|
+
* The default is "inherit", meaning messages to stderr will be printed to the parent process's stderr.
|
|
24
|
+
*/
|
|
25
|
+
stderr?: IOType | Stream | number;
|
|
26
|
+
/**
|
|
27
|
+
* The working directory to use when spawning the process.
|
|
28
|
+
*
|
|
29
|
+
* If not specified, the current working directory will be inherited.
|
|
30
|
+
*/
|
|
31
|
+
cwd?: string;
|
|
32
|
+
};
|
|
33
|
+
/**
|
|
34
|
+
* Environment variables to inherit by default, if an environment is not explicitly given.
|
|
35
|
+
*/
|
|
36
|
+
export declare const DEFAULT_INHERITED_ENV_VARS: string[];
|
|
37
|
+
/**
|
|
38
|
+
* Returns a default environment object including only environment variables deemed safe to inherit.
|
|
39
|
+
*/
|
|
40
|
+
export declare function getDefaultEnvironment(): Record<string, string>;
|
|
41
|
+
/**
|
|
42
|
+
* Client transport for stdio: this will connect to a server by spawning a process and communicating with it over stdin/stdout.
|
|
43
|
+
*
|
|
44
|
+
* This transport is only available in Node.js environments.
|
|
45
|
+
*/
|
|
46
|
+
export declare class StdioClientTransport implements Transport {
|
|
47
|
+
private _process?;
|
|
48
|
+
private _readBuffer;
|
|
49
|
+
private _serverParams;
|
|
50
|
+
private _stderrStream;
|
|
51
|
+
onclose?: () => void;
|
|
52
|
+
onerror?: (error: Error) => void;
|
|
53
|
+
onmessage?: (message: JSONRPCMessage) => void;
|
|
54
|
+
constructor(server: StdioServerParameters);
|
|
55
|
+
/**
|
|
56
|
+
* Starts the server process and prepares to communicate with it.
|
|
57
|
+
*/
|
|
58
|
+
start(): Promise<void>;
|
|
59
|
+
/**
|
|
60
|
+
* The stderr stream of the child process, if `StdioServerParameters.stderr` was set to "pipe" or "overlapped".
|
|
61
|
+
*
|
|
62
|
+
* If stderr piping was requested, a PassThrough stream is returned _immediately_, allowing callers to
|
|
63
|
+
* attach listeners before the start method is invoked. This prevents loss of any early
|
|
64
|
+
* error output emitted by the child process.
|
|
65
|
+
*/
|
|
66
|
+
get stderr(): Stream | null;
|
|
67
|
+
/**
|
|
68
|
+
* The child process pid spawned by this transport.
|
|
69
|
+
*
|
|
70
|
+
* This is only available after the transport has been started.
|
|
71
|
+
*/
|
|
72
|
+
get pid(): number | null;
|
|
73
|
+
private processReadBuffer;
|
|
74
|
+
close(): Promise<void>;
|
|
75
|
+
send(message: JSONRPCMessage): Promise<void>;
|
|
76
|
+
}
|
|
77
|
+
//# sourceMappingURL=stdio.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stdio.d.ts","sourceRoot":"","sources":["../../../src/client/stdio.ts"],"names":[],"mappings":"AAAA,OAAO,EAAgB,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAG1D,OAAO,EAAE,MAAM,EAAe,MAAM,aAAa,CAAC;AAElD,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AACnD,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAE7C,MAAM,MAAM,qBAAqB,GAAG;IAChC;;OAEG;IACH,OAAO,EAAE,MAAM,CAAC;IAEhB;;OAEG;IACH,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAEhB;;;;OAIG;IACH,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAE7B;;;;OAIG;IACH,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC;IAElC;;;;OAIG;IACH,GAAG,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,0BAA0B,UAiBuB,CAAC;AAE/D;;GAEG;AACH,wBAAgB,qBAAqB,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAkB9D;AAED;;;;GAIG;AACH,qBAAa,oBAAqB,YAAW,SAAS;IAClD,OAAO,CAAC,QAAQ,CAAC,CAAe;IAChC,OAAO,CAAC,WAAW,CAAgC;IACnD,OAAO,CAAC,aAAa,CAAwB;IAC7C,OAAO,CAAC,aAAa,CAA4B;IAEjD,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;IACjC,SAAS,CAAC,EAAE,CAAC,OAAO,EAAE,cAAc,KAAK,IAAI,CAAC;gBAElC,MAAM,EAAE,qBAAqB;IAOzC;;OAEG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAqD5B;;;;;;OAMG;IACH,IAAI,MAAM,IAAI,MAAM,GAAG,IAAI,CAM1B;IAED;;;;OAIG;IACH,IAAI,GAAG,IAAI,MAAM,GAAG,IAAI,CAEvB;IAED,OAAO,CAAC,iBAAiB;IAenB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAyC5B,IAAI,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC;CAc/C"}
|
|
@@ -0,0 +1,191 @@
|
|
|
1
|
+
import spawn from 'cross-spawn';
|
|
2
|
+
import process from 'node:process';
|
|
3
|
+
import { PassThrough } from 'node:stream';
|
|
4
|
+
import { ReadBuffer, serializeMessage } from '../shared/stdio.js';
|
|
5
|
+
/**
|
|
6
|
+
* Environment variables to inherit by default, if an environment is not explicitly given.
|
|
7
|
+
*/
|
|
8
|
+
export const DEFAULT_INHERITED_ENV_VARS = process.platform === 'win32'
|
|
9
|
+
? [
|
|
10
|
+
'APPDATA',
|
|
11
|
+
'HOMEDRIVE',
|
|
12
|
+
'HOMEPATH',
|
|
13
|
+
'LOCALAPPDATA',
|
|
14
|
+
'PATH',
|
|
15
|
+
'PROCESSOR_ARCHITECTURE',
|
|
16
|
+
'SYSTEMDRIVE',
|
|
17
|
+
'SYSTEMROOT',
|
|
18
|
+
'TEMP',
|
|
19
|
+
'USERNAME',
|
|
20
|
+
'USERPROFILE',
|
|
21
|
+
'PROGRAMFILES'
|
|
22
|
+
]
|
|
23
|
+
: /* list inspired by the default env inheritance of sudo */
|
|
24
|
+
['HOME', 'LOGNAME', 'PATH', 'SHELL', 'TERM', 'USER'];
|
|
25
|
+
/**
|
|
26
|
+
* Returns a default environment object including only environment variables deemed safe to inherit.
|
|
27
|
+
*/
|
|
28
|
+
export function getDefaultEnvironment() {
|
|
29
|
+
const env = {};
|
|
30
|
+
for (const key of DEFAULT_INHERITED_ENV_VARS) {
|
|
31
|
+
const value = process.env[key];
|
|
32
|
+
if (value === undefined) {
|
|
33
|
+
continue;
|
|
34
|
+
}
|
|
35
|
+
if (value.startsWith('()')) {
|
|
36
|
+
// Skip functions, which are a security risk.
|
|
37
|
+
continue;
|
|
38
|
+
}
|
|
39
|
+
env[key] = value;
|
|
40
|
+
}
|
|
41
|
+
return env;
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Client transport for stdio: this will connect to a server by spawning a process and communicating with it over stdin/stdout.
|
|
45
|
+
*
|
|
46
|
+
* This transport is only available in Node.js environments.
|
|
47
|
+
*/
|
|
48
|
+
export class StdioClientTransport {
|
|
49
|
+
constructor(server) {
|
|
50
|
+
this._readBuffer = new ReadBuffer();
|
|
51
|
+
this._stderrStream = null;
|
|
52
|
+
this._serverParams = server;
|
|
53
|
+
if (server.stderr === 'pipe' || server.stderr === 'overlapped') {
|
|
54
|
+
this._stderrStream = new PassThrough();
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Starts the server process and prepares to communicate with it.
|
|
59
|
+
*/
|
|
60
|
+
async start() {
|
|
61
|
+
if (this._process) {
|
|
62
|
+
throw new Error('StdioClientTransport already started! If using Client class, note that connect() calls start() automatically.');
|
|
63
|
+
}
|
|
64
|
+
return new Promise((resolve, reject) => {
|
|
65
|
+
this._process = spawn(this._serverParams.command, this._serverParams.args ?? [], {
|
|
66
|
+
// merge default env with server env because mcp server needs some env vars
|
|
67
|
+
env: {
|
|
68
|
+
...getDefaultEnvironment(),
|
|
69
|
+
...this._serverParams.env
|
|
70
|
+
},
|
|
71
|
+
stdio: ['pipe', 'pipe', this._serverParams.stderr ?? 'inherit'],
|
|
72
|
+
shell: false,
|
|
73
|
+
windowsHide: process.platform === 'win32' && isElectron(),
|
|
74
|
+
cwd: this._serverParams.cwd
|
|
75
|
+
});
|
|
76
|
+
this._process.on('error', error => {
|
|
77
|
+
reject(error);
|
|
78
|
+
this.onerror?.(error);
|
|
79
|
+
});
|
|
80
|
+
this._process.on('spawn', () => {
|
|
81
|
+
resolve();
|
|
82
|
+
});
|
|
83
|
+
this._process.on('close', _code => {
|
|
84
|
+
this._process = undefined;
|
|
85
|
+
this.onclose?.();
|
|
86
|
+
});
|
|
87
|
+
this._process.stdin?.on('error', error => {
|
|
88
|
+
this.onerror?.(error);
|
|
89
|
+
});
|
|
90
|
+
this._process.stdout?.on('data', chunk => {
|
|
91
|
+
this._readBuffer.append(chunk);
|
|
92
|
+
this.processReadBuffer();
|
|
93
|
+
});
|
|
94
|
+
this._process.stdout?.on('error', error => {
|
|
95
|
+
this.onerror?.(error);
|
|
96
|
+
});
|
|
97
|
+
if (this._stderrStream && this._process.stderr) {
|
|
98
|
+
this._process.stderr.pipe(this._stderrStream);
|
|
99
|
+
}
|
|
100
|
+
});
|
|
101
|
+
}
|
|
102
|
+
/**
|
|
103
|
+
* The stderr stream of the child process, if `StdioServerParameters.stderr` was set to "pipe" or "overlapped".
|
|
104
|
+
*
|
|
105
|
+
* If stderr piping was requested, a PassThrough stream is returned _immediately_, allowing callers to
|
|
106
|
+
* attach listeners before the start method is invoked. This prevents loss of any early
|
|
107
|
+
* error output emitted by the child process.
|
|
108
|
+
*/
|
|
109
|
+
get stderr() {
|
|
110
|
+
if (this._stderrStream) {
|
|
111
|
+
return this._stderrStream;
|
|
112
|
+
}
|
|
113
|
+
return this._process?.stderr ?? null;
|
|
114
|
+
}
|
|
115
|
+
/**
|
|
116
|
+
* The child process pid spawned by this transport.
|
|
117
|
+
*
|
|
118
|
+
* This is only available after the transport has been started.
|
|
119
|
+
*/
|
|
120
|
+
get pid() {
|
|
121
|
+
return this._process?.pid ?? null;
|
|
122
|
+
}
|
|
123
|
+
processReadBuffer() {
|
|
124
|
+
while (true) {
|
|
125
|
+
try {
|
|
126
|
+
const message = this._readBuffer.readMessage();
|
|
127
|
+
if (message === null) {
|
|
128
|
+
break;
|
|
129
|
+
}
|
|
130
|
+
this.onmessage?.(message);
|
|
131
|
+
}
|
|
132
|
+
catch (error) {
|
|
133
|
+
this.onerror?.(error);
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
async close() {
|
|
138
|
+
if (this._process) {
|
|
139
|
+
const processToClose = this._process;
|
|
140
|
+
this._process = undefined;
|
|
141
|
+
const closePromise = new Promise(resolve => {
|
|
142
|
+
processToClose.once('close', () => {
|
|
143
|
+
resolve();
|
|
144
|
+
});
|
|
145
|
+
});
|
|
146
|
+
try {
|
|
147
|
+
processToClose.stdin?.end();
|
|
148
|
+
}
|
|
149
|
+
catch {
|
|
150
|
+
// ignore
|
|
151
|
+
}
|
|
152
|
+
await Promise.race([closePromise, new Promise(resolve => setTimeout(resolve, 2000).unref())]);
|
|
153
|
+
if (processToClose.exitCode === null) {
|
|
154
|
+
try {
|
|
155
|
+
processToClose.kill('SIGTERM');
|
|
156
|
+
}
|
|
157
|
+
catch {
|
|
158
|
+
// ignore
|
|
159
|
+
}
|
|
160
|
+
await Promise.race([closePromise, new Promise(resolve => setTimeout(resolve, 2000).unref())]);
|
|
161
|
+
}
|
|
162
|
+
if (processToClose.exitCode === null) {
|
|
163
|
+
try {
|
|
164
|
+
processToClose.kill('SIGKILL');
|
|
165
|
+
}
|
|
166
|
+
catch {
|
|
167
|
+
// ignore
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
this._readBuffer.clear();
|
|
172
|
+
}
|
|
173
|
+
send(message) {
|
|
174
|
+
return new Promise(resolve => {
|
|
175
|
+
if (!this._process?.stdin) {
|
|
176
|
+
throw new Error('Not connected');
|
|
177
|
+
}
|
|
178
|
+
const json = serializeMessage(message);
|
|
179
|
+
if (this._process.stdin.write(json)) {
|
|
180
|
+
resolve();
|
|
181
|
+
}
|
|
182
|
+
else {
|
|
183
|
+
this._process.stdin.once('drain', resolve);
|
|
184
|
+
}
|
|
185
|
+
});
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
function isElectron() {
|
|
189
|
+
return 'type' in process;
|
|
190
|
+
}
|
|
191
|
+
//# sourceMappingURL=stdio.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stdio.js","sourceRoot":"","sources":["../../../src/client/stdio.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Experimental MCP SDK features.
|
|
3
|
+
* WARNING: These APIs are experimental and may change without notice.
|
|
4
|
+
*
|
|
5
|
+
* Import experimental features from this module:
|
|
6
|
+
* ```typescript
|
|
7
|
+
* import { TaskStore, InMemoryTaskStore } from '@modelcontextprotocol/sdk/experimental';
|
|
8
|
+
* ```
|
|
9
|
+
*
|
|
10
|
+
* @experimental
|
|
11
|
+
*/
|
|
12
|
+
export * from './tasks/index.js';
|
|
13
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/experimental/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,cAAc,kBAAkB,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Experimental MCP SDK features.
|
|
3
|
+
* WARNING: These APIs are experimental and may change without notice.
|
|
4
|
+
*
|
|
5
|
+
* Import experimental features from this module:
|
|
6
|
+
* ```typescript
|
|
7
|
+
* import { TaskStore, InMemoryTaskStore } from '@modelcontextprotocol/sdk/experimental';
|
|
8
|
+
* ```
|
|
9
|
+
*
|
|
10
|
+
* @experimental
|
|
11
|
+
*/
|
|
12
|
+
export * from './tasks/index.js';
|
|
13
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/experimental/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,cAAc,kBAAkB,CAAC"}
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Experimental client task features for MCP SDK.
|
|
3
|
+
* WARNING: These APIs are experimental and may change without notice.
|
|
4
|
+
*
|
|
5
|
+
* @experimental
|
|
6
|
+
*/
|
|
7
|
+
import type { Client } from '../../client/index.js';
|
|
8
|
+
import type { RequestOptions } from '../../shared/protocol.js';
|
|
9
|
+
import type { ResponseMessage } from '../../shared/responseMessage.js';
|
|
10
|
+
import type { AnyObjectSchema, SchemaOutput } from '../../server/zod-compat.js';
|
|
11
|
+
import type { CallToolRequest, ClientRequest, Notification, Request, Result } from '../../types.js';
|
|
12
|
+
import { CallToolResultSchema, type CompatibilityCallToolResultSchema } from '../../types.js';
|
|
13
|
+
import type { GetTaskResult, ListTasksResult, CancelTaskResult } from './types.js';
|
|
14
|
+
/**
|
|
15
|
+
* Experimental task features for MCP clients.
|
|
16
|
+
*
|
|
17
|
+
* Access via `client.experimental.tasks`:
|
|
18
|
+
* ```typescript
|
|
19
|
+
* const stream = client.experimental.tasks.callToolStream({ name: 'tool', arguments: {} });
|
|
20
|
+
* const task = await client.experimental.tasks.getTask(taskId);
|
|
21
|
+
* ```
|
|
22
|
+
*
|
|
23
|
+
* @experimental
|
|
24
|
+
*/
|
|
25
|
+
export declare class ExperimentalClientTasks<RequestT extends Request = Request, NotificationT extends Notification = Notification, ResultT extends Result = Result> {
|
|
26
|
+
private readonly _client;
|
|
27
|
+
constructor(_client: Client<RequestT, NotificationT, ResultT>);
|
|
28
|
+
/**
|
|
29
|
+
* Calls a tool and returns an AsyncGenerator that yields response messages.
|
|
30
|
+
* The generator is guaranteed to end with either a 'result' or 'error' message.
|
|
31
|
+
*
|
|
32
|
+
* This method provides streaming access to tool execution, allowing you to
|
|
33
|
+
* observe intermediate task status updates for long-running tool calls.
|
|
34
|
+
* Automatically validates structured output if the tool has an outputSchema.
|
|
35
|
+
*
|
|
36
|
+
* @example
|
|
37
|
+
* ```typescript
|
|
38
|
+
* const stream = client.experimental.tasks.callToolStream({ name: 'myTool', arguments: {} });
|
|
39
|
+
* for await (const message of stream) {
|
|
40
|
+
* switch (message.type) {
|
|
41
|
+
* case 'taskCreated':
|
|
42
|
+
* console.log('Tool execution started:', message.task.taskId);
|
|
43
|
+
* break;
|
|
44
|
+
* case 'taskStatus':
|
|
45
|
+
* console.log('Tool status:', message.task.status);
|
|
46
|
+
* break;
|
|
47
|
+
* case 'result':
|
|
48
|
+
* console.log('Tool result:', message.result);
|
|
49
|
+
* break;
|
|
50
|
+
* case 'error':
|
|
51
|
+
* console.error('Tool error:', message.error);
|
|
52
|
+
* break;
|
|
53
|
+
* }
|
|
54
|
+
* }
|
|
55
|
+
* ```
|
|
56
|
+
*
|
|
57
|
+
* @param params - Tool call parameters (name and arguments)
|
|
58
|
+
* @param resultSchema - Zod schema for validating the result (defaults to CallToolResultSchema)
|
|
59
|
+
* @param options - Optional request options (timeout, signal, task creation params, etc.)
|
|
60
|
+
* @returns AsyncGenerator that yields ResponseMessage objects
|
|
61
|
+
*
|
|
62
|
+
* @experimental
|
|
63
|
+
*/
|
|
64
|
+
callToolStream<T extends typeof CallToolResultSchema | typeof CompatibilityCallToolResultSchema>(params: CallToolRequest['params'], resultSchema?: T, options?: RequestOptions): AsyncGenerator<ResponseMessage<SchemaOutput<T>>, void, void>;
|
|
65
|
+
/**
|
|
66
|
+
* Gets the current status of a task.
|
|
67
|
+
*
|
|
68
|
+
* @param taskId - The task identifier
|
|
69
|
+
* @param options - Optional request options
|
|
70
|
+
* @returns The task status
|
|
71
|
+
*
|
|
72
|
+
* @experimental
|
|
73
|
+
*/
|
|
74
|
+
getTask(taskId: string, options?: RequestOptions): Promise<GetTaskResult>;
|
|
75
|
+
/**
|
|
76
|
+
* Retrieves the result of a completed task.
|
|
77
|
+
*
|
|
78
|
+
* @param taskId - The task identifier
|
|
79
|
+
* @param resultSchema - Zod schema for validating the result
|
|
80
|
+
* @param options - Optional request options
|
|
81
|
+
* @returns The task result
|
|
82
|
+
*
|
|
83
|
+
* @experimental
|
|
84
|
+
*/
|
|
85
|
+
getTaskResult<T extends AnyObjectSchema>(taskId: string, resultSchema?: T, options?: RequestOptions): Promise<SchemaOutput<T>>;
|
|
86
|
+
/**
|
|
87
|
+
* Lists tasks with optional pagination.
|
|
88
|
+
*
|
|
89
|
+
* @param cursor - Optional pagination cursor
|
|
90
|
+
* @param options - Optional request options
|
|
91
|
+
* @returns List of tasks with optional next cursor
|
|
92
|
+
*
|
|
93
|
+
* @experimental
|
|
94
|
+
*/
|
|
95
|
+
listTasks(cursor?: string, options?: RequestOptions): Promise<ListTasksResult>;
|
|
96
|
+
/**
|
|
97
|
+
* Cancels a running task.
|
|
98
|
+
*
|
|
99
|
+
* @param taskId - The task identifier
|
|
100
|
+
* @param options - Optional request options
|
|
101
|
+
*
|
|
102
|
+
* @experimental
|
|
103
|
+
*/
|
|
104
|
+
cancelTask(taskId: string, options?: RequestOptions): Promise<CancelTaskResult>;
|
|
105
|
+
/**
|
|
106
|
+
* Sends a request and returns an AsyncGenerator that yields response messages.
|
|
107
|
+
* The generator is guaranteed to end with either a 'result' or 'error' message.
|
|
108
|
+
*
|
|
109
|
+
* This method provides streaming access to request processing, allowing you to
|
|
110
|
+
* observe intermediate task status updates for task-augmented requests.
|
|
111
|
+
*
|
|
112
|
+
* @param request - The request to send
|
|
113
|
+
* @param resultSchema - Zod schema for validating the result
|
|
114
|
+
* @param options - Optional request options (timeout, signal, task creation params, etc.)
|
|
115
|
+
* @returns AsyncGenerator that yields ResponseMessage objects
|
|
116
|
+
*
|
|
117
|
+
* @experimental
|
|
118
|
+
*/
|
|
119
|
+
requestStream<T extends AnyObjectSchema>(request: ClientRequest | RequestT, resultSchema: T, options?: RequestOptions): AsyncGenerator<ResponseMessage<SchemaOutput<T>>, void, void>;
|
|
120
|
+
}
|
|
121
|
+
//# sourceMappingURL=client.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../../../src/experimental/tasks/client.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AACpD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAC/D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,iCAAiC,CAAC;AACvE,OAAO,KAAK,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAChF,OAAO,KAAK,EAAE,eAAe,EAAE,aAAa,EAAE,YAAY,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AACpG,OAAO,EAAE,oBAAoB,EAAE,KAAK,iCAAiC,EAAuB,MAAM,gBAAgB,CAAC;AAEnH,OAAO,KAAK,EAAE,aAAa,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAgBnF;;;;;;;;;;GAUG;AACH,qBAAa,uBAAuB,CAChC,QAAQ,SAAS,OAAO,GAAG,OAAO,EAClC,aAAa,SAAS,YAAY,GAAG,YAAY,EACjD,OAAO,SAAS,MAAM,GAAG,MAAM;IAEnB,OAAO,CAAC,QAAQ,CAAC,OAAO;gBAAP,OAAO,EAAE,MAAM,CAAC,QAAQ,EAAE,aAAa,EAAE,OAAO,CAAC;IAE9E;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAmCG;IACI,cAAc,CAAC,CAAC,SAAS,OAAO,oBAAoB,GAAG,OAAO,iCAAiC,EAClG,MAAM,EAAE,eAAe,CAAC,QAAQ,CAAC,EACjC,YAAY,GAAE,CAA6B,EAC3C,OAAO,CAAC,EAAE,cAAc,GACzB,cAAc,CAAC,eAAe,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC;IAyE/D;;;;;;;;OAQG;IACG,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,aAAa,CAAC;IAM/E;;;;;;;;;OASG;IACG,aAAa,CAAC,CAAC,SAAS,eAAe,EAAE,MAAM,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;IAapI;;;;;;;;OAQG;IACG,SAAS,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,eAAe,CAAC;IASpF;;;;;;;OAOG;IACG,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,gBAAgB,CAAC;IASrF;;;;;;;;;;;;;OAaG;IACH,aAAa,CAAC,CAAC,SAAS,eAAe,EACnC,OAAO,EAAE,aAAa,GAAG,QAAQ,EACjC,YAAY,EAAE,CAAC,EACf,OAAO,CAAC,EAAE,cAAc,GACzB,cAAc,CAAC,eAAe,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC;CAWlE"}
|
|
@@ -0,0 +1,184 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Experimental client task features for MCP SDK.
|
|
3
|
+
* WARNING: These APIs are experimental and may change without notice.
|
|
4
|
+
*
|
|
5
|
+
* @experimental
|
|
6
|
+
*/
|
|
7
|
+
import { CallToolResultSchema, McpError, ErrorCode } from '../../types.js';
|
|
8
|
+
/**
|
|
9
|
+
* Experimental task features for MCP clients.
|
|
10
|
+
*
|
|
11
|
+
* Access via `client.experimental.tasks`:
|
|
12
|
+
* ```typescript
|
|
13
|
+
* const stream = client.experimental.tasks.callToolStream({ name: 'tool', arguments: {} });
|
|
14
|
+
* const task = await client.experimental.tasks.getTask(taskId);
|
|
15
|
+
* ```
|
|
16
|
+
*
|
|
17
|
+
* @experimental
|
|
18
|
+
*/
|
|
19
|
+
export class ExperimentalClientTasks {
|
|
20
|
+
constructor(_client) {
|
|
21
|
+
this._client = _client;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Calls a tool and returns an AsyncGenerator that yields response messages.
|
|
25
|
+
* The generator is guaranteed to end with either a 'result' or 'error' message.
|
|
26
|
+
*
|
|
27
|
+
* This method provides streaming access to tool execution, allowing you to
|
|
28
|
+
* observe intermediate task status updates for long-running tool calls.
|
|
29
|
+
* Automatically validates structured output if the tool has an outputSchema.
|
|
30
|
+
*
|
|
31
|
+
* @example
|
|
32
|
+
* ```typescript
|
|
33
|
+
* const stream = client.experimental.tasks.callToolStream({ name: 'myTool', arguments: {} });
|
|
34
|
+
* for await (const message of stream) {
|
|
35
|
+
* switch (message.type) {
|
|
36
|
+
* case 'taskCreated':
|
|
37
|
+
* console.log('Tool execution started:', message.task.taskId);
|
|
38
|
+
* break;
|
|
39
|
+
* case 'taskStatus':
|
|
40
|
+
* console.log('Tool status:', message.task.status);
|
|
41
|
+
* break;
|
|
42
|
+
* case 'result':
|
|
43
|
+
* console.log('Tool result:', message.result);
|
|
44
|
+
* break;
|
|
45
|
+
* case 'error':
|
|
46
|
+
* console.error('Tool error:', message.error);
|
|
47
|
+
* break;
|
|
48
|
+
* }
|
|
49
|
+
* }
|
|
50
|
+
* ```
|
|
51
|
+
*
|
|
52
|
+
* @param params - Tool call parameters (name and arguments)
|
|
53
|
+
* @param resultSchema - Zod schema for validating the result (defaults to CallToolResultSchema)
|
|
54
|
+
* @param options - Optional request options (timeout, signal, task creation params, etc.)
|
|
55
|
+
* @returns AsyncGenerator that yields ResponseMessage objects
|
|
56
|
+
*
|
|
57
|
+
* @experimental
|
|
58
|
+
*/
|
|
59
|
+
async *callToolStream(params, resultSchema = CallToolResultSchema, options) {
|
|
60
|
+
// Access Client's internal methods
|
|
61
|
+
const clientInternal = this._client;
|
|
62
|
+
// Add task creation parameters if server supports it and not explicitly provided
|
|
63
|
+
const optionsWithTask = {
|
|
64
|
+
...options,
|
|
65
|
+
// We check if the tool is known to be a task during auto-configuration, but assume
|
|
66
|
+
// the caller knows what they're doing if they pass this explicitly
|
|
67
|
+
task: options?.task ?? (clientInternal.isToolTask(params.name) ? {} : undefined)
|
|
68
|
+
};
|
|
69
|
+
const stream = clientInternal.requestStream({ method: 'tools/call', params }, resultSchema, optionsWithTask);
|
|
70
|
+
// Get the validator for this tool (if it has an output schema)
|
|
71
|
+
const validator = clientInternal.getToolOutputValidator(params.name);
|
|
72
|
+
// Iterate through the stream and validate the final result if needed
|
|
73
|
+
for await (const message of stream) {
|
|
74
|
+
// If this is a result message and the tool has an output schema, validate it
|
|
75
|
+
if (message.type === 'result' && validator) {
|
|
76
|
+
const result = message.result;
|
|
77
|
+
// If tool has outputSchema, it MUST return structuredContent (unless it's an error)
|
|
78
|
+
if (!result.structuredContent && !result.isError) {
|
|
79
|
+
yield {
|
|
80
|
+
type: 'error',
|
|
81
|
+
error: new McpError(ErrorCode.InvalidRequest, `Tool ${params.name} has an output schema but did not return structured content`)
|
|
82
|
+
};
|
|
83
|
+
return;
|
|
84
|
+
}
|
|
85
|
+
// Only validate structured content if present (not when there's an error)
|
|
86
|
+
if (result.structuredContent) {
|
|
87
|
+
try {
|
|
88
|
+
// Validate the structured content against the schema
|
|
89
|
+
const validationResult = validator(result.structuredContent);
|
|
90
|
+
if (!validationResult.valid) {
|
|
91
|
+
yield {
|
|
92
|
+
type: 'error',
|
|
93
|
+
error: new McpError(ErrorCode.InvalidParams, `Structured content does not match the tool's output schema: ${validationResult.errorMessage}`)
|
|
94
|
+
};
|
|
95
|
+
return;
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
catch (error) {
|
|
99
|
+
if (error instanceof McpError) {
|
|
100
|
+
yield { type: 'error', error };
|
|
101
|
+
return;
|
|
102
|
+
}
|
|
103
|
+
yield {
|
|
104
|
+
type: 'error',
|
|
105
|
+
error: new McpError(ErrorCode.InvalidParams, `Failed to validate structured content: ${error instanceof Error ? error.message : String(error)}`)
|
|
106
|
+
};
|
|
107
|
+
return;
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
// Yield the message (either validated result or any other message type)
|
|
112
|
+
yield message;
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
/**
|
|
116
|
+
* Gets the current status of a task.
|
|
117
|
+
*
|
|
118
|
+
* @param taskId - The task identifier
|
|
119
|
+
* @param options - Optional request options
|
|
120
|
+
* @returns The task status
|
|
121
|
+
*
|
|
122
|
+
* @experimental
|
|
123
|
+
*/
|
|
124
|
+
async getTask(taskId, options) {
|
|
125
|
+
return this._client.getTask({ taskId }, options);
|
|
126
|
+
}
|
|
127
|
+
/**
|
|
128
|
+
* Retrieves the result of a completed task.
|
|
129
|
+
*
|
|
130
|
+
* @param taskId - The task identifier
|
|
131
|
+
* @param resultSchema - Zod schema for validating the result
|
|
132
|
+
* @param options - Optional request options
|
|
133
|
+
* @returns The task result
|
|
134
|
+
*
|
|
135
|
+
* @experimental
|
|
136
|
+
*/
|
|
137
|
+
async getTaskResult(taskId, resultSchema, options) {
|
|
138
|
+
// Delegate to the client's underlying Protocol method
|
|
139
|
+
return this._client.getTaskResult({ taskId }, resultSchema, options);
|
|
140
|
+
}
|
|
141
|
+
/**
|
|
142
|
+
* Lists tasks with optional pagination.
|
|
143
|
+
*
|
|
144
|
+
* @param cursor - Optional pagination cursor
|
|
145
|
+
* @param options - Optional request options
|
|
146
|
+
* @returns List of tasks with optional next cursor
|
|
147
|
+
*
|
|
148
|
+
* @experimental
|
|
149
|
+
*/
|
|
150
|
+
async listTasks(cursor, options) {
|
|
151
|
+
// Delegate to the client's underlying Protocol method
|
|
152
|
+
return this._client.listTasks(cursor ? { cursor } : undefined, options);
|
|
153
|
+
}
|
|
154
|
+
/**
|
|
155
|
+
* Cancels a running task.
|
|
156
|
+
*
|
|
157
|
+
* @param taskId - The task identifier
|
|
158
|
+
* @param options - Optional request options
|
|
159
|
+
*
|
|
160
|
+
* @experimental
|
|
161
|
+
*/
|
|
162
|
+
async cancelTask(taskId, options) {
|
|
163
|
+
// Delegate to the client's underlying Protocol method
|
|
164
|
+
return this._client.cancelTask({ taskId }, options);
|
|
165
|
+
}
|
|
166
|
+
/**
|
|
167
|
+
* Sends a request and returns an AsyncGenerator that yields response messages.
|
|
168
|
+
* The generator is guaranteed to end with either a 'result' or 'error' message.
|
|
169
|
+
*
|
|
170
|
+
* This method provides streaming access to request processing, allowing you to
|
|
171
|
+
* observe intermediate task status updates for task-augmented requests.
|
|
172
|
+
*
|
|
173
|
+
* @param request - The request to send
|
|
174
|
+
* @param resultSchema - Zod schema for validating the result
|
|
175
|
+
* @param options - Optional request options (timeout, signal, task creation params, etc.)
|
|
176
|
+
* @returns AsyncGenerator that yields ResponseMessage objects
|
|
177
|
+
*
|
|
178
|
+
* @experimental
|
|
179
|
+
*/
|
|
180
|
+
requestStream(request, resultSchema, options) {
|
|
181
|
+
return this._client.requestStream(request, resultSchema, options);
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
//# sourceMappingURL=client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../../../src/experimental/tasks/client.ts"],"names":[],"mappings":"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"}
|