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.
- package/dist/.tsbuildinfo +1 -1
- package/dist/{chunk-VPPILX7B.js → chunk-3RJENWH4.js} +15 -6
- package/dist/{chunk-UVUM35MV.js → chunk-7UX634PO.js} +307 -112
- package/dist/{chunk-CPV4QNHD.js → chunk-KLIBVJ3Z.js} +145 -79
- package/dist/{chunk-EYAIJPBH.js → chunk-MZLETWQQ.js} +55 -17
- package/dist/{chunk-C3SRZK7H.js → chunk-RSGKBEHH.js} +144 -72
- package/dist/index.cjs +719 -300
- package/dist/index.d.ts +24 -24
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +86 -28
- package/dist/{langfuse-MO3AMDBE.js → langfuse-LCJ6VJEP.js} +2 -2
- package/dist/src/adapters/base.d.ts +2 -2
- package/dist/src/adapters/base.d.ts.map +1 -1
- package/dist/src/adapters/index.d.ts +2 -2
- package/dist/src/adapters/index.d.ts.map +1 -1
- package/dist/src/adapters/langchain_adapter.d.ts +4 -4
- package/dist/src/adapters/langchain_adapter.d.ts.map +1 -1
- package/dist/src/agents/base.d.ts +1 -1
- package/dist/src/agents/base.d.ts.map +1 -1
- package/dist/src/agents/index.d.ts +3 -3
- package/dist/src/agents/index.d.ts.map +1 -1
- package/dist/src/agents/mcp_agent.d.ts +12 -12
- package/dist/src/agents/mcp_agent.d.ts.map +1 -1
- package/dist/src/agents/prompts/system_prompt_builder.d.ts +2 -2
- package/dist/src/agents/prompts/system_prompt_builder.d.ts.map +1 -1
- package/dist/src/agents/prompts/templates.d.ts.map +1 -1
- package/dist/src/agents/remote.d.ts +2 -2
- package/dist/src/agents/remote.d.ts.map +1 -1
- package/dist/src/agents/types.d.ts +1 -1
- package/dist/src/agents/types.d.ts.map +1 -1
- package/dist/src/agents/utils/ai_sdk.d.ts +1 -1
- package/dist/src/agents/utils/ai_sdk.d.ts.map +1 -1
- package/dist/src/agents/utils/index.d.ts +1 -1
- package/dist/src/agents/utils/index.d.ts.map +1 -1
- package/dist/src/auth/browser-provider.d.ts +2 -2
- package/dist/src/auth/browser-provider.d.ts.map +1 -1
- package/dist/src/auth/callback.d.ts.map +1 -1
- package/dist/src/auth/index.d.ts +3 -3
- package/dist/src/auth/index.d.ts.map +1 -1
- package/dist/src/auth/types.d.ts +1 -1
- package/dist/src/auth/types.d.ts.map +1 -1
- package/dist/src/browser.cjs +508 -201
- package/dist/src/browser.d.ts +17 -17
- package/dist/src/browser.d.ts.map +1 -1
- package/dist/src/browser.js +11 -5
- package/dist/src/client/base.d.ts +2 -2
- package/dist/src/client/base.d.ts.map +1 -1
- package/dist/src/client/browser.d.ts +2 -2
- package/dist/src/client/browser.d.ts.map +1 -1
- package/dist/src/client.d.ts +2 -2
- package/dist/src/client.d.ts.map +1 -1
- package/dist/src/config.d.ts +1 -1
- package/dist/src/config.d.ts.map +1 -1
- package/dist/src/connectors/base.d.ts +5 -5
- package/dist/src/connectors/base.d.ts.map +1 -1
- package/dist/src/connectors/http.d.ts +3 -3
- package/dist/src/connectors/http.d.ts.map +1 -1
- package/dist/src/connectors/index.d.ts +4 -4
- package/dist/src/connectors/index.d.ts.map +1 -1
- package/dist/src/connectors/stdio.d.ts +3 -3
- package/dist/src/connectors/stdio.d.ts.map +1 -1
- package/dist/src/connectors/websocket.d.ts +3 -3
- package/dist/src/connectors/websocket.d.ts.map +1 -1
- package/dist/src/logging.d.ts +4 -4
- package/dist/src/logging.d.ts.map +1 -1
- package/dist/src/managers/index.d.ts +2 -2
- package/dist/src/managers/index.d.ts.map +1 -1
- package/dist/src/managers/server_manager.d.ts +4 -4
- package/dist/src/managers/server_manager.d.ts.map +1 -1
- package/dist/src/managers/tools/acquire_active_mcp_server.d.ts +3 -3
- package/dist/src/managers/tools/acquire_active_mcp_server.d.ts.map +1 -1
- package/dist/src/managers/tools/add_server_from_config.d.ts +3 -3
- package/dist/src/managers/tools/add_server_from_config.d.ts.map +1 -1
- package/dist/src/managers/tools/base.d.ts +6 -6
- package/dist/src/managers/tools/base.d.ts.map +1 -1
- package/dist/src/managers/tools/connect_mcp_server.d.ts +4 -4
- package/dist/src/managers/tools/connect_mcp_server.d.ts.map +1 -1
- package/dist/src/managers/tools/index.d.ts +5 -5
- package/dist/src/managers/tools/index.d.ts.map +1 -1
- package/dist/src/managers/tools/list_mcp_servers.d.ts +3 -3
- package/dist/src/managers/tools/list_mcp_servers.d.ts.map +1 -1
- package/dist/src/managers/tools/release_mcp_server_connection.d.ts +3 -3
- package/dist/src/managers/tools/release_mcp_server_connection.d.ts.map +1 -1
- package/dist/src/managers/types.d.ts +3 -3
- package/dist/src/managers/types.d.ts.map +1 -1
- package/dist/src/oauth-helper.d.ts.map +1 -1
- package/dist/src/observability/index.d.ts +3 -3
- package/dist/src/observability/index.d.ts.map +1 -1
- package/dist/src/observability/langfuse.d.ts +1 -1
- package/dist/src/observability/langfuse.d.ts.map +1 -1
- package/dist/src/observability/manager.d.ts +1 -1
- package/dist/src/observability/manager.d.ts.map +1 -1
- package/dist/src/observability/types.d.ts +1 -1
- package/dist/src/observability/types.d.ts.map +1 -1
- package/dist/src/react/index.cjs +295 -154
- package/dist/src/react/index.d.ts +6 -6
- package/dist/src/react/index.d.ts.map +1 -1
- package/dist/src/react/index.js +3 -3
- package/dist/src/react/types.d.ts +6 -6
- package/dist/src/react/types.d.ts.map +1 -1
- package/dist/src/react/useMcp.d.ts +1 -1
- package/dist/src/react/useMcp.d.ts.map +1 -1
- package/dist/src/react/useWidget.d.ts +5 -2
- package/dist/src/react/useWidget.d.ts.map +1 -1
- package/dist/src/react/widget-types.d.ts +3 -3
- package/dist/src/react/widget-types.d.ts.map +1 -1
- package/dist/src/server/adapters/mcp-ui-adapter.d.ts +3 -3
- package/dist/src/server/adapters/mcp-ui-adapter.d.ts.map +1 -1
- package/dist/src/server/index.cjs +170 -50
- package/dist/src/server/index.d.ts +4 -4
- package/dist/src/server/index.d.ts.map +1 -1
- package/dist/src/server/index.js +174 -51
- package/dist/src/server/logging.d.ts +1 -1
- package/dist/src/server/logging.d.ts.map +1 -1
- package/dist/src/server/mcp-server.d.ts +29 -29
- package/dist/src/server/mcp-server.d.ts.map +1 -1
- package/dist/src/server/types/common.d.ts +2 -2
- package/dist/src/server/types/common.d.ts.map +1 -1
- package/dist/src/server/types/index.d.ts +4 -4
- package/dist/src/server/types/index.d.ts.map +1 -1
- package/dist/src/server/types/prompt.d.ts +2 -2
- package/dist/src/server/types/prompt.d.ts.map +1 -1
- package/dist/src/server/types/resource.d.ts +24 -24
- package/dist/src/server/types/resource.d.ts.map +1 -1
- package/dist/src/server/types/tool.d.ts +3 -3
- package/dist/src/server/types/tool.d.ts.map +1 -1
- package/dist/src/server/types/widget.d.ts +1 -1
- package/dist/src/server/types.d.ts +1 -1
- package/dist/src/server/types.d.ts.map +1 -1
- package/dist/src/session.d.ts +1 -1
- package/dist/src/session.d.ts.map +1 -1
- package/dist/src/task_managers/base.d.ts.map +1 -1
- package/dist/src/task_managers/index.d.ts +5 -5
- package/dist/src/task_managers/index.d.ts.map +1 -1
- package/dist/src/task_managers/sse.d.ts +3 -3
- package/dist/src/task_managers/sse.d.ts.map +1 -1
- package/dist/src/task_managers/stdio.d.ts +4 -4
- package/dist/src/task_managers/stdio.d.ts.map +1 -1
- package/dist/src/task_managers/streamable_http.d.ts +3 -3
- package/dist/src/task_managers/streamable_http.d.ts.map +1 -1
- package/dist/src/task_managers/websocket.d.ts +2 -2
- package/dist/src/task_managers/websocket.d.ts.map +1 -1
- package/dist/src/telemetry/events.d.ts.map +1 -1
- package/dist/src/telemetry/index.d.ts +4 -4
- package/dist/src/telemetry/index.d.ts.map +1 -1
- package/dist/src/telemetry/telemetry.d.ts +1 -1
- package/dist/src/telemetry/telemetry.d.ts.map +1 -1
- package/dist/src/telemetry/utils.d.ts +1 -1
- package/dist/src/telemetry/utils.d.ts.map +1 -1
- package/dist/tsup.config.d.ts.map +1 -1
- package/dist/vitest.config.d.ts.map +1 -1
- package/package.json +3 -3
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import {
|
|
2
2
|
logger
|
|
3
|
-
} from "./chunk-
|
|
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(
|
|
155
|
+
logger.debug(
|
|
156
|
+
`MCP tool "${mcpTool.name}" received input: ${JSON.stringify(input)}`
|
|
157
|
+
);
|
|
156
158
|
try {
|
|
157
|
-
const result = await connector.callTool(
|
|
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(
|
|
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(
|
|
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
|
-
|
|
406
|
-
|
|
414
|
+
Connected: activeSessionNames.includes(name) ? "\u2705" : "\u274C",
|
|
415
|
+
Initialized: this.initializedServers[name] ? "\u2705" : "\u274C",
|
|
407
416
|
"Tool Count": this.serverTools[name]?.length ?? 0,
|
|
408
|
-
|
|
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(
|
|
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(
|
|
439
|
+
logger.warn(
|
|
440
|
+
`Could not create session for '${serverName}' during prefetch: ${createSessionError}`
|
|
441
|
+
);
|
|
429
442
|
return null;
|
|
430
443
|
});
|
|
431
|
-
logger.debug(
|
|
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(
|
|
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(
|
|
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(
|
|
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-
|
|
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-
|
|
516
|
-
await initializeLangfuse(
|
|
517
|
-
|
|
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(
|
|
569
|
+
logger.debug(
|
|
570
|
+
"ObservabilityManager: Observability disabled via observe=false"
|
|
571
|
+
);
|
|
542
572
|
return [];
|
|
543
573
|
}
|
|
544
574
|
if (this.customCallbacks) {
|
|
545
|
-
logger.debug(
|
|
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(
|
|
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(
|
|
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 [
|
|
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(
|
|
830
|
-
|
|
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(
|
|
902
|
+
logger.debug(
|
|
903
|
+
"Telemetry disabled - non-Node.js environment detected (e.g., Cloudflare Workers)"
|
|
904
|
+
);
|
|
851
905
|
} else {
|
|
852
|
-
logger.info(
|
|
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.
|
|
856
|
-
|
|
857
|
-
|
|
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), {
|
|
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(
|
|
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(
|
|
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(
|
|
1192
|
-
|
|
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(
|
|
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 {
|
|
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(
|
|
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(
|
|
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(
|
|
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(
|
|
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(
|
|
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(
|
|
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(
|
|
1590
|
+
logger.info(
|
|
1591
|
+
`\u{1F6E0}\uFE0F Created ${this._tools.length} LangChain tools from client`
|
|
1592
|
+
);
|
|
1504
1593
|
} else {
|
|
1505
|
-
logger.info(
|
|
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(
|
|
1602
|
+
this._tools = await this.adapter.createToolsFromConnectors(
|
|
1603
|
+
this.connectors
|
|
1604
|
+
);
|
|
1512
1605
|
this._tools.push(...this.additionalTools);
|
|
1513
|
-
logger.info(
|
|
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(
|
|
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(
|
|
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(
|
|
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(
|
|
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(
|
|
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(
|
|
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(
|
|
1768
|
+
logger.warn(
|
|
1769
|
+
`Failed to serialize metadata value for key '${sanitizedKey}': ${error}. Skipping.`
|
|
1770
|
+
);
|
|
1663
1771
|
}
|
|
1664
1772
|
} else {
|
|
1665
|
-
logger.warn(
|
|
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(
|
|
1713
|
-
|
|
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(
|
|
1720
|
-
|
|
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(
|
|
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(
|
|
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 = [
|
|
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
|
-
|
|
1838
|
-
|
|
1839
|
-
|
|
1840
|
-
|
|
1841
|
-
|
|
1842
|
-
|
|
1843
|
-
|
|
1844
|
-
|
|
1845
|
-
|
|
1846
|
-
|
|
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(
|
|
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(
|
|
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(
|
|
1897
|
-
|
|
1898
|
-
|
|
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(
|
|
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(
|
|
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(
|
|
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(
|
|
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(
|
|
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 = [
|
|
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 && {
|
|
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(
|
|
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(
|
|
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(
|
|
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(
|
|
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(
|
|
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(
|
|
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(
|
|
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(
|
|
2308
|
-
|
|
2309
|
-
|
|
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(
|
|
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(
|
|
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(
|
|
2529
|
+
logger.warn(
|
|
2530
|
+
`\u26A0\uFE0F Structured output attempt ${attempt} failed: ${lastError}`
|
|
2531
|
+
);
|
|
2345
2532
|
if (attempt === maxRetries) {
|
|
2346
|
-
logger.error(
|
|
2347
|
-
|
|
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(
|
|
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(
|
|
2562
|
+
throw new Error(
|
|
2563
|
+
`Required field '${fieldName}' is missing or empty`
|
|
2564
|
+
);
|
|
2370
2565
|
}
|
|
2371
2566
|
}
|
|
2372
2567
|
}
|