@modelcontextprotocol/sdk 1.10.1 → 1.11.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.
Files changed (82) hide show
  1. package/README.md +21 -23
  2. package/dist/cjs/client/index.d.ts +57 -0
  3. package/dist/cjs/client/index.d.ts.map +1 -1
  4. package/dist/cjs/client/stdio.d.ts +4 -1
  5. package/dist/cjs/client/stdio.d.ts.map +1 -1
  6. package/dist/cjs/client/stdio.js +14 -1
  7. package/dist/cjs/client/stdio.js.map +1 -1
  8. package/dist/cjs/examples/client/multipleClientsParallel.d.ts +2 -0
  9. package/dist/cjs/examples/client/multipleClientsParallel.d.ts.map +1 -0
  10. package/dist/cjs/examples/client/multipleClientsParallel.js +134 -0
  11. package/dist/cjs/examples/client/multipleClientsParallel.js.map +1 -0
  12. package/dist/cjs/examples/client/parallelToolCallsClient.d.ts +2 -0
  13. package/dist/cjs/examples/client/parallelToolCallsClient.d.ts.map +1 -0
  14. package/dist/cjs/examples/client/parallelToolCallsClient.js +175 -0
  15. package/dist/cjs/examples/client/parallelToolCallsClient.js.map +1 -0
  16. package/dist/cjs/examples/server/jsonResponseStreamableHttp.js +50 -47
  17. package/dist/cjs/examples/server/jsonResponseStreamableHttp.js.map +1 -1
  18. package/dist/cjs/examples/server/simpleSseServer.js +46 -46
  19. package/dist/cjs/examples/server/simpleSseServer.js.map +1 -1
  20. package/dist/cjs/examples/server/simpleStatelessStreamableHttp.js +78 -87
  21. package/dist/cjs/examples/server/simpleStatelessStreamableHttp.js.map +1 -1
  22. package/dist/cjs/examples/server/simpleStreamableHttp.js +108 -101
  23. package/dist/cjs/examples/server/simpleStreamableHttp.js.map +1 -1
  24. package/dist/cjs/examples/server/sseAndStreamableHttpCompatibleServer.js +42 -38
  25. package/dist/cjs/examples/server/sseAndStreamableHttpCompatibleServer.js.map +1 -1
  26. package/dist/cjs/server/mcp.d.ts +24 -5
  27. package/dist/cjs/server/mcp.d.ts.map +1 -1
  28. package/dist/cjs/server/mcp.js +31 -1
  29. package/dist/cjs/server/mcp.js.map +1 -1
  30. package/dist/cjs/server/streamableHttp.d.ts +3 -3
  31. package/dist/cjs/server/streamableHttp.d.ts.map +1 -1
  32. package/dist/cjs/server/streamableHttp.js +11 -11
  33. package/dist/cjs/server/streamableHttp.js.map +1 -1
  34. package/dist/cjs/shared/protocol.d.ts +10 -1
  35. package/dist/cjs/shared/protocol.d.ts.map +1 -1
  36. package/dist/cjs/shared/protocol.js +3 -1
  37. package/dist/cjs/shared/protocol.js.map +1 -1
  38. package/dist/cjs/types.d.ts +2645 -24
  39. package/dist/cjs/types.d.ts.map +1 -1
  40. package/dist/cjs/types.js +67 -10
  41. package/dist/cjs/types.js.map +1 -1
  42. package/dist/esm/client/index.d.ts +57 -0
  43. package/dist/esm/client/index.d.ts.map +1 -1
  44. package/dist/esm/client/stdio.d.ts +4 -1
  45. package/dist/esm/client/stdio.d.ts.map +1 -1
  46. package/dist/esm/client/stdio.js +14 -1
  47. package/dist/esm/client/stdio.js.map +1 -1
  48. package/dist/esm/examples/client/multipleClientsParallel.d.ts +2 -0
  49. package/dist/esm/examples/client/multipleClientsParallel.d.ts.map +1 -0
  50. package/dist/esm/examples/client/multipleClientsParallel.js +132 -0
  51. package/dist/esm/examples/client/multipleClientsParallel.js.map +1 -0
  52. package/dist/esm/examples/client/parallelToolCallsClient.d.ts +2 -0
  53. package/dist/esm/examples/client/parallelToolCallsClient.d.ts.map +1 -0
  54. package/dist/esm/examples/client/parallelToolCallsClient.js +173 -0
  55. package/dist/esm/examples/client/parallelToolCallsClient.js.map +1 -0
  56. package/dist/esm/examples/server/jsonResponseStreamableHttp.js +50 -47
  57. package/dist/esm/examples/server/jsonResponseStreamableHttp.js.map +1 -1
  58. package/dist/esm/examples/server/simpleSseServer.js +46 -46
  59. package/dist/esm/examples/server/simpleSseServer.js.map +1 -1
  60. package/dist/esm/examples/server/simpleStatelessStreamableHttp.js +78 -87
  61. package/dist/esm/examples/server/simpleStatelessStreamableHttp.js.map +1 -1
  62. package/dist/esm/examples/server/simpleStreamableHttp.js +108 -101
  63. package/dist/esm/examples/server/simpleStreamableHttp.js.map +1 -1
  64. package/dist/esm/examples/server/sseAndStreamableHttpCompatibleServer.js +42 -38
  65. package/dist/esm/examples/server/sseAndStreamableHttpCompatibleServer.js.map +1 -1
  66. package/dist/esm/server/mcp.d.ts +24 -5
  67. package/dist/esm/server/mcp.d.ts.map +1 -1
  68. package/dist/esm/server/mcp.js +32 -2
  69. package/dist/esm/server/mcp.js.map +1 -1
  70. package/dist/esm/server/streamableHttp.d.ts +3 -3
  71. package/dist/esm/server/streamableHttp.d.ts.map +1 -1
  72. package/dist/esm/server/streamableHttp.js +11 -11
  73. package/dist/esm/server/streamableHttp.js.map +1 -1
  74. package/dist/esm/shared/protocol.d.ts +10 -1
  75. package/dist/esm/shared/protocol.d.ts.map +1 -1
  76. package/dist/esm/shared/protocol.js +3 -1
  77. package/dist/esm/shared/protocol.js.map +1 -1
  78. package/dist/esm/types.d.ts +2645 -24
  79. package/dist/esm/types.d.ts.map +1 -1
  80. package/dist/esm/types.js +66 -9
  81. package/dist/esm/types.js.map +1 -1
  82. package/package.json +1 -1
package/README.md CHANGED
@@ -221,7 +221,8 @@ import express from "express";
221
221
  import { randomUUID } from "node:crypto";
222
222
  import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
223
223
  import { StreamableHTTPServerTransport } from "@modelcontextprotocol/sdk/server/streamableHttp.js";
224
- import { InMemoryEventStore } from "@modelcontextprotocol/sdk/inMemory.js";
224
+ import { isInitializeRequest } from "@modelcontextprotocol/sdk/types.js"
225
+
225
226
 
226
227
 
227
228
  const app = express();
@@ -241,10 +242,8 @@ app.post('/mcp', async (req, res) => {
241
242
  transport = transports[sessionId];
242
243
  } else if (!sessionId && isInitializeRequest(req.body)) {
243
244
  // New initialization request
244
- const eventStore = new InMemoryEventStore();
245
245
  transport = new StreamableHTTPServerTransport({
246
246
  sessionIdGenerator: () => randomUUID(),
247
- eventStore, // Enable resumability
248
247
  onsessioninitialized: (sessionId) => {
249
248
  // Store the transport by session ID
250
249
  transports[sessionId] = transport;
@@ -312,19 +311,23 @@ For simpler use cases where session management isn't needed:
312
311
  const app = express();
313
312
  app.use(express.json());
314
313
 
315
- const transport: StreamableHTTPServerTransport = new StreamableHTTPServerTransport({
316
- sessionIdGenerator: undefined, // set to undefined for stateless servers
317
- });
318
-
319
- // Setup routes for the server
320
- const setupServer = async () => {
321
- await server.connect(transport);
322
- };
323
-
324
314
  app.post('/mcp', async (req: Request, res: Response) => {
325
- console.log('Received MCP request:', req.body);
315
+ // In stateless mode, create a new instance of transport and server for each request
316
+ // to ensure complete isolation. A single instance would cause request ID collisions
317
+ // when multiple clients connect concurrently.
318
+
326
319
  try {
327
- await transport.handleRequest(req, res, req.body);
320
+ const server = getServer();
321
+ const transport: StreamableHTTPServerTransport = new StreamableHTTPServerTransport({
322
+ sessionIdGenerator: undefined,
323
+ });
324
+ res.on('close', () => {
325
+ console.log('Request closed');
326
+ transport.close();
327
+ server.close();
328
+ });
329
+ await server.connect(transport);
330
+ await transport.handleRequest(req, res, req.body);
328
331
  } catch (error) {
329
332
  console.error('Error handling MCP request:', error);
330
333
  if (!res.headersSent) {
@@ -364,15 +367,11 @@ app.delete('/mcp', async (req: Request, res: Response) => {
364
367
  }));
365
368
  });
366
369
 
370
+
367
371
  // Start the server
368
372
  const PORT = 3000;
369
- setupServer().then(() => {
370
- app.listen(PORT, () => {
371
- console.log(`MCP Streamable HTTP Server listening on port ${PORT}`);
372
- });
373
- }).catch(error => {
374
- console.error('Failed to set up the server:', error);
375
- process.exit(1);
373
+ app.listen(PORT, () => {
374
+ console.log(`MCP Stateless Streamable HTTP Server listening on port ${PORT}`);
376
375
  });
377
376
 
378
377
  ```
@@ -773,7 +772,6 @@ import express from "express";
773
772
  import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
774
773
  import { StreamableHTTPServerTransport } from "@modelcontextprotocol/sdk/server/streamableHttp.js";
775
774
  import { SSEServerTransport } from "@modelcontextprotocol/sdk/server/sse.js";
776
- import { InMemoryEventStore } from "@modelcontextprotocol/sdk/inMemory.js";
777
775
 
778
776
  const server = new McpServer({
779
777
  name: "backwards-compatible-server",
@@ -816,7 +814,7 @@ app.post('/messages', async (req, res) => {
816
814
  const sessionId = req.query.sessionId as string;
817
815
  const transport = transports.sse[sessionId];
818
816
  if (transport) {
819
- await transport.handlePostMessage(req, res);
817
+ await transport.handlePostMessage(req, res, req.body);
820
818
  } else {
821
819
  res.status(400).send('No transport found for sessionId');
822
820
  }
@@ -799,6 +799,25 @@ export declare class Client<RequestT extends Request = Request, NotificationT ex
799
799
  type: import("zod").ZodLiteral<"object">;
800
800
  properties: import("zod").ZodOptional<import("zod").ZodObject<{}, "passthrough", import("zod").ZodTypeAny, import("zod").objectOutputType<{}, import("zod").ZodTypeAny, "passthrough">, import("zod").objectInputType<{}, import("zod").ZodTypeAny, "passthrough">>>;
801
801
  }, import("zod").ZodTypeAny, "passthrough">>;
802
+ annotations: import("zod").ZodOptional<import("zod").ZodObject<{
803
+ title: import("zod").ZodOptional<import("zod").ZodString>;
804
+ readOnlyHint: import("zod").ZodOptional<import("zod").ZodBoolean>;
805
+ destructiveHint: import("zod").ZodOptional<import("zod").ZodBoolean>;
806
+ idempotentHint: import("zod").ZodOptional<import("zod").ZodBoolean>;
807
+ openWorldHint: import("zod").ZodOptional<import("zod").ZodBoolean>;
808
+ }, "passthrough", import("zod").ZodTypeAny, import("zod").objectOutputType<{
809
+ title: import("zod").ZodOptional<import("zod").ZodString>;
810
+ readOnlyHint: import("zod").ZodOptional<import("zod").ZodBoolean>;
811
+ destructiveHint: import("zod").ZodOptional<import("zod").ZodBoolean>;
812
+ idempotentHint: import("zod").ZodOptional<import("zod").ZodBoolean>;
813
+ openWorldHint: import("zod").ZodOptional<import("zod").ZodBoolean>;
814
+ }, import("zod").ZodTypeAny, "passthrough">, import("zod").objectInputType<{
815
+ title: import("zod").ZodOptional<import("zod").ZodString>;
816
+ readOnlyHint: import("zod").ZodOptional<import("zod").ZodBoolean>;
817
+ destructiveHint: import("zod").ZodOptional<import("zod").ZodBoolean>;
818
+ idempotentHint: import("zod").ZodOptional<import("zod").ZodBoolean>;
819
+ openWorldHint: import("zod").ZodOptional<import("zod").ZodBoolean>;
820
+ }, import("zod").ZodTypeAny, "passthrough">>>;
802
821
  }, "passthrough", import("zod").ZodTypeAny, import("zod").objectOutputType<{
803
822
  name: import("zod").ZodString;
804
823
  description: import("zod").ZodOptional<import("zod").ZodString>;
@@ -812,6 +831,25 @@ export declare class Client<RequestT extends Request = Request, NotificationT ex
812
831
  type: import("zod").ZodLiteral<"object">;
813
832
  properties: import("zod").ZodOptional<import("zod").ZodObject<{}, "passthrough", import("zod").ZodTypeAny, import("zod").objectOutputType<{}, import("zod").ZodTypeAny, "passthrough">, import("zod").objectInputType<{}, import("zod").ZodTypeAny, "passthrough">>>;
814
833
  }, import("zod").ZodTypeAny, "passthrough">>;
834
+ annotations: import("zod").ZodOptional<import("zod").ZodObject<{
835
+ title: import("zod").ZodOptional<import("zod").ZodString>;
836
+ readOnlyHint: import("zod").ZodOptional<import("zod").ZodBoolean>;
837
+ destructiveHint: import("zod").ZodOptional<import("zod").ZodBoolean>;
838
+ idempotentHint: import("zod").ZodOptional<import("zod").ZodBoolean>;
839
+ openWorldHint: import("zod").ZodOptional<import("zod").ZodBoolean>;
840
+ }, "passthrough", import("zod").ZodTypeAny, import("zod").objectOutputType<{
841
+ title: import("zod").ZodOptional<import("zod").ZodString>;
842
+ readOnlyHint: import("zod").ZodOptional<import("zod").ZodBoolean>;
843
+ destructiveHint: import("zod").ZodOptional<import("zod").ZodBoolean>;
844
+ idempotentHint: import("zod").ZodOptional<import("zod").ZodBoolean>;
845
+ openWorldHint: import("zod").ZodOptional<import("zod").ZodBoolean>;
846
+ }, import("zod").ZodTypeAny, "passthrough">, import("zod").objectInputType<{
847
+ title: import("zod").ZodOptional<import("zod").ZodString>;
848
+ readOnlyHint: import("zod").ZodOptional<import("zod").ZodBoolean>;
849
+ destructiveHint: import("zod").ZodOptional<import("zod").ZodBoolean>;
850
+ idempotentHint: import("zod").ZodOptional<import("zod").ZodBoolean>;
851
+ openWorldHint: import("zod").ZodOptional<import("zod").ZodBoolean>;
852
+ }, import("zod").ZodTypeAny, "passthrough">>>;
815
853
  }, import("zod").ZodTypeAny, "passthrough">, import("zod").objectInputType<{
816
854
  name: import("zod").ZodString;
817
855
  description: import("zod").ZodOptional<import("zod").ZodString>;
@@ -825,6 +863,25 @@ export declare class Client<RequestT extends Request = Request, NotificationT ex
825
863
  type: import("zod").ZodLiteral<"object">;
826
864
  properties: import("zod").ZodOptional<import("zod").ZodObject<{}, "passthrough", import("zod").ZodTypeAny, import("zod").objectOutputType<{}, import("zod").ZodTypeAny, "passthrough">, import("zod").objectInputType<{}, import("zod").ZodTypeAny, "passthrough">>>;
827
865
  }, import("zod").ZodTypeAny, "passthrough">>;
866
+ annotations: import("zod").ZodOptional<import("zod").ZodObject<{
867
+ title: import("zod").ZodOptional<import("zod").ZodString>;
868
+ readOnlyHint: import("zod").ZodOptional<import("zod").ZodBoolean>;
869
+ destructiveHint: import("zod").ZodOptional<import("zod").ZodBoolean>;
870
+ idempotentHint: import("zod").ZodOptional<import("zod").ZodBoolean>;
871
+ openWorldHint: import("zod").ZodOptional<import("zod").ZodBoolean>;
872
+ }, "passthrough", import("zod").ZodTypeAny, import("zod").objectOutputType<{
873
+ title: import("zod").ZodOptional<import("zod").ZodString>;
874
+ readOnlyHint: import("zod").ZodOptional<import("zod").ZodBoolean>;
875
+ destructiveHint: import("zod").ZodOptional<import("zod").ZodBoolean>;
876
+ idempotentHint: import("zod").ZodOptional<import("zod").ZodBoolean>;
877
+ openWorldHint: import("zod").ZodOptional<import("zod").ZodBoolean>;
878
+ }, import("zod").ZodTypeAny, "passthrough">, import("zod").objectInputType<{
879
+ title: import("zod").ZodOptional<import("zod").ZodString>;
880
+ readOnlyHint: import("zod").ZodOptional<import("zod").ZodBoolean>;
881
+ destructiveHint: import("zod").ZodOptional<import("zod").ZodBoolean>;
882
+ idempotentHint: import("zod").ZodOptional<import("zod").ZodBoolean>;
883
+ openWorldHint: import("zod").ZodOptional<import("zod").ZodBoolean>;
884
+ }, import("zod").ZodTypeAny, "passthrough">>>;
828
885
  }, import("zod").ZodTypeAny, "passthrough">>, "many">;
829
886
  }>, import("zod").ZodTypeAny, "passthrough">>;
830
887
  sendRootsListChanged(): Promise<void>;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/client/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/client/index.ts"],"names":[],"mappings":"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"}
@@ -48,6 +48,7 @@ export declare class StdioClientTransport implements Transport {
48
48
  private _abortController;
49
49
  private _readBuffer;
50
50
  private _serverParams;
51
+ private _stderrStream;
51
52
  onclose?: () => void;
52
53
  onerror?: (error: Error) => void;
53
54
  onmessage?: (message: JSONRPCMessage) => void;
@@ -59,7 +60,9 @@ export declare class StdioClientTransport implements Transport {
59
60
  /**
60
61
  * The stderr stream of the child process, if `StdioServerParameters.stderr` was set to "pipe" or "overlapped".
61
62
  *
62
- * This is only available after the process has been started.
63
+ * If stderr piping was requested, a PassThrough stream is returned _immediately_, allowing callers to
64
+ * attach listeners before the start method is invoked. This prevents loss of any early
65
+ * error output emitted by the child process.
63
66
  */
64
67
  get stderr(): Stream | null;
65
68
  private processReadBuffer;
@@ -1 +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;AAErC,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AACnD,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAE7C,MAAM,MAAM,qBAAqB,GAAG;IAClC;;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;CACd,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,0BAA0B,UAgBmB,CAAC;AAE3D;;GAEG;AACH,wBAAgB,qBAAqB,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAkB9D;AAED;;;;GAIG;AACH,qBAAa,oBAAqB,YAAW,SAAS;IACpD,OAAO,CAAC,QAAQ,CAAC,CAAe;IAChC,OAAO,CAAC,gBAAgB,CAA0C;IAClE,OAAO,CAAC,WAAW,CAAgC;IACnD,OAAO,CAAC,aAAa,CAAwB;IAE7C,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;IAIzC;;OAEG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAwD5B;;;;OAIG;IACH,IAAI,MAAM,IAAI,MAAM,GAAG,IAAI,CAE1B;IAED,OAAO,CAAC,iBAAiB;IAenB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAM5B,IAAI,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC;CAc7C"}
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;IAClC;;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;CACd,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,0BAA0B,UAgBmB,CAAC;AAE3D;;GAEG;AACH,wBAAgB,qBAAqB,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAkB9D;AAED;;;;GAIG;AACH,qBAAa,oBAAqB,YAAW,SAAS;IACpD,OAAO,CAAC,QAAQ,CAAC,CAAe;IAChC,OAAO,CAAC,gBAAgB,CAA0C;IAClE,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;IA4D5B;;;;;;OAMG;IACH,IAAI,MAAM,IAAI,MAAM,GAAG,IAAI,CAM1B;IAED,OAAO,CAAC,iBAAiB;IAenB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAM5B,IAAI,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC;CAc7C"}
@@ -7,6 +7,7 @@ exports.StdioClientTransport = exports.DEFAULT_INHERITED_ENV_VARS = void 0;
7
7
  exports.getDefaultEnvironment = getDefaultEnvironment;
8
8
  const cross_spawn_1 = __importDefault(require("cross-spawn"));
9
9
  const node_process_1 = __importDefault(require("node:process"));
10
+ const node_stream_1 = require("node:stream");
10
11
  const stdio_js_1 = require("../shared/stdio.js");
11
12
  /**
12
13
  * Environment variables to inherit by default, if an environment is not explicitly given.
@@ -54,7 +55,11 @@ class StdioClientTransport {
54
55
  constructor(server) {
55
56
  this._abortController = new AbortController();
56
57
  this._readBuffer = new stdio_js_1.ReadBuffer();
58
+ this._stderrStream = null;
57
59
  this._serverParams = server;
60
+ if (server.stderr === "pipe" || server.stderr === "overlapped") {
61
+ this._stderrStream = new node_stream_1.PassThrough();
62
+ }
58
63
  }
59
64
  /**
60
65
  * Starts the server process and prepares to communicate with it.
@@ -103,15 +108,23 @@ class StdioClientTransport {
103
108
  var _a;
104
109
  (_a = this.onerror) === null || _a === void 0 ? void 0 : _a.call(this, error);
105
110
  });
111
+ if (this._stderrStream && this._process.stderr) {
112
+ this._process.stderr.pipe(this._stderrStream);
113
+ }
106
114
  });
107
115
  }
108
116
  /**
109
117
  * The stderr stream of the child process, if `StdioServerParameters.stderr` was set to "pipe" or "overlapped".
110
118
  *
111
- * This is only available after the process has been started.
119
+ * If stderr piping was requested, a PassThrough stream is returned _immediately_, allowing callers to
120
+ * attach listeners before the start method is invoked. This prevents loss of any early
121
+ * error output emitted by the child process.
112
122
  */
113
123
  get stderr() {
114
124
  var _a, _b;
125
+ if (this._stderrStream) {
126
+ return this._stderrStream;
127
+ }
115
128
  return (_b = (_a = this._process) === null || _a === void 0 ? void 0 : _a.stderr) !== null && _b !== void 0 ? _b : null;
116
129
  }
117
130
  processReadBuffer() {
@@ -1 +1 @@
1
- {"version":3,"file":"stdio.js","sourceRoot":"","sources":["../../../src/client/stdio.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"stdio.js","sourceRoot":"","sources":["../../../src/client/stdio.ts"],"names":[],"mappings":";;;;;;AAiEA,sDAkBC;AAlFD,8DAAgC;AAChC,gEAAmC;AACnC,6CAAkD;AAClD,iDAAkE;AAqClE;;GAEG;AACU,QAAA,0BAA0B,GACrC,sBAAO,CAAC,QAAQ,KAAK,OAAO;IAC1B,CAAC,CAAC;QACE,SAAS;QACT,WAAW;QACX,UAAU;QACV,cAAc;QACd,MAAM;QACN,wBAAwB;QACxB,aAAa;QACb,YAAY;QACZ,MAAM;QACN,UAAU;QACV,aAAa;KACd;IACH,CAAC,CAAC,0DAA0D;QAC1D,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;AAE3D;;GAEG;AACH,SAAgB,qBAAqB;IACnC,MAAM,GAAG,GAA2B,EAAE,CAAC;IAEvC,KAAK,MAAM,GAAG,IAAI,kCAA0B,EAAE,CAAC;QAC7C,MAAM,KAAK,GAAG,sBAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAC/B,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;YACxB,SAAS;QACX,CAAC;QAED,IAAI,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;YAC3B,6CAA6C;YAC7C,SAAS;QACX,CAAC;QAED,GAAG,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;IACnB,CAAC;IAED,OAAO,GAAG,CAAC;AACb,CAAC;AAED;;;;GAIG;AACH,MAAa,oBAAoB;IAW/B,YAAY,MAA6B;QATjC,qBAAgB,GAAoB,IAAI,eAAe,EAAE,CAAC;QAC1D,gBAAW,GAAe,IAAI,qBAAU,EAAE,CAAC;QAE3C,kBAAa,GAAuB,IAAI,CAAC;QAO/C,IAAI,CAAC,aAAa,GAAG,MAAM,CAAC;QAC5B,IAAI,MAAM,CAAC,MAAM,KAAK,MAAM,IAAI,MAAM,CAAC,MAAM,KAAK,YAAY,EAAE,CAAC;YAC/D,IAAI,CAAC,aAAa,GAAG,IAAI,yBAAW,EAAE,CAAC;QACzC,CAAC;IACH,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,KAAK;QACT,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YAClB,MAAM,IAAI,KAAK,CACb,+GAA+G,CAChH,CAAC;QACJ,CAAC;QAED,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;;YACrC,IAAI,CAAC,QAAQ,GAAG,IAAA,qBAAK,EACnB,IAAI,CAAC,aAAa,CAAC,OAAO,EAC1B,MAAA,IAAI,CAAC,aAAa,CAAC,IAAI,mCAAI,EAAE,EAC7B;gBACE,GAAG,EAAE,MAAA,IAAI,CAAC,aAAa,CAAC,GAAG,mCAAI,qBAAqB,EAAE;gBACtD,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAA,IAAI,CAAC,aAAa,CAAC,MAAM,mCAAI,SAAS,CAAC;gBAC/D,KAAK,EAAE,KAAK;gBACZ,MAAM,EAAE,IAAI,CAAC,gBAAgB,CAAC,MAAM;gBACpC,WAAW,EAAE,sBAAO,CAAC,QAAQ,KAAK,OAAO,IAAI,UAAU,EAAE;gBACzD,GAAG,EAAE,IAAI,CAAC,aAAa,CAAC,GAAG;aAC5B,CACF,CAAC;YAEF,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE;;gBAClC,IAAI,KAAK,CAAC,IAAI,KAAK,YAAY,EAAE,CAAC;oBAChC,mCAAmC;oBACnC,MAAA,IAAI,CAAC,OAAO,oDAAI,CAAC;oBACjB,OAAO;gBACT,CAAC;gBAED,MAAM,CAAC,KAAK,CAAC,CAAC;gBACd,MAAA,IAAI,CAAC,OAAO,qDAAG,KAAK,CAAC,CAAC;YACxB,CAAC,CAAC,CAAC;YAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE;gBAC7B,OAAO,EAAE,CAAC;YACZ,CAAC,CAAC,CAAC;YAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE;;gBAClC,IAAI,CAAC,QAAQ,GAAG,SAAS,CAAC;gBAC1B,MAAA,IAAI,CAAC,OAAO,oDAAI,CAAC;YACnB,CAAC,CAAC,CAAC;YAEH,MAAA,IAAI,CAAC,QAAQ,CAAC,KAAK,0CAAE,EAAE,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE;;gBACzC,MAAA,IAAI,CAAC,OAAO,qDAAG,KAAK,CAAC,CAAC;YACxB,CAAC,CAAC,CAAC;YAEH,MAAA,IAAI,CAAC,QAAQ,CAAC,MAAM,0CAAE,EAAE,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE,EAAE;gBACzC,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;gBAC/B,IAAI,CAAC,iBAAiB,EAAE,CAAC;YAC3B,CAAC,CAAC,CAAC;YAEH,MAAA,IAAI,CAAC,QAAQ,CAAC,MAAM,0CAAE,EAAE,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE;;gBAC1C,MAAA,IAAI,CAAC,OAAO,qDAAG,KAAK,CAAC,CAAC;YACxB,CAAC,CAAC,CAAC;YAEH,IAAI,IAAI,CAAC,aAAa,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC;gBAC/C,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;YAChD,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC;IAED;;;;;;OAMG;IACH,IAAI,MAAM;;QACR,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;YACvB,OAAO,IAAI,CAAC,aAAa,CAAC;QAC5B,CAAC;QAED,OAAO,MAAA,MAAA,IAAI,CAAC,QAAQ,0CAAE,MAAM,mCAAI,IAAI,CAAC;IACvC,CAAC;IAEO,iBAAiB;;QACvB,OAAO,IAAI,EAAE,CAAC;YACZ,IAAI,CAAC;gBACH,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW,CAAC,WAAW,EAAE,CAAC;gBAC/C,IAAI,OAAO,KAAK,IAAI,EAAE,CAAC;oBACrB,MAAM;gBACR,CAAC;gBAED,MAAA,IAAI,CAAC,SAAS,qDAAG,OAAO,CAAC,CAAC;YAC5B,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,MAAA,IAAI,CAAC,OAAO,qDAAG,KAAc,CAAC,CAAC;YACjC,CAAC;QACH,CAAC;IACH,CAAC;IAED,KAAK,CAAC,KAAK;QACT,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE,CAAC;QAC9B,IAAI,CAAC,QAAQ,GAAG,SAAS,CAAC;QAC1B,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,CAAC;IAC3B,CAAC;IAED,IAAI,CAAC,OAAuB;QAC1B,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;;YAC7B,IAAI,CAAC,CAAA,MAAA,IAAI,CAAC,QAAQ,0CAAE,KAAK,CAAA,EAAE,CAAC;gBAC1B,MAAM,IAAI,KAAK,CAAC,eAAe,CAAC,CAAC;YACnC,CAAC;YAED,MAAM,IAAI,GAAG,IAAA,2BAAgB,EAAC,OAAO,CAAC,CAAC;YACvC,IAAI,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;gBACpC,OAAO,EAAE,CAAC;YACZ,CAAC;iBAAM,CAAC;gBACN,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;YAC7C,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC;CACF;AAnID,oDAmIC;AAED,SAAS,UAAU;IACjB,OAAO,MAAM,IAAI,sBAAO,CAAC;AAC3B,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=multipleClientsParallel.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"multipleClientsParallel.d.ts","sourceRoot":"","sources":["../../../../src/examples/client/multipleClientsParallel.ts"],"names":[],"mappings":""}
@@ -0,0 +1,134 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const index_js_1 = require("../../client/index.js");
4
+ const streamableHttp_js_1 = require("../../client/streamableHttp.js");
5
+ const types_js_1 = require("../../types.js");
6
+ /**
7
+ * Multiple Clients MCP Example
8
+ *
9
+ * This client demonstrates how to:
10
+ * 1. Create multiple MCP clients in parallel
11
+ * 2. Each client calls a single tool
12
+ * 3. Track notifications from each client independently
13
+ */
14
+ // Command line args processing
15
+ const args = process.argv.slice(2);
16
+ const serverUrl = args[0] || 'http://localhost:3000/mcp';
17
+ async function createAndRunClient(config) {
18
+ console.log(`[${config.id}] Creating client: ${config.name}`);
19
+ const client = new index_js_1.Client({
20
+ name: config.name,
21
+ version: '1.0.0'
22
+ });
23
+ const transport = new streamableHttp_js_1.StreamableHTTPClientTransport(new URL(serverUrl));
24
+ // Set up client-specific error handler
25
+ client.onerror = (error) => {
26
+ console.error(`[${config.id}] Client error:`, error);
27
+ };
28
+ // Set up client-specific notification handler
29
+ client.setNotificationHandler(types_js_1.LoggingMessageNotificationSchema, (notification) => {
30
+ console.log(`[${config.id}] Notification: ${notification.params.data}`);
31
+ });
32
+ try {
33
+ // Connect to the server
34
+ await client.connect(transport);
35
+ console.log(`[${config.id}] Connected to MCP server`);
36
+ // Call the specified tool
37
+ console.log(`[${config.id}] Calling tool: ${config.toolName}`);
38
+ const toolRequest = {
39
+ method: 'tools/call',
40
+ params: {
41
+ name: config.toolName,
42
+ arguments: {
43
+ ...config.toolArguments,
44
+ // Add client ID to arguments for identification in notifications
45
+ caller: config.id
46
+ }
47
+ }
48
+ };
49
+ const result = await client.request(toolRequest, types_js_1.CallToolResultSchema);
50
+ console.log(`[${config.id}] Tool call completed`);
51
+ // Keep the connection open for a bit to receive notifications
52
+ await new Promise(resolve => setTimeout(resolve, 5000));
53
+ // Disconnect
54
+ await transport.close();
55
+ console.log(`[${config.id}] Disconnected from MCP server`);
56
+ return { id: config.id, result };
57
+ }
58
+ catch (error) {
59
+ console.error(`[${config.id}] Error:`, error);
60
+ throw error;
61
+ }
62
+ }
63
+ async function main() {
64
+ console.log('MCP Multiple Clients Example');
65
+ console.log('============================');
66
+ console.log(`Server URL: ${serverUrl}`);
67
+ console.log('');
68
+ try {
69
+ // Define client configurations
70
+ const clientConfigs = [
71
+ {
72
+ id: 'client1',
73
+ name: 'basic-client-1',
74
+ toolName: 'start-notification-stream',
75
+ toolArguments: {
76
+ interval: 3, // 1 second between notifications
77
+ count: 5 // Send 5 notifications
78
+ }
79
+ },
80
+ {
81
+ id: 'client2',
82
+ name: 'basic-client-2',
83
+ toolName: 'start-notification-stream',
84
+ toolArguments: {
85
+ interval: 2, // 2 seconds between notifications
86
+ count: 3 // Send 3 notifications
87
+ }
88
+ },
89
+ {
90
+ id: 'client3',
91
+ name: 'basic-client-3',
92
+ toolName: 'start-notification-stream',
93
+ toolArguments: {
94
+ interval: 1, // 0.5 second between notifications
95
+ count: 8 // Send 8 notifications
96
+ }
97
+ }
98
+ ];
99
+ // Start all clients in parallel
100
+ console.log(`Starting ${clientConfigs.length} clients in parallel...`);
101
+ console.log('');
102
+ const clientPromises = clientConfigs.map(config => createAndRunClient(config));
103
+ const results = await Promise.all(clientPromises);
104
+ // Display results from all clients
105
+ console.log('\n=== Final Results ===');
106
+ results.forEach(({ id, result }) => {
107
+ console.log(`\n[${id}] Tool result:`);
108
+ if (Array.isArray(result.content)) {
109
+ result.content.forEach((item) => {
110
+ if (item.type === 'text' && item.text) {
111
+ console.log(` ${item.text}`);
112
+ }
113
+ else {
114
+ console.log(` ${item.type} content:`, item);
115
+ }
116
+ });
117
+ }
118
+ else {
119
+ console.log(` Unexpected result format:`, result);
120
+ }
121
+ });
122
+ console.log('\n=== All clients completed successfully ===');
123
+ }
124
+ catch (error) {
125
+ console.error('Error running multiple clients:', error);
126
+ process.exit(1);
127
+ }
128
+ }
129
+ // Start the example
130
+ main().catch((error) => {
131
+ console.error('Error running MCP multiple clients example:', error);
132
+ process.exit(1);
133
+ });
134
+ //# sourceMappingURL=multipleClientsParallel.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"multipleClientsParallel.js","sourceRoot":"","sources":["../../../../src/examples/client/multipleClientsParallel.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=parallelToolCallsClient.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parallelToolCallsClient.d.ts","sourceRoot":"","sources":["../../../../src/examples/client/parallelToolCallsClient.ts"],"names":[],"mappings":""}
@@ -0,0 +1,175 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const index_js_1 = require("../../client/index.js");
4
+ const streamableHttp_js_1 = require("../../client/streamableHttp.js");
5
+ const types_js_1 = require("../../types.js");
6
+ /**
7
+ * Parallel Tool Calls MCP Client
8
+ *
9
+ * This client demonstrates how to:
10
+ * 1. Start multiple tool calls in parallel
11
+ * 2. Track notifications from each tool call using a caller parameter
12
+ */
13
+ // Command line args processing
14
+ const args = process.argv.slice(2);
15
+ const serverUrl = args[0] || 'http://localhost:3000/mcp';
16
+ async function main() {
17
+ console.log('MCP Parallel Tool Calls Client');
18
+ console.log('==============================');
19
+ console.log(`Connecting to server at: ${serverUrl}`);
20
+ let client;
21
+ let transport;
22
+ try {
23
+ // Create client with streamable HTTP transport
24
+ client = new index_js_1.Client({
25
+ name: 'parallel-tool-calls-client',
26
+ version: '1.0.0'
27
+ });
28
+ client.onerror = (error) => {
29
+ console.error('Client error:', error);
30
+ };
31
+ // Connect to the server
32
+ transport = new streamableHttp_js_1.StreamableHTTPClientTransport(new URL(serverUrl));
33
+ await client.connect(transport);
34
+ console.log('Successfully connected to MCP server');
35
+ // Set up notification handler with caller identification
36
+ client.setNotificationHandler(types_js_1.LoggingMessageNotificationSchema, (notification) => {
37
+ console.log(`Notification: ${notification.params.data}`);
38
+ });
39
+ console.log("List tools");
40
+ const toolsRequest = await listTools(client);
41
+ console.log("Tools: ", toolsRequest);
42
+ // 2. Start multiple notification tools in parallel
43
+ console.log('\n=== Starting Multiple Notification Streams in Parallel ===');
44
+ const toolResults = await startParallelNotificationTools(client);
45
+ // Log the results from each tool call
46
+ for (const [caller, result] of Object.entries(toolResults)) {
47
+ console.log(`\n=== Tool result for ${caller} ===`);
48
+ result.content.forEach((item) => {
49
+ if (item.type === 'text') {
50
+ console.log(` ${item.text}`);
51
+ }
52
+ else {
53
+ console.log(` ${item.type} content:`, item);
54
+ }
55
+ });
56
+ }
57
+ // 3. Wait for all notifications (10 seconds)
58
+ console.log('\n=== Waiting for all notifications ===');
59
+ await new Promise(resolve => setTimeout(resolve, 10000));
60
+ // 4. Disconnect
61
+ console.log('\n=== Disconnecting ===');
62
+ await transport.close();
63
+ console.log('Disconnected from MCP server');
64
+ }
65
+ catch (error) {
66
+ console.error('Error running client:', error);
67
+ process.exit(1);
68
+ }
69
+ }
70
+ /**
71
+ * List available tools on the server
72
+ */
73
+ async function listTools(client) {
74
+ try {
75
+ const toolsRequest = {
76
+ method: 'tools/list',
77
+ params: {}
78
+ };
79
+ const toolsResult = await client.request(toolsRequest, types_js_1.ListToolsResultSchema);
80
+ console.log('Available tools:');
81
+ if (toolsResult.tools.length === 0) {
82
+ console.log(' No tools available');
83
+ }
84
+ else {
85
+ for (const tool of toolsResult.tools) {
86
+ console.log(` - ${tool.name}: ${tool.description}`);
87
+ }
88
+ }
89
+ }
90
+ catch (error) {
91
+ console.log(`Tools not supported by this server: ${error}`);
92
+ }
93
+ }
94
+ /**
95
+ * Start multiple notification tools in parallel with different configurations
96
+ * Each tool call includes a caller parameter to identify its notifications
97
+ */
98
+ async function startParallelNotificationTools(client) {
99
+ try {
100
+ // Define multiple tool calls with different configurations
101
+ const toolCalls = [
102
+ {
103
+ caller: 'fast-notifier',
104
+ request: {
105
+ method: 'tools/call',
106
+ params: {
107
+ name: 'start-notification-stream',
108
+ arguments: {
109
+ interval: 2, // 0.5 second between notifications
110
+ count: 10, // Send 10 notifications
111
+ caller: 'fast-notifier' // Identify this tool call
112
+ }
113
+ }
114
+ }
115
+ },
116
+ {
117
+ caller: 'slow-notifier',
118
+ request: {
119
+ method: 'tools/call',
120
+ params: {
121
+ name: 'start-notification-stream',
122
+ arguments: {
123
+ interval: 5, // 2 seconds between notifications
124
+ count: 5, // Send 5 notifications
125
+ caller: 'slow-notifier' // Identify this tool call
126
+ }
127
+ }
128
+ }
129
+ },
130
+ {
131
+ caller: 'burst-notifier',
132
+ request: {
133
+ method: 'tools/call',
134
+ params: {
135
+ name: 'start-notification-stream',
136
+ arguments: {
137
+ interval: 1, // 0.1 second between notifications
138
+ count: 3, // Send just 3 notifications
139
+ caller: 'burst-notifier' // Identify this tool call
140
+ }
141
+ }
142
+ }
143
+ }
144
+ ];
145
+ console.log(`Starting ${toolCalls.length} notification tools in parallel...`);
146
+ // Start all tool calls in parallel
147
+ const toolPromises = toolCalls.map(({ caller, request }) => {
148
+ console.log(`Starting tool call for ${caller}...`);
149
+ return client.request(request, types_js_1.CallToolResultSchema)
150
+ .then(result => ({ caller, result }))
151
+ .catch(error => {
152
+ console.error(`Error in tool call for ${caller}:`, error);
153
+ throw error;
154
+ });
155
+ });
156
+ // Wait for all tool calls to complete
157
+ const results = await Promise.all(toolPromises);
158
+ // Organize results by caller
159
+ const resultsByTool = {};
160
+ results.forEach(({ caller, result }) => {
161
+ resultsByTool[caller] = result;
162
+ });
163
+ return resultsByTool;
164
+ }
165
+ catch (error) {
166
+ console.error(`Error starting parallel notification tools:`, error);
167
+ throw error;
168
+ }
169
+ }
170
+ // Start the client
171
+ main().catch((error) => {
172
+ console.error('Error running MCP client:', error);
173
+ process.exit(1);
174
+ });
175
+ //# sourceMappingURL=parallelToolCallsClient.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parallelToolCallsClient.js","sourceRoot":"","sources":["../../../../src/examples/client/parallelToolCallsClient.ts"],"names":[],"mappings":"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"}