mcp-use 1.10.1-canary.0 → 1.10.1-canary.2

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 (32) hide show
  1. package/dist/.tsbuildinfo +1 -1
  2. package/dist/{chunk-OA322F7Y.js → chunk-4NC7PPVE.js} +1 -1
  3. package/dist/{chunk-IU5NGAVG.js → chunk-CFX74U7W.js} +2 -2
  4. package/dist/{chunk-FDQW3YNK.js → chunk-FAELBZOW.js} +228 -12
  5. package/dist/{chunk-R5D3TYBR.js → chunk-KFTQ3UL5.js} +2 -2
  6. package/dist/{chunk-YZTVG5VD.js → chunk-OTZ32HGI.js} +1 -1
  7. package/dist/{chunk-77LT3TOS.js → chunk-QNZMNQCY.js} +1 -1
  8. package/dist/{chunk-VQOIELLO.js → chunk-VTNHO2TS.js} +1 -1
  9. package/dist/index.cjs +228 -12
  10. package/dist/index.js +6 -6
  11. package/dist/src/adapters/base.d.ts +44 -0
  12. package/dist/src/adapters/base.d.ts.map +1 -1
  13. package/dist/src/adapters/langchain_adapter.d.ts +12 -1
  14. package/dist/src/adapters/langchain_adapter.d.ts.map +1 -1
  15. package/dist/src/agents/index.cjs +228 -12
  16. package/dist/src/agents/index.js +4 -4
  17. package/dist/src/agents/mcp_agent.d.ts.map +1 -1
  18. package/dist/src/browser.cjs +228 -12
  19. package/dist/src/browser.js +4 -4
  20. package/dist/src/client/prompts.js +3 -3
  21. package/dist/src/managers/server_manager.d.ts.map +1 -1
  22. package/dist/src/managers/tools/connect_mcp_server.d.ts.map +1 -1
  23. package/dist/src/react/index.cjs +1 -1
  24. package/dist/src/react/index.js +4 -4
  25. package/dist/src/server/endpoints/mount-mcp.d.ts.map +1 -1
  26. package/dist/src/server/index.cjs +23 -3
  27. package/dist/src/server/index.js +27 -7
  28. package/dist/src/server/sessions/session-manager.d.ts +6 -3
  29. package/dist/src/server/sessions/session-manager.d.ts.map +1 -1
  30. package/dist/src/version.d.ts +1 -1
  31. package/dist/{tool-execution-helpers-CYX4UNR7.js → tool-execution-helpers-PQGEPYY3.js} +2 -2
  32. package/package.json +3 -3
@@ -1607,7 +1607,7 @@ __name(generateUUID, "generateUUID");
1607
1607
  init_logging();
1608
1608
 
1609
1609
  // src/version.ts
1610
- var VERSION = "1.10.1-canary.0";
1610
+ var VERSION = "1.10.1-canary.2";
1611
1611
  function getPackageVersion() {
1612
1612
  return VERSION;
1613
1613
  }
@@ -4542,6 +4542,98 @@ var BaseAdapter = class {
4542
4542
  logger.debug(`Available tools: ${tools.length}`);
4543
4543
  return tools;
4544
4544
  }
4545
+ /**
4546
+ * Dynamically load resources for a specific connector.
4547
+ *
4548
+ * @param connector The connector to load resources for.
4549
+ * @returns The list of resources that were loaded in the target framework's format.
4550
+ */
4551
+ async loadResourcesForConnector(connector) {
4552
+ const connectorResources = [];
4553
+ const success = await this.ensureConnectorInitialized(connector);
4554
+ if (!success) {
4555
+ return [];
4556
+ }
4557
+ try {
4558
+ const resourcesResult = await connector.listAllResources();
4559
+ const resources = resourcesResult?.resources || [];
4560
+ if (this.convertResource) {
4561
+ for (const resource of resources) {
4562
+ const converted = this.convertResource(resource, connector);
4563
+ if (converted) {
4564
+ connectorResources.push(converted);
4565
+ }
4566
+ }
4567
+ }
4568
+ logger.debug(
4569
+ `Loaded ${connectorResources.length} new resources for connector: ${connectorResources.map((r) => r?.name ?? String(r)).join(", ")}`
4570
+ );
4571
+ } catch (err) {
4572
+ logger.warn(`Error loading resources for connector: ${err}`);
4573
+ }
4574
+ return connectorResources;
4575
+ }
4576
+ /**
4577
+ * Dynamically load prompts for a specific connector.
4578
+ *
4579
+ * @param connector The connector to load prompts for.
4580
+ * @returns The list of prompts that were loaded in the target framework's format.
4581
+ */
4582
+ async loadPromptsForConnector(connector) {
4583
+ const connectorPrompts = [];
4584
+ const success = await this.ensureConnectorInitialized(connector);
4585
+ if (!success) {
4586
+ return [];
4587
+ }
4588
+ try {
4589
+ const promptsResult = await connector.listPrompts();
4590
+ const prompts = promptsResult?.prompts || [];
4591
+ if (this.convertPrompt) {
4592
+ for (const prompt of prompts) {
4593
+ const converted = this.convertPrompt(prompt, connector);
4594
+ if (converted) {
4595
+ connectorPrompts.push(converted);
4596
+ }
4597
+ }
4598
+ }
4599
+ logger.debug(
4600
+ `Loaded ${connectorPrompts.length} new prompts for connector: ${connectorPrompts.map((p) => p?.name ?? String(p)).join(", ")}`
4601
+ );
4602
+ } catch (err) {
4603
+ logger.warn(`Error loading prompts for connector: ${err}`);
4604
+ }
4605
+ return connectorPrompts;
4606
+ }
4607
+ /**
4608
+ * Create resources from MCP resources in all provided connectors.
4609
+ *
4610
+ * @param connectors List of MCP connectors to create resources from.
4611
+ * @returns A promise that resolves with all converted resources.
4612
+ */
4613
+ async createResourcesFromConnectors(connectors) {
4614
+ const resources = [];
4615
+ for (const connector of connectors) {
4616
+ const connectorResources = await this.loadResourcesForConnector(connector);
4617
+ resources.push(...connectorResources);
4618
+ }
4619
+ logger.debug(`Available resources: ${resources.length}`);
4620
+ return resources;
4621
+ }
4622
+ /**
4623
+ * Create prompts from MCP prompts in all provided connectors.
4624
+ *
4625
+ * @param connectors List of MCP connectors to create prompts from.
4626
+ * @returns A promise that resolves with all converted prompts.
4627
+ */
4628
+ async createPromptsFromConnectors(connectors) {
4629
+ const prompts = [];
4630
+ for (const connector of connectors) {
4631
+ const connectorPrompts = await this.loadPromptsForConnector(connector);
4632
+ prompts.push(...connectorPrompts);
4633
+ }
4634
+ logger.debug(`Available prompts: ${prompts.length}`);
4635
+ return prompts;
4636
+ }
4545
4637
  /**
4546
4638
  * Check if a connector is initialized and has tools.
4547
4639
  *
@@ -4620,6 +4712,99 @@ var LangChainAdapter = class extends BaseAdapter {
4620
4712
  });
4621
4713
  return tool;
4622
4714
  }
4715
+ /**
4716
+ * Convert a single MCP resource into a LangChainJS structured tool.
4717
+ * Each resource becomes an async tool that returns its content when called.
4718
+ */
4719
+ convertResource(mcpResource, connector) {
4720
+ const sanitizeName = /* @__PURE__ */ __name((name) => {
4721
+ return name.replace(/[^A-Za-z0-9_]+/g, "_").toLowerCase().replace(/^_+|_+$/g, "");
4722
+ }, "sanitizeName");
4723
+ const resourceName = sanitizeName(
4724
+ mcpResource.name || `resource_${mcpResource.uri}`
4725
+ );
4726
+ const resourceUri = mcpResource.uri;
4727
+ const tool = new import_tools.DynamicStructuredTool({
4728
+ name: resourceName,
4729
+ description: mcpResource.description || `Return the content of the resource located at URI ${resourceUri}.`,
4730
+ schema: import_zod2.z.object({}).optional(),
4731
+ // Resources take no arguments
4732
+ func: /* @__PURE__ */ __name(async () => {
4733
+ logger.debug(`Resource tool: "${resourceName}" called`);
4734
+ try {
4735
+ const result = await connector.readResource(resourceUri);
4736
+ if (result.contents && result.contents.length > 0) {
4737
+ return result.contents.map((content) => {
4738
+ if (typeof content === "string") {
4739
+ return content;
4740
+ }
4741
+ if (content.text) {
4742
+ return content.text;
4743
+ }
4744
+ if (content.uri) {
4745
+ return content.uri;
4746
+ }
4747
+ return JSON.stringify(content);
4748
+ }).join("\n");
4749
+ }
4750
+ return "Resource is empty or unavailable";
4751
+ } catch (err) {
4752
+ logger.error(`Error reading resource: ${err.message}`);
4753
+ return `Error reading resource: ${String(err)}`;
4754
+ }
4755
+ }, "func")
4756
+ });
4757
+ return tool;
4758
+ }
4759
+ /**
4760
+ * Convert a single MCP prompt into a LangChainJS structured tool.
4761
+ * The resulting tool executes getPrompt on the connector with the prompt's name
4762
+ * and the user-provided arguments (if any).
4763
+ */
4764
+ convertPrompt(mcpPrompt, connector) {
4765
+ let argsSchema = import_zod2.z.object({}).optional();
4766
+ if (mcpPrompt.arguments && mcpPrompt.arguments.length > 0) {
4767
+ const schemaFields = {};
4768
+ for (const arg of mcpPrompt.arguments) {
4769
+ const zodType = import_zod2.z.string();
4770
+ if (arg.required !== false) {
4771
+ schemaFields[arg.name] = zodType;
4772
+ } else {
4773
+ schemaFields[arg.name] = zodType.optional();
4774
+ }
4775
+ }
4776
+ argsSchema = Object.keys(schemaFields).length > 0 ? import_zod2.z.object(schemaFields) : import_zod2.z.object({}).optional();
4777
+ }
4778
+ const tool = new import_tools.DynamicStructuredTool({
4779
+ name: mcpPrompt.name,
4780
+ description: mcpPrompt.description || "",
4781
+ schema: argsSchema,
4782
+ func: /* @__PURE__ */ __name(async (input) => {
4783
+ logger.debug(
4784
+ `Prompt tool: "${mcpPrompt.name}" called with args: ${JSON.stringify(input)}`
4785
+ );
4786
+ try {
4787
+ const result = await connector.getPrompt(mcpPrompt.name, input);
4788
+ if (result.messages && result.messages.length > 0) {
4789
+ return result.messages.map((msg) => {
4790
+ if (typeof msg === "string") {
4791
+ return msg;
4792
+ }
4793
+ if (msg.content) {
4794
+ return typeof msg.content === "string" ? msg.content : JSON.stringify(msg.content);
4795
+ }
4796
+ return JSON.stringify(msg);
4797
+ }).join("\n");
4798
+ }
4799
+ return "Prompt returned no messages";
4800
+ } catch (err) {
4801
+ logger.error(`Error getting prompt: ${err.message}`);
4802
+ return `Error getting prompt: ${String(err)}`;
4803
+ }
4804
+ }, "func")
4805
+ });
4806
+ return tool;
4807
+ }
4623
4808
  };
4624
4809
 
4625
4810
  // src/agents/mcp_agent.ts
@@ -4759,15 +4944,21 @@ var ConnectMCPServerTool = class extends MCPServerTool {
4759
4944
  session = await this.manager.client.createSession(serverName);
4760
4945
  }
4761
4946
  this.manager.activeServer = serverName;
4762
- if (this.manager.serverTools[serverName]) {
4947
+ if (!this.manager.serverTools[serverName]) {
4763
4948
  const connector = session.connector;
4764
4949
  const tools = await this.manager.adapter.createToolsFromConnectors([connector]);
4765
- this.manager.serverTools[serverName] = tools;
4950
+ const resources = await this.manager.adapter.createResourcesFromConnectors([connector]);
4951
+ const prompts = await this.manager.adapter.createPromptsFromConnectors([connector]);
4952
+ const allItems = [...tools, ...resources, ...prompts];
4953
+ this.manager.serverTools[serverName] = allItems;
4766
4954
  this.manager.initializedServers[serverName] = true;
4955
+ logger.debug(
4956
+ `Loaded ${allItems.length} items for server '${serverName}': ${tools.length} tools, ${resources.length} resources, ${prompts.length} prompts`
4957
+ );
4767
4958
  }
4768
4959
  const serverTools = this.manager.serverTools[serverName] || [];
4769
4960
  const numTools = serverTools.length;
4770
- return `Connected to MCP server '${serverName}'. ${numTools} tools are now available.`;
4961
+ return `Connected to MCP server '${serverName}'. ${numTools} tools, resources, and prompts are now available.`;
4771
4962
  } catch (error) {
4772
4963
  logger.error(
4773
4964
  `Error connecting to server '${serverName}': ${String(error)}`
@@ -4929,21 +5120,30 @@ var ServerManager = class {
4929
5120
  if (session) {
4930
5121
  const connector = session.connector;
4931
5122
  let tools = [];
5123
+ let resources = [];
5124
+ let prompts = [];
4932
5125
  try {
4933
5126
  tools = await this.adapter.createToolsFromConnectors([connector]);
5127
+ resources = await this.adapter.createResourcesFromConnectors([
5128
+ connector
5129
+ ]);
5130
+ prompts = await this.adapter.createPromptsFromConnectors([
5131
+ connector
5132
+ ]);
4934
5133
  } catch (toolFetchError) {
4935
5134
  logger.error(
4936
- `Failed to create tools from connector for server '${serverName}': ${toolFetchError}`
5135
+ `Failed to create tools/resources/prompts from connector for server '${serverName}': ${toolFetchError}`
4937
5136
  );
4938
5137
  continue;
4939
5138
  }
5139
+ const allItems = [...tools, ...resources, ...prompts];
4940
5140
  const cachedTools = this.serverTools[serverName];
4941
- const toolsChanged = !cachedTools || !isEqual(cachedTools, tools);
5141
+ const toolsChanged = !cachedTools || !isEqual(cachedTools, allItems);
4942
5142
  if (toolsChanged) {
4943
- this.serverTools[serverName] = tools;
5143
+ this.serverTools[serverName] = allItems;
4944
5144
  this.initializedServers[serverName] = true;
4945
5145
  logger.debug(
4946
- `Prefetched ${tools.length} tools for server '${serverName}'.`
5146
+ `Prefetched ${allItems.length} items for server '${serverName}': ${tools.length} tools, ${resources.length} resources, ${prompts.length} prompts.`
4947
5147
  );
4948
5148
  } else {
4949
5149
  logger.debug(
@@ -5686,9 +5886,18 @@ var MCPAgent = class {
5686
5886
  );
5687
5887
  }
5688
5888
  } else {
5689
- this._tools = await LangChainAdapter.createTools(this.client);
5889
+ const tools = await this.adapter.createToolsFromConnectors(
5890
+ Object.values(this.sessions).map((session) => session.connector)
5891
+ );
5892
+ const resources = await this.adapter.createResourcesFromConnectors(
5893
+ Object.values(this.sessions).map((session) => session.connector)
5894
+ );
5895
+ const prompts = await this.adapter.createPromptsFromConnectors(
5896
+ Object.values(this.sessions).map((session) => session.connector)
5897
+ );
5898
+ this._tools = [...tools, ...resources, ...prompts];
5690
5899
  logger.info(
5691
- `\u{1F6E0}\uFE0F Created ${this._tools.length} LangChain tools from client`
5900
+ `\u{1F6E0}\uFE0F Created ${this._tools.length} LangChain items from client: ${tools.length} tools, ${resources.length} resources, ${prompts.length} prompts`
5692
5901
  );
5693
5902
  }
5694
5903
  this._tools.push(...this.additionalTools);
@@ -5701,12 +5910,19 @@ var MCPAgent = class {
5701
5910
  await connector.connect();
5702
5911
  }
5703
5912
  }
5704
- this._tools = await this.adapter.createToolsFromConnectors(
5913
+ const tools = await this.adapter.createToolsFromConnectors(
5914
+ this.connectors
5915
+ );
5916
+ const resources = await this.adapter.createResourcesFromConnectors(
5917
+ this.connectors
5918
+ );
5919
+ const prompts = await this.adapter.createPromptsFromConnectors(
5705
5920
  this.connectors
5706
5921
  );
5922
+ this._tools = [...tools, ...resources, ...prompts];
5707
5923
  this._tools.push(...this.additionalTools);
5708
5924
  logger.info(
5709
- `\u{1F6E0}\uFE0F Created ${this._tools.length} LangChain tools from connectors`
5925
+ `\u{1F6E0}\uFE0F Created ${this._tools.length} LangChain items from connectors: ${tools.length} tools, ${resources.length} resources, ${prompts.length} prompts`
5710
5926
  );
5711
5927
  }
5712
5928
  logger.info(`\u{1F9F0} Found ${this._tools.length} tools across all connectors`);
@@ -9,28 +9,28 @@ import {
9
9
  MCPAgent,
10
10
  ObservabilityManager,
11
11
  RemoteAgent
12
- } from "../chunk-FDQW3YNK.js";
12
+ } from "../chunk-FAELBZOW.js";
13
13
  import "../chunk-CPG2WZUL.js";
14
14
  import {
15
15
  BrowserMCPClient,
16
16
  HttpConnector,
17
17
  MCPSession,
18
18
  WebSocketConnector
19
- } from "../chunk-R5D3TYBR.js";
19
+ } from "../chunk-KFTQ3UL5.js";
20
20
  import {
21
21
  BrowserOAuthClientProvider,
22
22
  onMcpAuthorization
23
23
  } from "../chunk-J75I2C26.js";
24
24
  import {
25
25
  BaseConnector
26
- } from "../chunk-OA322F7Y.js";
26
+ } from "../chunk-4NC7PPVE.js";
27
27
  import {
28
28
  Tel,
29
29
  Telemetry,
30
30
  VERSION,
31
31
  getPackageVersion,
32
32
  setTelemetrySource
33
- } from "../chunk-VQOIELLO.js";
33
+ } from "../chunk-VTNHO2TS.js";
34
34
  import {
35
35
  Logger,
36
36
  logger
@@ -1,8 +1,8 @@
1
1
  import {
2
2
  PROMPTS
3
- } from "../../chunk-YZTVG5VD.js";
4
- import "../../chunk-OA322F7Y.js";
5
- import "../../chunk-VQOIELLO.js";
3
+ } from "../../chunk-OTZ32HGI.js";
4
+ import "../../chunk-4NC7PPVE.js";
5
+ import "../../chunk-VTNHO2TS.js";
6
6
  import "../../chunk-34R6SIER.js";
7
7
  import "../../chunk-3GQAWCBQ.js";
8
8
  export {
@@ -1 +1 @@
1
- {"version":3,"file":"server_manager.d.ts","sourceRoot":"","sources":["../../../src/managers/server_manager.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,uBAAuB,CAAC;AACrE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAC;AACzE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAG9C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAmDjD,qBAAa,aAAc,YAAW,cAAc;IAClD,SAAgB,kBAAkB,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAM;IACjE,SAAgB,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,uBAAuB,EAAE,CAAC,CAAM;IAE5E,SAAgB,MAAM,EAAE,SAAS,CAAC;IAClC,SAAgB,OAAO,EAAE,gBAAgB,CAAC;IACnC,YAAY,EAAE,MAAM,GAAG,IAAI,CAAQ;IAC1C,OAAO,CAAC,uBAAuB,CAAC,CAA4B;gBAG1D,MAAM,EAAE,SAAS,EACjB,OAAO,EAAE,gBAAgB,EACzB,eAAe,CAAC,EAAE,uBAAuB,EAAE;IAOtC,kBAAkB,CAAC,KAAK,EAAE,uBAAuB,EAAE,GAAG,IAAI;IAO1D,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAqBtC,UAAU,IAAI,IAAI;IAOZ,mBAAmB,IAAI,OAAO,CAAC,IAAI,CAAC;IA8D1C,IAAI,KAAK,IAAI,uBAAuB,EAAE,CAsBrC;CACF"}
1
+ {"version":3,"file":"server_manager.d.ts","sourceRoot":"","sources":["../../../src/managers/server_manager.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,uBAAuB,CAAC;AACrE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAC;AACzE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAG9C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAmDjD,qBAAa,aAAc,YAAW,cAAc;IAClD,SAAgB,kBAAkB,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAM;IACjE,SAAgB,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,uBAAuB,EAAE,CAAC,CAAM;IAE5E,SAAgB,MAAM,EAAE,SAAS,CAAC;IAClC,SAAgB,OAAO,EAAE,gBAAgB,CAAC;IACnC,YAAY,EAAE,MAAM,GAAG,IAAI,CAAQ;IAC1C,OAAO,CAAC,uBAAuB,CAAC,CAA4B;gBAG1D,MAAM,EAAE,SAAS,EACjB,OAAO,EAAE,gBAAgB,EACzB,eAAe,CAAC,EAAE,uBAAuB,EAAE;IAOtC,kBAAkB,CAAC,KAAK,EAAE,uBAAuB,EAAE,GAAG,IAAI;IAO1D,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAqBtC,UAAU,IAAI,IAAI;IAOZ,mBAAmB,IAAI,OAAO,CAAC,IAAI,CAAC;IAwE1C,IAAI,KAAK,IAAI,uBAAuB,EAAE,CAsBrC;CACF"}
@@ -1 +1 @@
1
- {"version":3,"file":"connect_mcp_server.d.ts","sourceRoot":"","sources":["../../../../src/managers/tools/connect_mcp_server.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAClD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAC/C,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAE1C,QAAA,MAAM,sBAAsB;;iBAE1B,CAAC;AAEH,qBAAa,oBAAqB,SAAQ,aAAa,CACrD,OAAO,sBAAsB,CAC9B;IACU,IAAI,SAA2B;IAC/B,WAAW,SAC6H;IACxI,MAAM;;sBAA0B;gBAE7B,OAAO,EAAE,cAAc;IAI7B,KAAK,CAAC,EAAE,UAAU,EAAE,EAAE,aAAa,CAAC,OAAO,sBAAsB,CAAC;CAuCzE"}
1
+ {"version":3,"file":"connect_mcp_server.d.ts","sourceRoot":"","sources":["../../../../src/managers/tools/connect_mcp_server.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAClD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAC/C,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAE1C,QAAA,MAAM,sBAAsB;;iBAE1B,CAAC;AAEH,qBAAa,oBAAqB,SAAQ,aAAa,CACrD,OAAO,sBAAsB,CAC9B;IACU,IAAI,SAA2B;IAC/B,WAAW,SAC6H;IACxI,MAAM;;sBAA0B;gBAE7B,OAAO,EAAE,cAAc;IAI7B,KAAK,CAAC,EAAE,UAAU,EAAE,EAAE,aAAa,CAAC,OAAO,sBAAsB,CAAC;CAgDzE"}
@@ -876,7 +876,7 @@ function generateUUID() {
876
876
  __name(generateUUID, "generateUUID");
877
877
 
878
878
  // src/version.ts
879
- var VERSION = "1.10.1-canary.0";
879
+ var VERSION = "1.10.1-canary.2";
880
880
  function getPackageVersion() {
881
881
  return VERSION;
882
882
  }
@@ -9,17 +9,17 @@ import {
9
9
  useWidgetProps,
10
10
  useWidgetState,
11
11
  useWidgetTheme
12
- } from "../../chunk-IU5NGAVG.js";
13
- import "../../chunk-R5D3TYBR.js";
12
+ } from "../../chunk-CFX74U7W.js";
13
+ import "../../chunk-KFTQ3UL5.js";
14
14
  import {
15
15
  onMcpAuthorization
16
16
  } from "../../chunk-J75I2C26.js";
17
- import "../../chunk-OA322F7Y.js";
17
+ import "../../chunk-4NC7PPVE.js";
18
18
  import {
19
19
  Tel,
20
20
  Telemetry,
21
21
  setTelemetrySource
22
- } from "../../chunk-VQOIELLO.js";
22
+ } from "../../chunk-VTNHO2TS.js";
23
23
  import "../../chunk-34R6SIER.js";
24
24
  import "../../chunk-3GQAWCBQ.js";
25
25
  export {
@@ -1 +1 @@
1
- {"version":3,"file":"mount-mcp.d.ts","sourceRoot":"","sources":["../../../../src/server/endpoints/mount-mcp.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAW,IAAI,IAAI,QAAQ,EAAE,MAAM,MAAM,CAAC;AACtD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAExD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAItD;;;;;GAKG;AACH,wBAAsB,QAAQ,CAC5B,GAAG,EAAE,QAAQ,EACb,iBAAiB,EAAE;IACjB,mBAAmB,EAAE,MAAM,OAAO,iDAAiD,EAAE,SAAS,CAAC;IAC/F,2BAA2B,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,IAAI,CAAC;CAC3D,EAAE,2DAA2D;AAC9D,QAAQ,EAAE,GAAG,CAAC,MAAM,EAAE,WAAW,CAAC,EAClC,MAAM,EAAE,YAAY,EACpB,gBAAgB,EAAE,OAAO,GACxB,OAAO,CAAC;IAAE,UAAU,EAAE,OAAO,CAAC;IAAC,mBAAmB,CAAC,EAAE,MAAM,CAAC,OAAO,CAAA;CAAE,CAAC,CAgHxE"}
1
+ {"version":3,"file":"mount-mcp.d.ts","sourceRoot":"","sources":["../../../../src/server/endpoints/mount-mcp.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAW,IAAI,IAAI,QAAQ,EAAE,MAAM,MAAM,CAAC;AACtD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAExD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAItD;;;;;GAKG;AACH,wBAAsB,QAAQ,CAC5B,GAAG,EAAE,QAAQ,EACb,iBAAiB,EAAE;IACjB,mBAAmB,EAAE,MAAM,OAAO,iDAAiD,EAAE,SAAS,CAAC;IAC/F,2BAA2B,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,IAAI,CAAC;CAC3D,EAAE,2DAA2D;AAC9D,QAAQ,EAAE,GAAG,CAAC,MAAM,EAAE,WAAW,CAAC,EAClC,MAAM,EAAE,YAAY,EACpB,gBAAgB,EAAE,OAAO,GACxB,OAAO,CAAC;IAAE,UAAU,EAAE,OAAO,CAAC;IAAC,mBAAmB,CAAC,EAAE,MAAM,CAAC,OAAO,CAAA;CAAE,CAAC,CAyHxE"}
@@ -761,7 +761,7 @@ var VERSION;
761
761
  var init_version = __esm({
762
762
  "src/version.ts"() {
763
763
  "use strict";
764
- VERSION = "1.10.1-canary.0";
764
+ VERSION = "1.10.1-canary.2";
765
765
  __name(getPackageVersion, "getPackageVersion");
766
766
  }
767
767
  });
@@ -4632,7 +4632,7 @@ init_tool_execution_helpers();
4632
4632
  init_context_storage();
4633
4633
 
4634
4634
  // src/server/sessions/session-manager.ts
4635
- function startIdleCleanup(sessions, idleTimeoutMs, mcpServerInstance) {
4635
+ function startIdleCleanup(sessions, idleTimeoutMs, transports, mcpServerInstance) {
4636
4636
  if (idleTimeoutMs <= 0) {
4637
4637
  return void 0;
4638
4638
  }
@@ -4649,8 +4649,21 @@ function startIdleCleanup(sessions, idleTimeoutMs, mcpServerInstance) {
4649
4649
  `[MCP] Cleaning up ${expiredSessions.length} idle session(s)`
4650
4650
  );
4651
4651
  for (const sessionId of expiredSessions) {
4652
+ const transport = transports?.get(sessionId);
4653
+ if (transport?.close) {
4654
+ Promise.resolve(transport.close()).catch((e) => {
4655
+ console.warn(
4656
+ `[MCP] Error closing transport for session ${sessionId}:`,
4657
+ e
4658
+ );
4659
+ });
4660
+ }
4661
+ transports?.delete(sessionId);
4652
4662
  sessions.delete(sessionId);
4653
4663
  mcpServerInstance?.cleanupSessionSubscriptions?.(sessionId);
4664
+ console.log(
4665
+ `[MCP] Cleaned up resource subscriptions for session ${sessionId}`
4666
+ );
4654
4667
  }
4655
4668
  }
4656
4669
  }, 6e4);
@@ -4669,11 +4682,18 @@ async function mountMcp(app, mcpServerInstance, sessions, config, isProductionMo
4669
4682
  idleCleanupInterval = startIdleCleanup(
4670
4683
  sessions,
4671
4684
  idleTimeoutMs,
4685
+ transports,
4672
4686
  mcpServerInstance
4673
4687
  );
4674
4688
  }
4675
4689
  const handleRequest = /* @__PURE__ */ __name(async (c) => {
4676
4690
  const sessionId = c.req.header("mcp-session-id");
4691
+ if (c.req.method === "HEAD") {
4692
+ if (sessionId && sessions.has(sessionId)) {
4693
+ sessions.get(sessionId).lastAccessedAt = Date.now();
4694
+ }
4695
+ return new Response(null, { status: 200 });
4696
+ }
4677
4697
  if (sessionId && transports.has(sessionId)) {
4678
4698
  const transport2 = transports.get(sessionId);
4679
4699
  if (sessions.has(sessionId)) {
@@ -4730,7 +4750,7 @@ async function mountMcp(app, mcpServerInstance, sessions, config, isProductionMo
4730
4750
  return transport.handleRequest(c.req.raw);
4731
4751
  }, "handleRequest");
4732
4752
  for (const endpoint of ["/mcp", "/sse"]) {
4733
- app.on(["GET", "POST", "DELETE"], endpoint, handleRequest);
4753
+ app.on(["GET", "POST", "DELETE", "HEAD"], endpoint, handleRequest);
4734
4754
  }
4735
4755
  console.log(
4736
4756
  `[MCP] Server mounted at /mcp and /sse (using FetchStreamableHTTPServerTransport - Web Standard APIs)`
@@ -7,7 +7,7 @@ import {
7
7
  createEnhancedContext,
8
8
  findSessionContext,
9
9
  isValidLogLevel
10
- } from "../../chunk-77LT3TOS.js";
10
+ } from "../../chunk-QNZMNQCY.js";
11
11
  import {
12
12
  convertToolResultToResourceResult
13
13
  } from "../../chunk-362PI25Z.js";
@@ -25,7 +25,7 @@ import {
25
25
  getPackageVersion,
26
26
  isDeno,
27
27
  pathHelpers
28
- } from "../../chunk-VQOIELLO.js";
28
+ } from "../../chunk-VTNHO2TS.js";
29
29
  import "../../chunk-34R6SIER.js";
30
30
  import {
31
31
  __name
@@ -2091,7 +2091,7 @@ function registerResource(resourceDefinition, callback) {
2091
2091
  const explicitMimeType = resourceDefinition.mimeType;
2092
2092
  const wrappedCallback = /* @__PURE__ */ __name(async () => {
2093
2093
  const { getRequestContext: getRequestContext2, runWithContext: runWithContext2 } = await import("../../context-storage-NA4MHWOZ.js");
2094
- const { findSessionContext: findSessionContext2 } = await import("../../tool-execution-helpers-CYX4UNR7.js");
2094
+ const { findSessionContext: findSessionContext2 } = await import("../../tool-execution-helpers-PQGEPYY3.js");
2095
2095
  const initialRequestContext = getRequestContext2();
2096
2096
  const sessions = this.sessions || /* @__PURE__ */ new Map();
2097
2097
  const { requestContext } = findSessionContext2(
@@ -2169,7 +2169,7 @@ function registerResourceTemplate(resourceTemplateDefinition, callback) {
2169
2169
  async (uri) => {
2170
2170
  const params = this.parseTemplateUri(uriTemplate, uri.toString());
2171
2171
  const { getRequestContext: getRequestContext2, runWithContext: runWithContext2 } = await import("../../context-storage-NA4MHWOZ.js");
2172
- const { findSessionContext: findSessionContext2 } = await import("../../tool-execution-helpers-CYX4UNR7.js");
2172
+ const { findSessionContext: findSessionContext2 } = await import("../../tool-execution-helpers-PQGEPYY3.js");
2173
2173
  const initialRequestContext = getRequestContext2();
2174
2174
  const sessions = this.sessions || /* @__PURE__ */ new Map();
2175
2175
  const { requestContext } = findSessionContext2(
@@ -2224,7 +2224,7 @@ function registerPrompt(promptDefinition, callback) {
2224
2224
  }
2225
2225
  const wrappedCallback = /* @__PURE__ */ __name(async (params, extra) => {
2226
2226
  const { getRequestContext: getRequestContext2, runWithContext: runWithContext2 } = await import("../../context-storage-NA4MHWOZ.js");
2227
- const { findSessionContext: findSessionContext2 } = await import("../../tool-execution-helpers-CYX4UNR7.js");
2227
+ const { findSessionContext: findSessionContext2 } = await import("../../tool-execution-helpers-PQGEPYY3.js");
2228
2228
  const initialRequestContext = getRequestContext2();
2229
2229
  const sessions = this.sessions || /* @__PURE__ */ new Map();
2230
2230
  const { requestContext } = findSessionContext2(
@@ -2495,7 +2495,7 @@ async function sendNotificationToSession2(sessionId, method, params) {
2495
2495
  __name(sendNotificationToSession2, "sendNotificationToSession");
2496
2496
 
2497
2497
  // src/server/sessions/session-manager.ts
2498
- function startIdleCleanup(sessions, idleTimeoutMs, mcpServerInstance) {
2498
+ function startIdleCleanup(sessions, idleTimeoutMs, transports, mcpServerInstance) {
2499
2499
  if (idleTimeoutMs <= 0) {
2500
2500
  return void 0;
2501
2501
  }
@@ -2512,8 +2512,21 @@ function startIdleCleanup(sessions, idleTimeoutMs, mcpServerInstance) {
2512
2512
  `[MCP] Cleaning up ${expiredSessions.length} idle session(s)`
2513
2513
  );
2514
2514
  for (const sessionId of expiredSessions) {
2515
+ const transport = transports?.get(sessionId);
2516
+ if (transport?.close) {
2517
+ Promise.resolve(transport.close()).catch((e) => {
2518
+ console.warn(
2519
+ `[MCP] Error closing transport for session ${sessionId}:`,
2520
+ e
2521
+ );
2522
+ });
2523
+ }
2524
+ transports?.delete(sessionId);
2515
2525
  sessions.delete(sessionId);
2516
2526
  mcpServerInstance?.cleanupSessionSubscriptions?.(sessionId);
2527
+ console.log(
2528
+ `[MCP] Cleaned up resource subscriptions for session ${sessionId}`
2529
+ );
2517
2530
  }
2518
2531
  }
2519
2532
  }, 6e4);
@@ -2530,11 +2543,18 @@ async function mountMcp(app, mcpServerInstance, sessions, config, isProductionMo
2530
2543
  idleCleanupInterval = startIdleCleanup(
2531
2544
  sessions,
2532
2545
  idleTimeoutMs,
2546
+ transports,
2533
2547
  mcpServerInstance
2534
2548
  );
2535
2549
  }
2536
2550
  const handleRequest = /* @__PURE__ */ __name(async (c) => {
2537
2551
  const sessionId = c.req.header("mcp-session-id");
2552
+ if (c.req.method === "HEAD") {
2553
+ if (sessionId && sessions.has(sessionId)) {
2554
+ sessions.get(sessionId).lastAccessedAt = Date.now();
2555
+ }
2556
+ return new Response(null, { status: 200 });
2557
+ }
2538
2558
  if (sessionId && transports.has(sessionId)) {
2539
2559
  const transport2 = transports.get(sessionId);
2540
2560
  if (sessions.has(sessionId)) {
@@ -2591,7 +2611,7 @@ async function mountMcp(app, mcpServerInstance, sessions, config, isProductionMo
2591
2611
  return transport.handleRequest(c.req.raw);
2592
2612
  }, "handleRequest");
2593
2613
  for (const endpoint of ["/mcp", "/sse"]) {
2594
- app.on(["GET", "POST", "DELETE"], endpoint, handleRequest);
2614
+ app.on(["GET", "POST", "DELETE", "HEAD"], endpoint, handleRequest);
2595
2615
  }
2596
2616
  console.log(
2597
2617
  `[MCP] Server mounted at /mcp and /sse (using FetchStreamableHTTPServerTransport - Web Standard APIs)`
@@ -40,14 +40,17 @@ export interface SessionData {
40
40
  * Start idle session cleanup interval
41
41
  *
42
42
  * Monitors sessions and removes them if they've been inactive for too long.
43
- * Note: This only cleans up our session metadata. The transport manages
44
- * its own session state.
43
+ * Also cleans up the associated transports to prevent "Server not initialized" errors
44
+ * when clients try to reconnect with expired session IDs.
45
45
  *
46
46
  * @param sessions - Map of active sessions
47
47
  * @param idleTimeoutMs - Idle timeout in milliseconds
48
+ * @param transports - Optional map of transports by session ID (to close on cleanup)
48
49
  * @param mcpServerInstance - Optional MCP server instance for cleanup callbacks
49
50
  */
50
- export declare function startIdleCleanup(sessions: Map<string, SessionData>, idleTimeoutMs: number, mcpServerInstance?: {
51
+ export declare function startIdleCleanup(sessions: Map<string, SessionData>, idleTimeoutMs: number, transports?: Map<string, {
52
+ close?: () => Promise<void> | void;
53
+ }>, mcpServerInstance?: {
51
54
  cleanupSessionSubscriptions?: (sessionId: string) => void;
52
55
  }): NodeJS.Timeout | undefined;
53
56
  //# sourceMappingURL=session-manager.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"session-manager.d.ts","sourceRoot":"","sources":["../../../../src/server/sessions/session-manager.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AACpC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,uDAAuD,CAAC;AACvF,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iDAAiD,CAAC;AAEjF;;;GAGG;AACH,MAAM,WAAW,WAAW;IAC1B,qDAAqD;IACrD,SAAS,EAAE,SAAS,CAAC;IACrB,kDAAkD;IAClD,MAAM,CAAC,EAAE,SAAS,CAAC;IACnB,2DAA2D;IAC3D,cAAc,EAAE,MAAM,CAAC;IACvB,sDAAsD;IACtD,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,oDAAoD;IACpD,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,mDAAmD;IACnD,gBAAgB,CAAC,EAAE,CAAC,YAAY,EAAE;QAChC,MAAM,EAAE,MAAM,CAAC;QACf,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;KACjC,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACpB,qDAAqD;IACrD,UAAU,CAAC,EAAE,QAAQ,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAChD,8CAA8C;IAC9C,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,qEAAqE;IACrE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,2DAA2D;IAC3D,kBAAkB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAC9C;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,gBAAgB,CAC9B,QAAQ,EAAE,GAAG,CAAC,MAAM,EAAE,WAAW,CAAC,EAClC,aAAa,EAAE,MAAM,EACrB,iBAAiB,CAAC,EAAE;IAClB,2BAA2B,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,IAAI,CAAC;CAC3D,GACA,MAAM,CAAC,OAAO,GAAG,SAAS,CA0B5B"}
1
+ {"version":3,"file":"session-manager.d.ts","sourceRoot":"","sources":["../../../../src/server/sessions/session-manager.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AACpC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,uDAAuD,CAAC;AACvF,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iDAAiD,CAAC;AAEjF;;;GAGG;AACH,MAAM,WAAW,WAAW;IAC1B,qDAAqD;IACrD,SAAS,EAAE,SAAS,CAAC;IACrB,kDAAkD;IAClD,MAAM,CAAC,EAAE,SAAS,CAAC;IACnB,2DAA2D;IAC3D,cAAc,EAAE,MAAM,CAAC;IACvB,sDAAsD;IACtD,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,oDAAoD;IACpD,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,mDAAmD;IACnD,gBAAgB,CAAC,EAAE,CAAC,YAAY,EAAE;QAChC,MAAM,EAAE,MAAM,CAAC;QACf,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;KACjC,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACpB,qDAAqD;IACrD,UAAU,CAAC,EAAE,QAAQ,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAChD,8CAA8C;IAC9C,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,qEAAqE;IACrE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,2DAA2D;IAC3D,kBAAkB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAC9C;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,gBAAgB,CAC9B,QAAQ,EAAE,GAAG,CAAC,MAAM,EAAE,WAAW,CAAC,EAClC,aAAa,EAAE,MAAM,EACrB,UAAU,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE;IAAE,KAAK,CAAC,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAA;CAAE,CAAC,EAChE,iBAAiB,CAAC,EAAE;IAClB,2BAA2B,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,IAAI,CAAC;CAC3D,GACA,MAAM,CAAC,OAAO,GAAG,SAAS,CAyC5B"}
@@ -1,4 +1,4 @@
1
- export declare const VERSION = "1.10.1-canary.0";
1
+ export declare const VERSION = "1.10.1-canary.2";
2
2
  /**
3
3
  * Get the package version.
4
4
  * The version is embedded at build time via scripts/generate-version.mjs
@@ -10,9 +10,9 @@ import {
10
10
  sendProgressNotification,
11
11
  shouldLogMessage,
12
12
  withTimeout
13
- } from "./chunk-77LT3TOS.js";
13
+ } from "./chunk-QNZMNQCY.js";
14
14
  import "./chunk-KUEVOU4M.js";
15
- import "./chunk-VQOIELLO.js";
15
+ import "./chunk-VTNHO2TS.js";
16
16
  import "./chunk-34R6SIER.js";
17
17
  import "./chunk-3GQAWCBQ.js";
18
18
  export {
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "mcp-use",
3
3
  "type": "module",
4
- "version": "1.10.1-canary.0",
4
+ "version": "1.10.1-canary.2",
5
5
  "description": "Opinionated MCP Framework for TypeScript (@modelcontextprotocol/sdk compatible) - Build MCP Agents, Clients and Servers with support for ChatGPT Apps, Code Mode, OAuth, Notifications, Sampling, Observability and more.",
6
6
  "author": "mcp-use, Inc.",
7
7
  "license": "MIT",
@@ -115,8 +115,8 @@
115
115
  "posthog-node": "^5.14.1",
116
116
  "ws": "^8.18.3",
117
117
  "zod": "^4.1.13",
118
- "@mcp-use/cli": "2.5.1-canary.0",
119
- "@mcp-use/inspector": "0.12.1-canary.0"
118
+ "@mcp-use/cli": "2.5.1-canary.2",
119
+ "@mcp-use/inspector": "0.12.1-canary.2"
120
120
  },
121
121
  "optionalDependencies": {
122
122
  "chalk": "^5.6.2",