mcp-use 1.2.2-canary.0 → 1.2.2-canary.1

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 (152) hide show
  1. package/dist/.tsbuildinfo +1 -1
  2. package/dist/{chunk-VPPILX7B.js → chunk-3RJENWH4.js} +15 -6
  3. package/dist/{chunk-UVUM35MV.js → chunk-7UX634PO.js} +307 -112
  4. package/dist/{chunk-CPV4QNHD.js → chunk-KLIBVJ3Z.js} +145 -79
  5. package/dist/{chunk-EYAIJPBH.js → chunk-MZLETWQQ.js} +55 -17
  6. package/dist/{chunk-C3SRZK7H.js → chunk-RSGKBEHH.js} +144 -72
  7. package/dist/index.cjs +719 -300
  8. package/dist/index.d.ts +24 -24
  9. package/dist/index.d.ts.map +1 -1
  10. package/dist/index.js +86 -28
  11. package/dist/{langfuse-MO3AMDBE.js → langfuse-LCJ6VJEP.js} +2 -2
  12. package/dist/src/adapters/base.d.ts +2 -2
  13. package/dist/src/adapters/base.d.ts.map +1 -1
  14. package/dist/src/adapters/index.d.ts +2 -2
  15. package/dist/src/adapters/index.d.ts.map +1 -1
  16. package/dist/src/adapters/langchain_adapter.d.ts +4 -4
  17. package/dist/src/adapters/langchain_adapter.d.ts.map +1 -1
  18. package/dist/src/agents/base.d.ts +1 -1
  19. package/dist/src/agents/base.d.ts.map +1 -1
  20. package/dist/src/agents/index.d.ts +3 -3
  21. package/dist/src/agents/index.d.ts.map +1 -1
  22. package/dist/src/agents/mcp_agent.d.ts +12 -12
  23. package/dist/src/agents/mcp_agent.d.ts.map +1 -1
  24. package/dist/src/agents/prompts/system_prompt_builder.d.ts +2 -2
  25. package/dist/src/agents/prompts/system_prompt_builder.d.ts.map +1 -1
  26. package/dist/src/agents/prompts/templates.d.ts.map +1 -1
  27. package/dist/src/agents/remote.d.ts +2 -2
  28. package/dist/src/agents/remote.d.ts.map +1 -1
  29. package/dist/src/agents/types.d.ts +1 -1
  30. package/dist/src/agents/types.d.ts.map +1 -1
  31. package/dist/src/agents/utils/ai_sdk.d.ts +1 -1
  32. package/dist/src/agents/utils/ai_sdk.d.ts.map +1 -1
  33. package/dist/src/agents/utils/index.d.ts +1 -1
  34. package/dist/src/agents/utils/index.d.ts.map +1 -1
  35. package/dist/src/auth/browser-provider.d.ts +2 -2
  36. package/dist/src/auth/browser-provider.d.ts.map +1 -1
  37. package/dist/src/auth/callback.d.ts.map +1 -1
  38. package/dist/src/auth/index.d.ts +3 -3
  39. package/dist/src/auth/index.d.ts.map +1 -1
  40. package/dist/src/auth/types.d.ts +1 -1
  41. package/dist/src/auth/types.d.ts.map +1 -1
  42. package/dist/src/browser.cjs +508 -201
  43. package/dist/src/browser.d.ts +17 -17
  44. package/dist/src/browser.d.ts.map +1 -1
  45. package/dist/src/browser.js +11 -5
  46. package/dist/src/client/base.d.ts +2 -2
  47. package/dist/src/client/base.d.ts.map +1 -1
  48. package/dist/src/client/browser.d.ts +2 -2
  49. package/dist/src/client/browser.d.ts.map +1 -1
  50. package/dist/src/client.d.ts +2 -2
  51. package/dist/src/client.d.ts.map +1 -1
  52. package/dist/src/config.d.ts +1 -1
  53. package/dist/src/config.d.ts.map +1 -1
  54. package/dist/src/connectors/base.d.ts +5 -5
  55. package/dist/src/connectors/base.d.ts.map +1 -1
  56. package/dist/src/connectors/http.d.ts +3 -3
  57. package/dist/src/connectors/http.d.ts.map +1 -1
  58. package/dist/src/connectors/index.d.ts +4 -4
  59. package/dist/src/connectors/index.d.ts.map +1 -1
  60. package/dist/src/connectors/stdio.d.ts +3 -3
  61. package/dist/src/connectors/stdio.d.ts.map +1 -1
  62. package/dist/src/connectors/websocket.d.ts +3 -3
  63. package/dist/src/connectors/websocket.d.ts.map +1 -1
  64. package/dist/src/logging.d.ts +4 -4
  65. package/dist/src/logging.d.ts.map +1 -1
  66. package/dist/src/managers/index.d.ts +2 -2
  67. package/dist/src/managers/index.d.ts.map +1 -1
  68. package/dist/src/managers/server_manager.d.ts +4 -4
  69. package/dist/src/managers/server_manager.d.ts.map +1 -1
  70. package/dist/src/managers/tools/acquire_active_mcp_server.d.ts +3 -3
  71. package/dist/src/managers/tools/acquire_active_mcp_server.d.ts.map +1 -1
  72. package/dist/src/managers/tools/add_server_from_config.d.ts +3 -3
  73. package/dist/src/managers/tools/add_server_from_config.d.ts.map +1 -1
  74. package/dist/src/managers/tools/base.d.ts +6 -6
  75. package/dist/src/managers/tools/base.d.ts.map +1 -1
  76. package/dist/src/managers/tools/connect_mcp_server.d.ts +4 -4
  77. package/dist/src/managers/tools/connect_mcp_server.d.ts.map +1 -1
  78. package/dist/src/managers/tools/index.d.ts +5 -5
  79. package/dist/src/managers/tools/index.d.ts.map +1 -1
  80. package/dist/src/managers/tools/list_mcp_servers.d.ts +3 -3
  81. package/dist/src/managers/tools/list_mcp_servers.d.ts.map +1 -1
  82. package/dist/src/managers/tools/release_mcp_server_connection.d.ts +3 -3
  83. package/dist/src/managers/tools/release_mcp_server_connection.d.ts.map +1 -1
  84. package/dist/src/managers/types.d.ts +3 -3
  85. package/dist/src/managers/types.d.ts.map +1 -1
  86. package/dist/src/oauth-helper.d.ts.map +1 -1
  87. package/dist/src/observability/index.d.ts +3 -3
  88. package/dist/src/observability/index.d.ts.map +1 -1
  89. package/dist/src/observability/langfuse.d.ts +1 -1
  90. package/dist/src/observability/langfuse.d.ts.map +1 -1
  91. package/dist/src/observability/manager.d.ts +1 -1
  92. package/dist/src/observability/manager.d.ts.map +1 -1
  93. package/dist/src/observability/types.d.ts +1 -1
  94. package/dist/src/observability/types.d.ts.map +1 -1
  95. package/dist/src/react/index.cjs +295 -154
  96. package/dist/src/react/index.d.ts +6 -6
  97. package/dist/src/react/index.d.ts.map +1 -1
  98. package/dist/src/react/index.js +3 -3
  99. package/dist/src/react/types.d.ts +6 -6
  100. package/dist/src/react/types.d.ts.map +1 -1
  101. package/dist/src/react/useMcp.d.ts +1 -1
  102. package/dist/src/react/useMcp.d.ts.map +1 -1
  103. package/dist/src/react/useWidget.d.ts +5 -2
  104. package/dist/src/react/useWidget.d.ts.map +1 -1
  105. package/dist/src/react/widget-types.d.ts +3 -3
  106. package/dist/src/react/widget-types.d.ts.map +1 -1
  107. package/dist/src/server/adapters/mcp-ui-adapter.d.ts +3 -3
  108. package/dist/src/server/adapters/mcp-ui-adapter.d.ts.map +1 -1
  109. package/dist/src/server/index.cjs +170 -50
  110. package/dist/src/server/index.d.ts +4 -4
  111. package/dist/src/server/index.d.ts.map +1 -1
  112. package/dist/src/server/index.js +174 -51
  113. package/dist/src/server/logging.d.ts +1 -1
  114. package/dist/src/server/logging.d.ts.map +1 -1
  115. package/dist/src/server/mcp-server.d.ts +29 -29
  116. package/dist/src/server/mcp-server.d.ts.map +1 -1
  117. package/dist/src/server/types/common.d.ts +2 -2
  118. package/dist/src/server/types/common.d.ts.map +1 -1
  119. package/dist/src/server/types/index.d.ts +4 -4
  120. package/dist/src/server/types/index.d.ts.map +1 -1
  121. package/dist/src/server/types/prompt.d.ts +2 -2
  122. package/dist/src/server/types/prompt.d.ts.map +1 -1
  123. package/dist/src/server/types/resource.d.ts +24 -24
  124. package/dist/src/server/types/resource.d.ts.map +1 -1
  125. package/dist/src/server/types/tool.d.ts +3 -3
  126. package/dist/src/server/types/tool.d.ts.map +1 -1
  127. package/dist/src/server/types/widget.d.ts +1 -1
  128. package/dist/src/server/types.d.ts +1 -1
  129. package/dist/src/server/types.d.ts.map +1 -1
  130. package/dist/src/session.d.ts +1 -1
  131. package/dist/src/session.d.ts.map +1 -1
  132. package/dist/src/task_managers/base.d.ts.map +1 -1
  133. package/dist/src/task_managers/index.d.ts +5 -5
  134. package/dist/src/task_managers/index.d.ts.map +1 -1
  135. package/dist/src/task_managers/sse.d.ts +3 -3
  136. package/dist/src/task_managers/sse.d.ts.map +1 -1
  137. package/dist/src/task_managers/stdio.d.ts +4 -4
  138. package/dist/src/task_managers/stdio.d.ts.map +1 -1
  139. package/dist/src/task_managers/streamable_http.d.ts +3 -3
  140. package/dist/src/task_managers/streamable_http.d.ts.map +1 -1
  141. package/dist/src/task_managers/websocket.d.ts +2 -2
  142. package/dist/src/task_managers/websocket.d.ts.map +1 -1
  143. package/dist/src/telemetry/events.d.ts.map +1 -1
  144. package/dist/src/telemetry/index.d.ts +4 -4
  145. package/dist/src/telemetry/index.d.ts.map +1 -1
  146. package/dist/src/telemetry/telemetry.d.ts +1 -1
  147. package/dist/src/telemetry/telemetry.d.ts.map +1 -1
  148. package/dist/src/telemetry/utils.d.ts +1 -1
  149. package/dist/src/telemetry/utils.d.ts.map +1 -1
  150. package/dist/tsup.config.d.ts.map +1 -1
  151. package/dist/vitest.config.d.ts.map +1 -1
  152. package/package.json +3 -3
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  logger
3
- } from "./chunk-VPPILX7B.js";
3
+ } from "./chunk-3RJENWH4.js";
4
4
  import {
5
5
  __name
6
6
  } from "./chunk-SHUYVCID.js";
@@ -152,9 +152,14 @@ var LangChainAdapter = class extends BaseAdapter {
152
152
  // Blank is acceptable but discouraged.
153
153
  schema: argsSchema,
154
154
  func: /* @__PURE__ */ __name(async (input) => {
155
- logger.debug(`MCP tool "${mcpTool.name}" received input: ${JSON.stringify(input)}`);
155
+ logger.debug(
156
+ `MCP tool "${mcpTool.name}" received input: ${JSON.stringify(input)}`
157
+ );
156
158
  try {
157
- const result = await connector.callTool(mcpTool.name, input);
159
+ const result = await connector.callTool(
160
+ mcpTool.name,
161
+ input
162
+ );
158
163
  return JSON.stringify(result);
159
164
  } catch (err) {
160
165
  logger.error(`Error executing MCP tool: ${err.message}`);
@@ -305,7 +310,9 @@ var ConnectMCPServerTool = class extends MCPServerTool {
305
310
  const numTools = serverTools.length;
306
311
  return `Connected to MCP server '${serverName}'. ${numTools} tools are now available.`;
307
312
  } catch (error) {
308
- logger.error(`Error connecting to server '${serverName}': ${String(error)}`);
313
+ logger.error(
314
+ `Error connecting to server '${serverName}': ${String(error)}`
315
+ );
309
316
  return `Failed to connect to server '${serverName}': ${String(error)}`;
310
317
  }
311
318
  }
@@ -340,7 +347,9 @@ var ListMCPServersTool = class extends MCPServerTool {
340
347
  outputLines.push(`${numberOfTools} tools available for this server
341
348
  `);
342
349
  } catch (error) {
343
- logger.error(`Unexpected error listing tools for server '${serverName}': ${String(error)}`);
350
+ logger.error(
351
+ `Unexpected error listing tools for server '${serverName}': ${String(error)}`
352
+ );
344
353
  }
345
354
  }
346
355
  return outputLines.join("\n");
@@ -402,10 +411,10 @@ var ServerManager = class {
402
411
  }
403
412
  const tableData = allServerNames.map((name) => ({
404
413
  "Server Name": name,
405
- "Connected": activeSessionNames.includes(name) ? "\u2705" : "\u274C",
406
- "Initialized": this.initializedServers[name] ? "\u2705" : "\u274C",
414
+ Connected: activeSessionNames.includes(name) ? "\u2705" : "\u274C",
415
+ Initialized: this.initializedServers[name] ? "\u2705" : "\u274C",
407
416
  "Tool Count": this.serverTools[name]?.length ?? 0,
408
- "Active": this.activeServer === name ? "\u2705" : "\u274C"
417
+ Active: this.activeServer === name ? "\u2705" : "\u274C"
409
418
  }));
410
419
  logger.info(`Server Manager State: [${context}]`);
411
420
  console.table(tableData);
@@ -422,13 +431,19 @@ var ServerManager = class {
422
431
  try {
423
432
  let session = null;
424
433
  session = this.client.getSession(serverName);
425
- logger.debug(`Using existing session for server '${serverName}' to prefetch tools.`);
434
+ logger.debug(
435
+ `Using existing session for server '${serverName}' to prefetch tools.`
436
+ );
426
437
  if (!session) {
427
438
  session = await this.client.createSession(serverName).catch((createSessionError) => {
428
- logger.warn(`Could not create session for '${serverName}' during prefetch: ${createSessionError}`);
439
+ logger.warn(
440
+ `Could not create session for '${serverName}' during prefetch: ${createSessionError}`
441
+ );
429
442
  return null;
430
443
  });
431
- logger.debug(`Temporarily created session for '${serverName}' to prefetch tools.`);
444
+ logger.debug(
445
+ `Temporarily created session for '${serverName}' to prefetch tools.`
446
+ );
432
447
  }
433
448
  if (session) {
434
449
  const connector = session.connector;
@@ -436,7 +451,9 @@ var ServerManager = class {
436
451
  try {
437
452
  tools = await this.adapter.createToolsFromConnectors([connector]);
438
453
  } catch (toolFetchError) {
439
- logger.error(`Failed to create tools from connector for server '${serverName}': ${toolFetchError}`);
454
+ logger.error(
455
+ `Failed to create tools from connector for server '${serverName}': ${toolFetchError}`
456
+ );
440
457
  continue;
441
458
  }
442
459
  const cachedTools = this.serverTools[serverName];
@@ -444,7 +461,9 @@ var ServerManager = class {
444
461
  if (toolsChanged) {
445
462
  this.serverTools[serverName] = tools;
446
463
  this.initializedServers[serverName] = true;
447
- logger.debug(`Prefetched ${tools.length} tools for server '${serverName}'.`);
464
+ logger.debug(
465
+ `Prefetched ${tools.length} tools for server '${serverName}'.`
466
+ );
448
467
  } else {
449
468
  logger.debug(
450
469
  `Tools for server '${serverName}' unchanged, using cached version.`
@@ -452,7 +471,9 @@ var ServerManager = class {
452
471
  }
453
472
  }
454
473
  } catch (outerError) {
455
- logger.error(`Error prefetching tools for server '${serverName}': ${outerError}`);
474
+ logger.error(
475
+ `Error prefetching tools for server '${serverName}': ${outerError}`
476
+ );
456
477
  }
457
478
  }
458
479
  }
@@ -510,11 +531,18 @@ var ObservabilityManager = class {
510
531
  return;
511
532
  }
512
533
  try {
513
- const { langfuseHandler: langfuseHandler2, langfuseInitPromise: langfuseInitPromise2 } = await import("./langfuse-MO3AMDBE.js");
534
+ const { langfuseHandler: langfuseHandler2, langfuseInitPromise: langfuseInitPromise2 } = await import("./langfuse-LCJ6VJEP.js");
514
535
  if (this.agentId || this.metadata || this.metadataProvider || this.tagsProvider) {
515
- const { initializeLangfuse } = await import("./langfuse-MO3AMDBE.js");
516
- await initializeLangfuse(this.agentId, this.metadata, this.metadataProvider, this.tagsProvider);
517
- logger.debug(`ObservabilityManager: Reinitialized Langfuse with agent ID: ${this.agentId}, metadata: ${JSON.stringify(this.metadata)}`);
536
+ const { initializeLangfuse } = await import("./langfuse-LCJ6VJEP.js");
537
+ await initializeLangfuse(
538
+ this.agentId,
539
+ this.metadata,
540
+ this.metadataProvider,
541
+ this.tagsProvider
542
+ );
543
+ logger.debug(
544
+ `ObservabilityManager: Reinitialized Langfuse with agent ID: ${this.agentId}, metadata: ${JSON.stringify(this.metadata)}`
545
+ );
518
546
  } else {
519
547
  const initPromise = langfuseInitPromise2();
520
548
  if (initPromise) {
@@ -538,16 +566,22 @@ var ObservabilityManager = class {
538
566
  */
539
567
  async getCallbacks() {
540
568
  if (!this.observe) {
541
- logger.debug("ObservabilityManager: Observability disabled via observe=false");
569
+ logger.debug(
570
+ "ObservabilityManager: Observability disabled via observe=false"
571
+ );
542
572
  return [];
543
573
  }
544
574
  if (this.customCallbacks) {
545
- logger.debug(`ObservabilityManager: Using ${this.customCallbacks.length} custom callbacks`);
575
+ logger.debug(
576
+ `ObservabilityManager: Using ${this.customCallbacks.length} custom callbacks`
577
+ );
546
578
  return this.customCallbacks;
547
579
  }
548
580
  await this.collectAvailableHandlers();
549
581
  if (this.availableHandlers.length > 0) {
550
- logger.debug(`ObservabilityManager: Using ${this.availableHandlers.length} handlers`);
582
+ logger.debug(
583
+ `ObservabilityManager: Using ${this.availableHandlers.length} handlers`
584
+ );
551
585
  } else {
552
586
  logger.debug("ObservabilityManager: No callbacks configured");
553
587
  }
@@ -604,7 +638,9 @@ var ObservabilityManager = class {
604
638
  this.customCallbacks = [];
605
639
  }
606
640
  this.customCallbacks.push(callback);
607
- logger.debug(`ObservabilityManager: Added custom callback: ${callback.constructor.name}`);
641
+ logger.debug(
642
+ `ObservabilityManager: Added custom callback: ${callback.constructor.name}`
643
+ );
608
644
  }
609
645
  /**
610
646
  * Clear all custom callbacks.
@@ -735,7 +771,15 @@ function getModelName(llm) {
735
771
  if ("_identifyingParams" in llm) {
736
772
  const identifyingParams = llm._identifyingParams;
737
773
  if (typeof identifyingParams === "object" && identifyingParams !== null) {
738
- for (const key of ["model", "modelName", "model_name", "modelId", "model_id", "deploymentName", "deployment_name"]) {
774
+ for (const key of [
775
+ "model",
776
+ "modelName",
777
+ "model_name",
778
+ "modelId",
779
+ "model_id",
780
+ "deploymentName",
781
+ "deployment_name"
782
+ ]) {
739
783
  if (key in identifyingParams) {
740
784
  return String(identifyingParams[key]);
741
785
  }
@@ -826,8 +870,16 @@ var Telemetry = class _Telemetry {
826
870
  __name(this, "Telemetry");
827
871
  }
828
872
  static instance = null;
829
- USER_ID_PATH = path2.join(getCacheHome(), "mcp_use_3", "telemetry_user_id");
830
- VERSION_DOWNLOAD_PATH = path2.join(getCacheHome(), "mcp_use", "download_version");
873
+ USER_ID_PATH = path2.join(
874
+ getCacheHome(),
875
+ "mcp_use_3",
876
+ "telemetry_user_id"
877
+ );
878
+ VERSION_DOWNLOAD_PATH = path2.join(
879
+ getCacheHome(),
880
+ "mcp_use",
881
+ "download_version"
882
+ );
831
883
  PROJECT_API_KEY = "phc_lyTtbYwvkdSbrcMQNPiKiiRWrrM1seyKIMjycSvItEI";
832
884
  HOST = "https://eu.i.posthog.com";
833
885
  SCARF_GATEWAY_URL = "https://mcpuse.gateway.scarf.sh/events-ts";
@@ -847,17 +899,18 @@ var Telemetry = class _Telemetry {
847
899
  } else if (!isNodeJS) {
848
900
  this._posthogClient = null;
849
901
  this._scarfClient = null;
850
- logger.debug("Telemetry disabled - non-Node.js environment detected (e.g., Cloudflare Workers)");
902
+ logger.debug(
903
+ "Telemetry disabled - non-Node.js environment detected (e.g., Cloudflare Workers)"
904
+ );
851
905
  } else {
852
- logger.info("Anonymized telemetry enabled. Set MCP_USE_ANONYMIZED_TELEMETRY=false to disable.");
906
+ logger.info(
907
+ "Anonymized telemetry enabled. Set MCP_USE_ANONYMIZED_TELEMETRY=false to disable."
908
+ );
853
909
  try {
854
- this._posthogClient = new PostHog(
855
- this.PROJECT_API_KEY,
856
- {
857
- host: this.HOST,
858
- disableGeoip: false
859
- }
860
- );
910
+ this._posthogClient = new PostHog(this.PROJECT_API_KEY, {
911
+ host: this.HOST,
912
+ disableGeoip: false
913
+ });
861
914
  } catch (e) {
862
915
  logger.warn(`Failed to initialize PostHog telemetry: ${e}`);
863
916
  this._posthogClient = null;
@@ -967,7 +1020,9 @@ var Telemetry = class _Telemetry {
967
1020
  if (!fs2.existsSync(this.VERSION_DOWNLOAD_PATH)) {
968
1021
  shouldTrack = true;
969
1022
  firstDownload = true;
970
- fs2.mkdirSync(path2.dirname(this.VERSION_DOWNLOAD_PATH), { recursive: true });
1023
+ fs2.mkdirSync(path2.dirname(this.VERSION_DOWNLOAD_PATH), {
1024
+ recursive: true
1025
+ });
971
1026
  fs2.writeFileSync(this.VERSION_DOWNLOAD_PATH, currentVersion);
972
1027
  } else {
973
1028
  const savedVersion = fs2.readFileSync(this.VERSION_DOWNLOAD_PATH, "utf-8").trim();
@@ -978,7 +1033,9 @@ var Telemetry = class _Telemetry {
978
1033
  }
979
1034
  }
980
1035
  if (shouldTrack) {
981
- logger.debug(`Tracking package download event with properties: ${JSON.stringify(properties)}`);
1036
+ logger.debug(
1037
+ `Tracking package download event with properties: ${JSON.stringify(properties)}`
1038
+ );
982
1039
  const eventProperties = { ...properties || {} };
983
1040
  eventProperties.mcp_use_version = currentVersion;
984
1041
  eventProperties.user_id = this.userId;
@@ -1115,7 +1172,9 @@ var RemoteAgent = class {
1115
1172
  `Agent not found: Agent '${this.agentId}' does not exist or you don't have access to it. Please verify the agent ID and ensure it exists in your account.`
1116
1173
  );
1117
1174
  }
1118
- throw new Error(`Failed to create chat session: ${statusCode} - ${responseText}`);
1175
+ throw new Error(
1176
+ `Failed to create chat session: ${statusCode} - ${responseText}`
1177
+ );
1119
1178
  }
1120
1179
  const chatData = await response.json();
1121
1180
  const chatId = chatData.id;
@@ -1188,8 +1247,12 @@ var RemoteAgent = class {
1188
1247
  "Internal server error occurred during agent execution. Please try again later or contact support if the issue persists."
1189
1248
  );
1190
1249
  } else {
1191
- logger.error(`\u274C Remote execution failed with status ${statusCode}: ${responseText}`);
1192
- throw new Error(`Remote agent execution failed: ${statusCode} - ${responseText}`);
1250
+ logger.error(
1251
+ `\u274C Remote execution failed with status ${statusCode}: ${responseText}`
1252
+ );
1253
+ throw new Error(
1254
+ `Remote agent execution failed: ${statusCode} - ${responseText}`
1255
+ );
1193
1256
  }
1194
1257
  }
1195
1258
  const result = await response.json();
@@ -1240,7 +1303,13 @@ Raw error: ${result}`
1240
1303
  }
1241
1304
  // eslint-disable-next-line require-yield
1242
1305
  async *stream(query, maxSteps, manageConnector, externalHistory, outputSchema) {
1243
- const result = await this.run(query, maxSteps, manageConnector, externalHistory, outputSchema);
1306
+ const result = await this.run(
1307
+ query,
1308
+ maxSteps,
1309
+ manageConnector,
1310
+ externalHistory,
1311
+ outputSchema
1312
+ );
1244
1313
  return result;
1245
1314
  }
1246
1315
  async close() {
@@ -1249,7 +1318,14 @@ Raw error: ${result}`
1249
1318
  };
1250
1319
 
1251
1320
  // src/agents/mcp_agent.ts
1252
- import { createAgent, modelCallLimitMiddleware, SystemMessage as SystemMessage2, AIMessage, HumanMessage, ToolMessage } from "langchain";
1321
+ import {
1322
+ createAgent,
1323
+ modelCallLimitMiddleware,
1324
+ SystemMessage as SystemMessage2,
1325
+ AIMessage,
1326
+ HumanMessage,
1327
+ ToolMessage
1328
+ } from "langchain";
1253
1329
  import { zodToJsonSchema as zodToJsonSchema2 } from "zod-to-json-schema";
1254
1330
 
1255
1331
  // src/agents/prompts/system_prompt_builder.ts
@@ -1258,8 +1334,7 @@ function generateToolDescriptions(tools, disallowedTools) {
1258
1334
  const disallowedSet = new Set(disallowedTools ?? []);
1259
1335
  const descriptions = [];
1260
1336
  for (const tool of tools) {
1261
- if (disallowedSet.has(tool.name))
1262
- continue;
1337
+ if (disallowedSet.has(tool.name)) continue;
1263
1338
  const escaped = tool.description.replace(/\{/g, "{{").replace(/\}/g, "}}");
1264
1339
  descriptions.push(`- ${tool.name}: ${escaped}`);
1265
1340
  }
@@ -1272,7 +1347,9 @@ function buildSystemPromptContent(template, toolDescriptionLines, additionalInst
1272
1347
  if (template.includes("{tool_descriptions}")) {
1273
1348
  content = template.replace("{tool_descriptions}", block);
1274
1349
  } else {
1275
- console.warn("`{tool_descriptions}` placeholder not found; appending at end.");
1350
+ console.warn(
1351
+ "`{tool_descriptions}` placeholder not found; appending at end."
1352
+ );
1276
1353
  content = `${template}
1277
1354
 
1278
1355
  Available tools:
@@ -1410,7 +1487,9 @@ var MCPAgent = class {
1410
1487
  return;
1411
1488
  }
1412
1489
  if (!options.llm) {
1413
- throw new Error("llm is required for local execution. For remote execution, provide agentId instead.");
1490
+ throw new Error(
1491
+ "llm is required for local execution. For remote execution, provide agentId instead."
1492
+ );
1414
1493
  }
1415
1494
  this.llm = options.llm;
1416
1495
  this.client = options.client;
@@ -1428,11 +1507,15 @@ var MCPAgent = class {
1428
1507
  this.verbose = options.verbose ?? false;
1429
1508
  this.observe = options.observe ?? true;
1430
1509
  if (!this.client && this.connectors.length === 0) {
1431
- throw new Error("Either 'client' or at least one 'connector' must be provided.");
1510
+ throw new Error(
1511
+ "Either 'client' or at least one 'connector' must be provided."
1512
+ );
1432
1513
  }
1433
1514
  if (this.useServerManager) {
1434
1515
  if (!this.client) {
1435
- throw new Error("'client' must be provided when 'useServerManager' is true.");
1516
+ throw new Error(
1517
+ "'client' must be provided when 'useServerManager' is true."
1518
+ );
1436
1519
  }
1437
1520
  this.adapter = options.adapter ?? new LangChainAdapter(this.disallowedTools);
1438
1521
  this.serverManager = options.serverManagerFactory?.(this.client) ?? new ServerManager(this.client, this.adapter);
@@ -1492,25 +1575,37 @@ var MCPAgent = class {
1492
1575
  } else {
1493
1576
  if (this.client) {
1494
1577
  this.sessions = this.client.getAllActiveSessions();
1495
- logger.info(`\u{1F50C} Found ${Object.keys(this.sessions).length} existing sessions`);
1578
+ logger.info(
1579
+ `\u{1F50C} Found ${Object.keys(this.sessions).length} existing sessions`
1580
+ );
1496
1581
  if (Object.keys(this.sessions).length === 0) {
1497
1582
  logger.info("\u{1F504} No active sessions found, creating new ones...");
1498
1583
  this.sessions = await this.client.createAllSessions();
1499
- logger.info(`\u2705 Created ${Object.keys(this.sessions).length} new sessions`);
1584
+ logger.info(
1585
+ `\u2705 Created ${Object.keys(this.sessions).length} new sessions`
1586
+ );
1500
1587
  }
1501
1588
  this._tools = await LangChainAdapter.createTools(this.client);
1502
1589
  this._tools.push(...this.additionalTools);
1503
- logger.info(`\u{1F6E0}\uFE0F Created ${this._tools.length} LangChain tools from client`);
1590
+ logger.info(
1591
+ `\u{1F6E0}\uFE0F Created ${this._tools.length} LangChain tools from client`
1592
+ );
1504
1593
  } else {
1505
- logger.info(`\u{1F517} Connecting to ${this.connectors.length} direct connectors...`);
1594
+ logger.info(
1595
+ `\u{1F517} Connecting to ${this.connectors.length} direct connectors...`
1596
+ );
1506
1597
  for (const connector of this.connectors) {
1507
1598
  if (!connector.isClientConnected) {
1508
1599
  await connector.connect();
1509
1600
  }
1510
1601
  }
1511
- this._tools = await this.adapter.createToolsFromConnectors(this.connectors);
1602
+ this._tools = await this.adapter.createToolsFromConnectors(
1603
+ this.connectors
1604
+ );
1512
1605
  this._tools.push(...this.additionalTools);
1513
- logger.info(`\u{1F6E0}\uFE0F Created ${this._tools.length} LangChain tools from connectors`);
1606
+ logger.info(
1607
+ `\u{1F6E0}\uFE0F Created ${this._tools.length} LangChain tools from connectors`
1608
+ );
1514
1609
  }
1515
1610
  logger.info(`\u{1F9F0} Found ${this._tools.length} tools across all connectors`);
1516
1611
  await this.createSystemMessageFromTools(this._tools);
@@ -1520,7 +1615,9 @@ var MCPAgent = class {
1520
1615
  const mcpServerInfo = this.getMCPServerInfo();
1521
1616
  if (Object.keys(mcpServerInfo).length > 0) {
1522
1617
  this.setMetadata(mcpServerInfo);
1523
- logger.debug(`MCP server info added to metadata: ${JSON.stringify(mcpServerInfo)}`);
1618
+ logger.debug(
1619
+ `MCP server info added to metadata: ${JSON.stringify(mcpServerInfo)}`
1620
+ );
1524
1621
  }
1525
1622
  logger.info("\u2728 Agent initialization complete");
1526
1623
  }
@@ -1538,7 +1635,9 @@ var MCPAgent = class {
1538
1635
  if (this.memoryEnabled) {
1539
1636
  this.conversationHistory = [
1540
1637
  this.systemMessage,
1541
- ...this.conversationHistory.filter((m) => !(m instanceof SystemMessage2))
1638
+ ...this.conversationHistory.filter(
1639
+ (m) => !(m instanceof SystemMessage2)
1640
+ )
1542
1641
  ];
1543
1642
  }
1544
1643
  }
@@ -1556,7 +1655,9 @@ var MCPAgent = class {
1556
1655
  systemPrompt: systemContent,
1557
1656
  middleware
1558
1657
  });
1559
- logger.debug(`Created agent with max_steps=${this.maxSteps} (via ModelCallLimitMiddleware) and ${this.callbacks.length} callbacks`);
1658
+ logger.debug(
1659
+ `Created agent with max_steps=${this.maxSteps} (via ModelCallLimitMiddleware) and ${this.callbacks.length} callbacks`
1660
+ );
1560
1661
  return agent;
1561
1662
  }
1562
1663
  getConversationHistory() {
@@ -1566,8 +1667,7 @@ var MCPAgent = class {
1566
1667
  this.conversationHistory = this.memoryEnabled && this.systemMessage ? [this.systemMessage] : [];
1567
1668
  }
1568
1669
  addToHistory(message) {
1569
- if (this.memoryEnabled)
1570
- this.conversationHistory.push(message);
1670
+ if (this.memoryEnabled) this.conversationHistory.push(message);
1571
1671
  }
1572
1672
  getSystemMessage() {
1573
1673
  return this.systemMessage;
@@ -1575,7 +1675,9 @@ var MCPAgent = class {
1575
1675
  setSystemMessage(message) {
1576
1676
  this.systemMessage = new SystemMessage2(message);
1577
1677
  if (this.memoryEnabled) {
1578
- this.conversationHistory = this.conversationHistory.filter((m) => !(m instanceof SystemMessage2));
1678
+ this.conversationHistory = this.conversationHistory.filter(
1679
+ (m) => !(m instanceof SystemMessage2)
1680
+ );
1579
1681
  this.conversationHistory.unshift(this.systemMessage);
1580
1682
  }
1581
1683
  if (this._initialized && this._tools.length) {
@@ -1587,7 +1689,9 @@ var MCPAgent = class {
1587
1689
  this.disallowedTools = disallowedTools;
1588
1690
  this.adapter = new LangChainAdapter(this.disallowedTools);
1589
1691
  if (this._initialized) {
1590
- logger.debug("Agent already initialized. Changes will take effect on next initialization.");
1692
+ logger.debug(
1693
+ "Agent already initialized. Changes will take effect on next initialization."
1694
+ );
1591
1695
  }
1592
1696
  }
1593
1697
  getDisallowedTools() {
@@ -1653,16 +1757,22 @@ var MCPAgent = class {
1653
1757
  try {
1654
1758
  const serialized = JSON.stringify(value);
1655
1759
  if (serialized.length > 1e3) {
1656
- logger.warn(`Metadata value for key '${sanitizedKey}' is too large. Truncating.`);
1760
+ logger.warn(
1761
+ `Metadata value for key '${sanitizedKey}' is too large. Truncating.`
1762
+ );
1657
1763
  sanitized[sanitizedKey] = `${serialized.substring(0, 1e3)}...`;
1658
1764
  } else {
1659
1765
  sanitized[sanitizedKey] = value;
1660
1766
  }
1661
1767
  } catch (error) {
1662
- logger.warn(`Failed to serialize metadata value for key '${sanitizedKey}': ${error}. Skipping.`);
1768
+ logger.warn(
1769
+ `Failed to serialize metadata value for key '${sanitizedKey}': ${error}. Skipping.`
1770
+ );
1663
1771
  }
1664
1772
  } else {
1665
- logger.warn(`Unsupported metadata value type for key '${sanitizedKey}': ${typeof value}. Skipping.`);
1773
+ logger.warn(
1774
+ `Unsupported metadata value type for key '${sanitizedKey}': ${typeof value}. Skipping.`
1775
+ );
1666
1776
  }
1667
1777
  }
1668
1778
  return sanitized;
@@ -1709,15 +1819,24 @@ var MCPAgent = class {
1709
1819
  };
1710
1820
  }
1711
1821
  } catch (error) {
1712
- logger.warn(`Failed to get config for server '${serverName}': ${error}`);
1713
- serverConfigs[serverName] = { type: "error", error: "config_unavailable" };
1822
+ logger.warn(
1823
+ `Failed to get config for server '${serverName}': ${error}`
1824
+ );
1825
+ serverConfigs[serverName] = {
1826
+ type: "error",
1827
+ error: "config_unavailable"
1828
+ };
1714
1829
  }
1715
1830
  }
1716
1831
  serverInfo.mcp_server_configs = serverConfigs;
1717
1832
  } else if (this.connectors && this.connectors.length > 0) {
1718
1833
  serverInfo.mcp_servers_count = this.connectors.length;
1719
- serverInfo.mcp_server_names = this.connectors.map((c) => c.publicIdentifier);
1720
- serverInfo.mcp_server_types = this.connectors.map((c) => c.constructor.name);
1834
+ serverInfo.mcp_server_names = this.connectors.map(
1835
+ (c) => c.publicIdentifier
1836
+ );
1837
+ serverInfo.mcp_server_types = this.connectors.map(
1838
+ (c) => c.constructor.name
1839
+ );
1721
1840
  }
1722
1841
  } catch (error) {
1723
1842
  logger.warn(`Failed to collect MCP server info: ${error}`);
@@ -1771,7 +1890,13 @@ var MCPAgent = class {
1771
1890
  }
1772
1891
  async run(query, maxSteps, manageConnector, externalHistory, outputSchema) {
1773
1892
  if (this.isRemote && this.remoteAgent) {
1774
- return this.remoteAgent.run(query, maxSteps, manageConnector, externalHistory, outputSchema);
1893
+ return this.remoteAgent.run(
1894
+ query,
1895
+ maxSteps,
1896
+ manageConnector,
1897
+ externalHistory,
1898
+ outputSchema
1899
+ );
1775
1900
  }
1776
1901
  const generator = this.stream(
1777
1902
  query,
@@ -1784,7 +1909,13 @@ var MCPAgent = class {
1784
1909
  }
1785
1910
  async *stream(query, maxSteps, manageConnector = true, externalHistory, outputSchema) {
1786
1911
  if (this.isRemote && this.remoteAgent) {
1787
- const result = await this.remoteAgent.run(query, maxSteps, manageConnector, externalHistory, outputSchema);
1912
+ const result = await this.remoteAgent.run(
1913
+ query,
1914
+ maxSteps,
1915
+ manageConnector,
1916
+ externalHistory,
1917
+ outputSchema
1918
+ );
1788
1919
  return result;
1789
1920
  }
1790
1921
  let initializedHere = false;
@@ -1829,27 +1960,31 @@ var MCPAgent = class {
1829
1960
  logger.info("\u{1F3C1} Starting agent execution");
1830
1961
  const maxRestarts = 3;
1831
1962
  let restartCount = 0;
1832
- const accumulatedMessages = [...langchainHistory, new HumanMessage(query)];
1963
+ const accumulatedMessages = [
1964
+ ...langchainHistory,
1965
+ new HumanMessage(query)
1966
+ ];
1833
1967
  while (restartCount <= maxRestarts) {
1834
1968
  const inputs = { messages: accumulatedMessages };
1835
1969
  let shouldRestart = false;
1836
- const stream = await this._agentExecutor.stream(
1837
- inputs,
1838
- {
1839
- streamMode: "updates",
1840
- // Get updates as they happen
1841
- callbacks: this.callbacks,
1842
- metadata: this.getMetadata(),
1843
- tags: this.getTags(),
1844
- // Set trace name for LangChain/Langfuse
1845
- runName: this.metadata.trace_name || "mcp-use-agent",
1846
- // Pass sessionId for Langfuse if present in metadata
1847
- ...this.metadata.session_id && { sessionId: this.metadata.session_id }
1970
+ const stream = await this._agentExecutor.stream(inputs, {
1971
+ streamMode: "updates",
1972
+ // Get updates as they happen
1973
+ callbacks: this.callbacks,
1974
+ metadata: this.getMetadata(),
1975
+ tags: this.getTags(),
1976
+ // Set trace name for LangChain/Langfuse
1977
+ runName: this.metadata.trace_name || "mcp-use-agent",
1978
+ // Pass sessionId for Langfuse if present in metadata
1979
+ ...this.metadata.session_id && {
1980
+ sessionId: this.metadata.session_id
1848
1981
  }
1849
- );
1982
+ });
1850
1983
  for await (const chunk of stream) {
1851
1984
  for (const [nodeName, nodeOutput] of Object.entries(chunk)) {
1852
- logger.debug(`\u{1F4E6} Node '${nodeName}' output: ${JSON.stringify(nodeOutput)}`);
1985
+ logger.debug(
1986
+ `\u{1F4E6} Node '${nodeName}' output: ${JSON.stringify(nodeOutput)}`
1987
+ );
1853
1988
  if (nodeOutput && typeof nodeOutput === "object" && "messages" in nodeOutput) {
1854
1989
  let messages = nodeOutput.messages;
1855
1990
  if (!Array.isArray(messages)) {
@@ -1871,7 +2006,9 @@ var MCPAgent = class {
1871
2006
  if (toolInputStr.length > 100) {
1872
2007
  toolInputStr = `${toolInputStr.slice(0, 97)}...`;
1873
2008
  }
1874
- logger.info(`\u{1F527} Tool call: ${toolName} with input: ${toolInputStr}`);
2009
+ logger.info(
2010
+ `\u{1F527} Tool call: ${toolName} with input: ${toolInputStr}`
2011
+ );
1875
2012
  yield {
1876
2013
  action: {
1877
2014
  tool: toolName,
@@ -1893,9 +2030,15 @@ var MCPAgent = class {
1893
2030
  logger.info(`\u{1F4C4} Tool result: ${observationStr}`);
1894
2031
  if (this.useServerManager && this.serverManager) {
1895
2032
  const currentTools = this.serverManager.tools;
1896
- const currentToolNames = new Set(currentTools.map((t) => t.name));
1897
- const existingToolNames = new Set(this._tools.map((t) => t.name));
1898
- if (currentToolNames.size !== existingToolNames.size || [...currentToolNames].some((n) => !existingToolNames.has(n))) {
2033
+ const currentToolNames = new Set(
2034
+ currentTools.map((t) => t.name)
2035
+ );
2036
+ const existingToolNames = new Set(
2037
+ this._tools.map((t) => t.name)
2038
+ );
2039
+ if (currentToolNames.size !== existingToolNames.size || [...currentToolNames].some(
2040
+ (n) => !existingToolNames.has(n)
2041
+ )) {
1899
2042
  logger.info(
1900
2043
  `\u{1F504} Tools changed during execution. New tools: ${[...currentToolNames].join(", ")}`
1901
2044
  );
@@ -1930,7 +2073,9 @@ var MCPAgent = class {
1930
2073
  break;
1931
2074
  }
1932
2075
  if (restartCount > maxRestarts) {
1933
- logger.warn(`\u26A0\uFE0F Max restarts (${maxRestarts}) reached. Continuing with current tools.`);
2076
+ logger.warn(
2077
+ `\u26A0\uFE0F Max restarts (${maxRestarts}) reached. Continuing with current tools.`
2078
+ );
1934
2079
  break;
1935
2080
  }
1936
2081
  }
@@ -1949,17 +2094,25 @@ var MCPAgent = class {
1949
2094
  outputSchema
1950
2095
  );
1951
2096
  if (this.memoryEnabled) {
1952
- this.addToHistory(new AIMessage(`Structured result: ${JSON.stringify(structuredResult)}`));
2097
+ this.addToHistory(
2098
+ new AIMessage(
2099
+ `Structured result: ${JSON.stringify(structuredResult)}`
2100
+ )
2101
+ );
1953
2102
  }
1954
2103
  logger.info("\u2705 Structured output successful");
1955
2104
  success = true;
1956
2105
  return structuredResult;
1957
2106
  } catch (e) {
1958
2107
  logger.error(`\u274C Structured output failed: ${e}`);
1959
- throw new Error(`Failed to generate structured output: ${e instanceof Error ? e.message : String(e)}`);
2108
+ throw new Error(
2109
+ `Failed to generate structured output: ${e instanceof Error ? e.message : String(e)}`
2110
+ );
1960
2111
  }
1961
2112
  }
1962
- logger.info(`\u{1F389} Agent execution complete in ${((Date.now() - startTime) / 1e3).toFixed(2)} seconds`);
2113
+ logger.info(
2114
+ `\u{1F389} Agent execution complete in ${((Date.now() - startTime) / 1e3).toFixed(2)} seconds`
2115
+ );
1963
2116
  success = true;
1964
2117
  return finalOutput || "No output generated";
1965
2118
  } catch (e) {
@@ -1986,7 +2139,9 @@ var MCPAgent = class {
1986
2139
  modelProvider: this.modelProvider,
1987
2140
  modelName: this.modelName,
1988
2141
  serverCount,
1989
- serverIdentifiers: this.connectors.map((connector) => connector.publicIdentifier),
2142
+ serverIdentifiers: this.connectors.map(
2143
+ (connector) => connector.publicIdentifier
2144
+ ),
1990
2145
  totalToolsAvailable: toolsAvailable.length,
1991
2146
  toolsAvailableNames: toolsAvailable.map((t) => t.name),
1992
2147
  maxStepsConfigured: this.maxSteps,
@@ -2090,7 +2245,10 @@ var MCPAgent = class {
2090
2245
  logger.info(`\u26A0\uFE0F Skipped message of type: ${msg.constructor.name}`);
2091
2246
  }
2092
2247
  }
2093
- const inputs = [...langchainHistory, new HumanMessage(query)];
2248
+ const inputs = [
2249
+ ...langchainHistory,
2250
+ new HumanMessage(query)
2251
+ ];
2094
2252
  logger.info("callbacks", this.callbacks);
2095
2253
  const eventStream = agentExecutor.streamEvents(
2096
2254
  { messages: inputs },
@@ -2103,7 +2261,9 @@ var MCPAgent = class {
2103
2261
  // Set trace name for LangChain/Langfuse
2104
2262
  runName: this.metadata.trace_name || "mcp-use-agent",
2105
2263
  // Pass sessionId for Langfuse if present in metadata
2106
- ...this.metadata.session_id && { sessionId: this.metadata.session_id }
2264
+ ...this.metadata.session_id && {
2265
+ sessionId: this.metadata.session_id
2266
+ }
2107
2267
  }
2108
2268
  );
2109
2269
  for await (const event of eventStream) {
@@ -2122,7 +2282,9 @@ var MCPAgent = class {
2122
2282
  }
2123
2283
  const normalizedContent = this._normalizeOutput(chunk.content);
2124
2284
  finalResponse += normalizedContent;
2125
- logger.debug(`\u{1F4DD} Accumulated response length: ${finalResponse.length}`);
2285
+ logger.debug(
2286
+ `\u{1F4DD} Accumulated response length: ${finalResponse.length}`
2287
+ );
2126
2288
  }
2127
2289
  }
2128
2290
  yield event;
@@ -2179,7 +2341,11 @@ var MCPAgent = class {
2179
2341
  data: { output: conversionResult }
2180
2342
  };
2181
2343
  if (this.memoryEnabled) {
2182
- this.addToHistory(new AIMessage(`Structured result: ${JSON.stringify(conversionResult)}`));
2344
+ this.addToHistory(
2345
+ new AIMessage(
2346
+ `Structured result: ${JSON.stringify(conversionResult)}`
2347
+ )
2348
+ );
2183
2349
  }
2184
2350
  logger.info("\u2705 Structured output successful");
2185
2351
  }
@@ -2198,7 +2364,9 @@ var MCPAgent = class {
2198
2364
  } catch (e) {
2199
2365
  logger.error(`\u274C Error during streamEvents: ${e}`);
2200
2366
  if (initializedHere && manageConnector) {
2201
- logger.info("\u{1F9F9} Cleaning up resources after initialization error in streamEvents");
2367
+ logger.info(
2368
+ "\u{1F9F9} Cleaning up resources after initialization error in streamEvents"
2369
+ );
2202
2370
  await this.close();
2203
2371
  }
2204
2372
  throw e;
@@ -2218,7 +2386,9 @@ var MCPAgent = class {
2218
2386
  modelProvider: this.modelProvider,
2219
2387
  modelName: this.modelName,
2220
2388
  serverCount,
2221
- serverIdentifiers: this.connectors.map((connector) => connector.publicIdentifier),
2389
+ serverIdentifiers: this.connectors.map(
2390
+ (connector) => connector.publicIdentifier
2391
+ ),
2222
2392
  totalToolsAvailable: this._tools.length,
2223
2393
  toolsAvailableNames: this._tools.map((t) => t.name),
2224
2394
  maxStepsConfigured: this.maxSteps,
@@ -2246,11 +2416,15 @@ var MCPAgent = class {
2246
2416
  * @param outputSchema - The Zod schema to validate against
2247
2417
  */
2248
2418
  async _attemptStructuredOutput(rawResult, llm, outputSchema) {
2249
- logger.info(`\u{1F504} Attempting structured output with schema: ${JSON.stringify(outputSchema, null, 2)}`);
2419
+ logger.info(
2420
+ `\u{1F504} Attempting structured output with schema: ${JSON.stringify(outputSchema, null, 2)}`
2421
+ );
2250
2422
  logger.info(`\u{1F504} Raw result: ${JSON.stringify(rawResult, null, 2)}`);
2251
2423
  let structuredLlm = null;
2252
2424
  let schemaDescription = "";
2253
- logger.debug(`\u{1F504} Structured output requested, schema: ${JSON.stringify(zodToJsonSchema2(outputSchema), null, 2)}`);
2425
+ logger.debug(
2426
+ `\u{1F504} Structured output requested, schema: ${JSON.stringify(zodToJsonSchema2(outputSchema), null, 2)}`
2427
+ );
2254
2428
  if (llm && "withStructuredOutput" in llm && typeof llm.withStructuredOutput === "function") {
2255
2429
  structuredLlm = llm.withStructuredOutput(outputSchema);
2256
2430
  } else if (llm) {
@@ -2302,11 +2476,17 @@ var MCPAgent = class {
2302
2476
  `;
2303
2477
  }
2304
2478
  try {
2305
- logger.info(`\u{1F504} Structured output attempt ${attempt} - using streaming approach`);
2479
+ logger.info(
2480
+ `\u{1F504} Structured output attempt ${attempt} - using streaming approach`
2481
+ );
2306
2482
  const contentPreview = textContent.length > 300 ? `${textContent.slice(0, 300)}...` : textContent;
2307
- logger.info(`\u{1F504} Content being formatted (${textContent.length} chars): ${contentPreview}`);
2308
- logger.info(`\u{1F504} Full format prompt (${formatPrompt.length} chars):
2309
- ${formatPrompt}`);
2483
+ logger.info(
2484
+ `\u{1F504} Content being formatted (${textContent.length} chars): ${contentPreview}`
2485
+ );
2486
+ logger.info(
2487
+ `\u{1F504} Full format prompt (${formatPrompt.length} chars):
2488
+ ${formatPrompt}`
2489
+ );
2310
2490
  const stream = await structuredLlm.stream(formatPrompt);
2311
2491
  let structuredResult = null;
2312
2492
  let chunkCount = 0;
@@ -2332,19 +2512,30 @@ ${formatPrompt}`);
2332
2512
  logger.info(`\u{1F504} Structured output streaming: ${chunkCount} chunks`);
2333
2513
  }
2334
2514
  }
2335
- logger.info(`\u{1F504} Structured result attempt ${attempt}: ${JSON.stringify(structuredResult, null, 2)}`);
2515
+ logger.info(
2516
+ `\u{1F504} Structured result attempt ${attempt}: ${JSON.stringify(structuredResult, null, 2)}`
2517
+ );
2336
2518
  if (!structuredResult) {
2337
2519
  throw new Error("No structured result received from stream");
2338
2520
  }
2339
- const validatedResult = this._validateStructuredResult(structuredResult, outputSchema);
2521
+ const validatedResult = this._validateStructuredResult(
2522
+ structuredResult,
2523
+ outputSchema
2524
+ );
2340
2525
  logger.info(`\u2705 Structured output successful on attempt ${attempt}`);
2341
2526
  return validatedResult;
2342
2527
  } catch (e) {
2343
2528
  lastError = e instanceof Error ? e.message : String(e);
2344
- logger.warn(`\u26A0\uFE0F Structured output attempt ${attempt} failed: ${lastError}`);
2529
+ logger.warn(
2530
+ `\u26A0\uFE0F Structured output attempt ${attempt} failed: ${lastError}`
2531
+ );
2345
2532
  if (attempt === maxRetries) {
2346
- logger.error(`\u274C All ${maxRetries} structured output attempts failed`);
2347
- throw new Error(`Failed to generate valid structured output after ${maxRetries} attempts. Last error: ${lastError}`);
2533
+ logger.error(
2534
+ `\u274C All ${maxRetries} structured output attempts failed`
2535
+ );
2536
+ throw new Error(
2537
+ `Failed to generate valid structured output after ${maxRetries} attempts. Last error: ${lastError}`
2538
+ );
2348
2539
  }
2349
2540
  continue;
2350
2541
  }
@@ -2359,14 +2550,18 @@ ${formatPrompt}`);
2359
2550
  const validatedResult = outputSchema.parse(structuredResult);
2360
2551
  const schemaType = outputSchema;
2361
2552
  if (schemaType._def && schemaType._def.shape) {
2362
- for (const [fieldName, fieldSchema] of Object.entries(schemaType._def.shape)) {
2553
+ for (const [fieldName, fieldSchema] of Object.entries(
2554
+ schemaType._def.shape
2555
+ )) {
2363
2556
  const field = fieldSchema;
2364
2557
  const isOptional = field.isOptional?.() ?? field._def?.typeName === "ZodOptional";
2365
2558
  const isNullable = field.isNullable?.() ?? field._def?.typeName === "ZodNullable";
2366
2559
  if (!isOptional && !isNullable) {
2367
2560
  const value = validatedResult[fieldName];
2368
2561
  if (value === null || value === void 0 || typeof value === "string" && !value.trim() || Array.isArray(value) && value.length === 0) {
2369
- throw new Error(`Required field '${fieldName}' is missing or empty`);
2562
+ throw new Error(
2563
+ `Required field '${fieldName}' is missing or empty`
2564
+ );
2370
2565
  }
2371
2566
  }
2372
2567
  }