mcp-use 1.10.1-canary.1 → 1.11.0-canary.3

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 (51) hide show
  1. package/README.md +1 -1
  2. package/dist/.tsbuildinfo +1 -1
  3. package/dist/{chunk-BXYYBPWE.js → chunk-BONN23WU.js} +2 -2
  4. package/dist/{chunk-K6EZ46MT.js → chunk-DKLRVWPJ.js} +1 -1
  5. package/dist/{chunk-BO2DLS2U.js → chunk-FDWI2WVM.js} +21 -287
  6. package/dist/{chunk-34R6SIER.js → chunk-FRUZDWXH.js} +1 -1
  7. package/dist/{chunk-CPG2WZUL.js → chunk-JRGQRPTN.js} +1 -1
  8. package/dist/{chunk-3WQPXSMB.js → chunk-KZL3RCT6.js} +4 -4
  9. package/dist/{chunk-ES5N2BQY.js → chunk-TZ7SHSRY.js} +2 -2
  10. package/dist/{chunk-IVXE5QZD.js → chunk-WFPXUU4A.js} +1 -1
  11. package/dist/{chunk-NS7PNUAI.js → chunk-YIZWQ5PM.js} +16 -2
  12. package/dist/index.cjs +34 -296
  13. package/dist/index.d.ts +1 -2
  14. package/dist/index.d.ts.map +1 -1
  15. package/dist/index.js +9 -18
  16. package/dist/{langfuse-N5Y5BSXK.js → langfuse-74RGPTAH.js} +2 -2
  17. package/dist/src/agents/index.cjs +2 -2
  18. package/dist/src/agents/index.js +6 -6
  19. package/dist/src/browser.cjs +34 -289
  20. package/dist/src/browser.d.ts +0 -1
  21. package/dist/src/browser.d.ts.map +1 -1
  22. package/dist/src/browser.js +7 -9
  23. package/dist/src/client/browser.d.ts +2 -2
  24. package/dist/src/client/browser.d.ts.map +1 -1
  25. package/dist/src/client/prompts.cjs +1 -1
  26. package/dist/src/client/prompts.js +4 -4
  27. package/dist/src/config.d.ts.map +1 -1
  28. package/dist/src/connectors/base.d.ts +8 -0
  29. package/dist/src/connectors/base.d.ts.map +1 -1
  30. package/dist/src/connectors/index.d.ts +0 -1
  31. package/dist/src/connectors/index.d.ts.map +1 -1
  32. package/dist/src/react/index.cjs +34 -284
  33. package/dist/src/react/index.js +5 -5
  34. package/dist/src/react/types.d.ts +1 -3
  35. package/dist/src/react/types.d.ts.map +1 -1
  36. package/dist/src/server/endpoints/mount-mcp.d.ts.map +1 -1
  37. package/dist/src/server/index.cjs +24 -4
  38. package/dist/src/server/index.js +28 -8
  39. package/dist/src/server/sessions/session-manager.d.ts +6 -3
  40. package/dist/src/server/sessions/session-manager.d.ts.map +1 -1
  41. package/dist/src/session.d.ts +14 -0
  42. package/dist/src/session.d.ts.map +1 -1
  43. package/dist/src/task_managers/index.d.ts +0 -1
  44. package/dist/src/task_managers/index.d.ts.map +1 -1
  45. package/dist/src/version.d.ts +1 -1
  46. package/dist/{tool-execution-helpers-G74FG2CI.js → tool-execution-helpers-HNASWGXY.js} +3 -3
  47. package/package.json +17 -10
  48. package/dist/src/connectors/websocket.d.ts +0 -38
  49. package/dist/src/connectors/websocket.d.ts.map +0 -1
  50. package/dist/src/task_managers/websocket.d.ts +0 -18
  51. package/dist/src/task_managers/websocket.d.ts.map +0 -1
@@ -246,7 +246,7 @@ var Logger = class {
246
246
  timestamp({ format: "HH:mm:ss" }),
247
247
  this.getFormatter()
248
248
  ),
249
- transports: []
249
+ transports: [new winston.transports.Console()]
250
250
  });
251
251
  }
252
252
  return this.instances[name];
@@ -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.1";
879
+ var VERSION = "1.11.0-canary.3";
880
880
  function getPackageVersion() {
881
881
  return VERSION;
882
882
  }
@@ -1806,6 +1806,20 @@ var BaseConnector = class {
1806
1806
  logger.debug(`Tool '${name}' returned`, res);
1807
1807
  return res;
1808
1808
  }
1809
+ /**
1810
+ * List all available tools from the MCP server.
1811
+ * This method fetches fresh tools from the server, unlike the `tools` getter which returns cached tools.
1812
+ *
1813
+ * @param options - Optional request options
1814
+ * @returns Array of available tools
1815
+ */
1816
+ async listTools(options) {
1817
+ if (!this.client) {
1818
+ throw new Error("MCP client is not connected");
1819
+ }
1820
+ const result = await this.client.listTools(void 0, options);
1821
+ return result.tools ?? [];
1822
+ }
1809
1823
  /**
1810
1824
  * List resources from the server with optional pagination
1811
1825
  *
@@ -2249,279 +2263,6 @@ var HttpConnector = class extends BaseConnector {
2249
2263
  }
2250
2264
  };
2251
2265
 
2252
- // src/task_managers/websocket.ts
2253
- var import_ws = __toESM(require("ws"), 1);
2254
- var WebSocketConnectionManager = class extends ConnectionManager {
2255
- static {
2256
- __name(this, "WebSocketConnectionManager");
2257
- }
2258
- url;
2259
- headers;
2260
- _ws = null;
2261
- /**
2262
- * @param url The WebSocket URL to connect to.
2263
- * @param headers Optional headers to include in the connection handshake.
2264
- */
2265
- constructor(url, headers = {}) {
2266
- super();
2267
- this.url = url;
2268
- this.headers = headers;
2269
- }
2270
- /** Establish a WebSocket connection and wait until it is open. */
2271
- async establishConnection() {
2272
- logger.debug(`Connecting to WebSocket: ${this.url}`);
2273
- return new Promise((resolve, reject) => {
2274
- const ws = new import_ws.default(this.url, {
2275
- headers: this.headers
2276
- });
2277
- this._ws = ws;
2278
- const onOpen = /* @__PURE__ */ __name(() => {
2279
- cleanup();
2280
- logger.debug("WebSocket connected successfully");
2281
- resolve(ws);
2282
- }, "onOpen");
2283
- const onError = /* @__PURE__ */ __name((err) => {
2284
- cleanup();
2285
- logger.error(`Failed to connect to WebSocket: ${err}`);
2286
- reject(err);
2287
- }, "onError");
2288
- const cleanup = /* @__PURE__ */ __name(() => {
2289
- ws.off("open", onOpen);
2290
- ws.off("error", onError);
2291
- }, "cleanup");
2292
- ws.on("open", onOpen);
2293
- ws.on("error", onError);
2294
- });
2295
- }
2296
- /** Cleanly close the WebSocket connection. */
2297
- async closeConnection(connection) {
2298
- logger.debug("Closing WebSocket connection");
2299
- return new Promise((resolve) => {
2300
- const onClose = /* @__PURE__ */ __name(() => {
2301
- connection.off("close", onClose);
2302
- this._ws = null;
2303
- resolve();
2304
- }, "onClose");
2305
- if (connection.readyState === import_ws.default.CLOSED) {
2306
- onClose();
2307
- return;
2308
- }
2309
- connection.on("close", onClose);
2310
- try {
2311
- connection.close();
2312
- } catch (e) {
2313
- logger.warn(`Error closing WebSocket connection: ${e}`);
2314
- onClose();
2315
- }
2316
- });
2317
- }
2318
- };
2319
-
2320
- // src/connectors/websocket.ts
2321
- var WebSocketConnector = class extends BaseConnector {
2322
- static {
2323
- __name(this, "WebSocketConnector");
2324
- }
2325
- url;
2326
- headers;
2327
- connectionManager = null;
2328
- ws = null;
2329
- receiverTask = null;
2330
- pending = /* @__PURE__ */ new Map();
2331
- toolsCache = null;
2332
- constructor(url, opts = {}) {
2333
- super();
2334
- this.url = url;
2335
- this.headers = { ...opts.headers ?? {} };
2336
- if (opts.authToken) this.headers.Authorization = `Bearer ${opts.authToken}`;
2337
- }
2338
- async connect() {
2339
- if (this.connected) {
2340
- logger.debug("Already connected to MCP implementation");
2341
- return;
2342
- }
2343
- logger.debug(`Connecting via WebSocket: ${this.url}`);
2344
- try {
2345
- this.connectionManager = new WebSocketConnectionManager(
2346
- this.url,
2347
- this.headers
2348
- );
2349
- this.ws = await this.connectionManager.start();
2350
- this.receiverTask = this.receiveLoop();
2351
- this.connected = true;
2352
- logger.debug("WebSocket connected successfully");
2353
- } catch (e) {
2354
- logger.error(`Failed to connect: ${e}`);
2355
- await this.cleanupResources();
2356
- throw e;
2357
- }
2358
- }
2359
- async disconnect() {
2360
- if (!this.connected) {
2361
- logger.debug("Not connected to MCP implementation");
2362
- return;
2363
- }
2364
- logger.debug("Disconnecting \u2026");
2365
- await this.cleanupResources();
2366
- this.connected = false;
2367
- }
2368
- sendRequest(method, params = null) {
2369
- if (!this.ws) throw new Error("WebSocket is not connected");
2370
- const id = generateUUID();
2371
- const payload = JSON.stringify({ id, method, params: params ?? {} });
2372
- return new Promise((resolve, reject) => {
2373
- this.pending.set(id, { resolve, reject });
2374
- this.ws.send(payload, (err) => {
2375
- if (err) {
2376
- this.pending.delete(id);
2377
- reject(err);
2378
- }
2379
- });
2380
- });
2381
- }
2382
- async receiveLoop() {
2383
- if (!this.ws) return;
2384
- const socket = this.ws;
2385
- const onMessage = /* @__PURE__ */ __name((msg) => {
2386
- let data;
2387
- try {
2388
- data = JSON.parse(msg.data ?? msg);
2389
- } catch (e) {
2390
- logger.warn("Received non\u2011JSON frame", e);
2391
- return;
2392
- }
2393
- const id = data.id;
2394
- if (id && this.pending.has(id)) {
2395
- const { resolve, reject } = this.pending.get(id);
2396
- this.pending.delete(id);
2397
- if ("result" in data) resolve(data.result);
2398
- else if ("error" in data) reject(data.error);
2399
- } else if (data.method && !data.id) {
2400
- logger.debug("Received notification", data.method, data.params);
2401
- this.handleNotification(data);
2402
- } else {
2403
- logger.debug("Received unsolicited message", data);
2404
- }
2405
- }, "onMessage");
2406
- if (socket.addEventListener) {
2407
- socket.addEventListener("message", onMessage);
2408
- } else {
2409
- socket.on("message", onMessage);
2410
- }
2411
- return new Promise((resolve) => {
2412
- const onClose = /* @__PURE__ */ __name(() => {
2413
- if (socket.removeEventListener) {
2414
- socket.removeEventListener("message", onMessage);
2415
- } else {
2416
- socket.off("message", onMessage);
2417
- }
2418
- this.rejectAll(new Error("WebSocket closed"));
2419
- resolve();
2420
- }, "onClose");
2421
- if (socket.addEventListener) {
2422
- socket.addEventListener("close", onClose);
2423
- } else {
2424
- socket.on("close", onClose);
2425
- }
2426
- });
2427
- }
2428
- rejectAll(err) {
2429
- for (const { reject } of this.pending.values()) reject(err);
2430
- this.pending.clear();
2431
- }
2432
- async handleNotification(data) {
2433
- switch (data.method) {
2434
- case "notifications/tools/list_changed":
2435
- await this.refreshToolsCache();
2436
- break;
2437
- case "notifications/resources/list_changed":
2438
- await this.onResourcesListChanged();
2439
- break;
2440
- case "notifications/prompts/list_changed":
2441
- await this.onPromptsListChanged();
2442
- break;
2443
- default:
2444
- break;
2445
- }
2446
- for (const handler of this.notificationHandlers) {
2447
- try {
2448
- await handler({
2449
- method: data.method,
2450
- params: data.params
2451
- });
2452
- } catch (err) {
2453
- logger.error("Error in notification handler:", err);
2454
- }
2455
- }
2456
- }
2457
- /**
2458
- * Auto-refresh tools cache when server sends tools/list_changed notification
2459
- * Override to use WebSocket-specific listTools method
2460
- */
2461
- async refreshToolsCache() {
2462
- try {
2463
- logger.debug(
2464
- "[Auto] Refreshing tools cache due to list_changed notification"
2465
- );
2466
- const tools = await this.listTools();
2467
- this.toolsCache = tools.map((t) => t);
2468
- logger.debug(
2469
- `[Auto] Refreshed tools cache: ${this.toolsCache.length} tools`
2470
- );
2471
- } catch (err) {
2472
- logger.warn("[Auto] Failed to refresh tools cache:", err);
2473
- }
2474
- }
2475
- async initialize() {
2476
- logger.debug("Initializing MCP session over WebSocket");
2477
- const result = await this.sendRequest("initialize");
2478
- const toolsList = await this.listTools();
2479
- this.toolsCache = toolsList.map((t) => t);
2480
- logger.debug(`Initialized with ${this.toolsCache.length} tools`);
2481
- return result;
2482
- }
2483
- async listTools() {
2484
- const res = await this.sendRequest("tools/list");
2485
- return res.tools ?? [];
2486
- }
2487
- async callTool(name, args) {
2488
- return await this.sendRequest("tools/call", { name, arguments: args });
2489
- }
2490
- async listResources() {
2491
- const resources = await this.sendRequest("resources/list");
2492
- return { resources: Array.isArray(resources) ? resources : [] };
2493
- }
2494
- async readResource(uri) {
2495
- const res = await this.sendRequest("resources/read", { uri });
2496
- return res;
2497
- }
2498
- async request(method, params = null) {
2499
- return await this.sendRequest(method, params);
2500
- }
2501
- get tools() {
2502
- if (!this.toolsCache) throw new Error("MCP client is not initialized");
2503
- return this.toolsCache;
2504
- }
2505
- async cleanupResources() {
2506
- if (this.receiverTask) await this.receiverTask.catch(() => {
2507
- });
2508
- this.receiverTask = null;
2509
- this.rejectAll(new Error("WebSocket disconnected"));
2510
- if (this.connectionManager) {
2511
- await this.connectionManager.stop();
2512
- this.connectionManager = null;
2513
- this.ws = null;
2514
- }
2515
- this.toolsCache = null;
2516
- }
2517
- get publicIdentifier() {
2518
- return {
2519
- type: "websocket",
2520
- url: this.url
2521
- };
2522
- }
2523
- };
2524
-
2525
2266
  // src/session.ts
2526
2267
  var MCPSession = class {
2527
2268
  static {
@@ -2607,6 +2348,22 @@ var MCPSession = class {
2607
2348
  get tools() {
2608
2349
  return this.connector.tools;
2609
2350
  }
2351
+ /**
2352
+ * List all available tools from the MCP server.
2353
+ * This method fetches fresh tools from the server, unlike the `tools` getter which returns cached tools.
2354
+ *
2355
+ * @param options - Optional request options
2356
+ * @returns Array of available tools
2357
+ *
2358
+ * @example
2359
+ * ```typescript
2360
+ * const tools = await session.listTools();
2361
+ * console.log(`Available tools: ${tools.map(t => t.name).join(", ")}`);
2362
+ * ```
2363
+ */
2364
+ async listTools(options) {
2365
+ return this.connector.listTools(options);
2366
+ }
2610
2367
  /**
2611
2368
  * Get the server capabilities advertised during initialization.
2612
2369
  *
@@ -2937,12 +2694,11 @@ var BrowserMCPClient = class _BrowserMCPClient extends BaseMCPClient {
2937
2694
  }
2938
2695
  /**
2939
2696
  * Create a connector from server configuration (Browser version)
2940
- * Supports HTTP and WebSocket connectors only
2697
+ * Supports HTTP connector only
2941
2698
  */
2942
2699
  createConnectorFromConfig(serverConfig) {
2943
2700
  const {
2944
2701
  url,
2945
- transport,
2946
2702
  headers,
2947
2703
  authToken,
2948
2704
  authProvider,
@@ -2978,13 +2734,7 @@ var BrowserMCPClient = class _BrowserMCPClient extends BaseMCPClient {
2978
2734
  "[BrowserMCPClient] No clientOptions provided to connector!"
2979
2735
  );
2980
2736
  }
2981
- if (transport === "websocket" || url.startsWith("ws://") || url.startsWith("wss://")) {
2982
- return new WebSocketConnector(url, connectorOptions);
2983
- } else if (transport === "http" || url.startsWith("http://") || url.startsWith("https://")) {
2984
- return new HttpConnector(url, connectorOptions);
2985
- } else {
2986
- return new HttpConnector(url, connectorOptions);
2987
- }
2737
+ return new HttpConnector(url, connectorOptions);
2988
2738
  }
2989
2739
  };
2990
2740
 
@@ -9,18 +9,18 @@ import {
9
9
  useWidgetProps,
10
10
  useWidgetState,
11
11
  useWidgetTheme
12
- } from "../../chunk-BXYYBPWE.js";
13
- import "../../chunk-BO2DLS2U.js";
12
+ } from "../../chunk-BONN23WU.js";
13
+ import "../../chunk-FDWI2WVM.js";
14
14
  import {
15
15
  onMcpAuthorization
16
16
  } from "../../chunk-J75I2C26.js";
17
- import "../../chunk-NS7PNUAI.js";
17
+ import "../../chunk-YIZWQ5PM.js";
18
18
  import {
19
19
  Tel,
20
20
  Telemetry,
21
21
  setTelemetrySource
22
- } from "../../chunk-ES5N2BQY.js";
23
- import "../../chunk-34R6SIER.js";
22
+ } from "../../chunk-TZ7SHSRY.js";
23
+ import "../../chunk-FRUZDWXH.js";
24
24
  import "../../chunk-3GQAWCBQ.js";
25
25
  export {
26
26
  Tel as BrowserTelemetry,
@@ -95,12 +95,10 @@ export type UseMcpResult = {
95
95
  * - 'discovering': Checking server existence and capabilities (including auth requirements).
96
96
  * - 'pending_auth': Authentication is required but auto-popup was prevented. User action needed.
97
97
  * - 'authenticating': Authentication is required and the process (e.g., popup) has been initiated.
98
- * - 'connecting': Establishing the SSE connection to the server.
99
- * - 'loading': Connected; loading resources like the tool list.
100
98
  * - 'ready': Connected and ready for tool calls.
101
99
  * - 'failed': Connection or authentication failed. Check the `error` property.
102
100
  */
103
- state: "discovering" | "pending_auth" | "authenticating" | "connecting" | "loading" | "ready" | "failed";
101
+ state: "discovering" | "pending_auth" | "authenticating" | "ready" | "failed";
104
102
  /** If the state is 'failed', this provides the error message */
105
103
  error?: string;
106
104
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/react/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/react/types.ts"],"names":[],"mappings":"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"}
@@ -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"}
@@ -643,7 +643,7 @@ var init_logging = __esm({
643
643
  timestamp({ format: "HH:mm:ss" }),
644
644
  this.getFormatter()
645
645
  ),
646
- transports: []
646
+ transports: [new winston.transports.Console()]
647
647
  });
648
648
  }
649
649
  return this.instances[name];
@@ -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.1";
764
+ VERSION = "1.11.0-canary.3";
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-IVXE5QZD.js";
10
+ } from "../../chunk-WFPXUU4A.js";
11
11
  import {
12
12
  convertToolResultToResourceResult
13
13
  } from "../../chunk-362PI25Z.js";
@@ -25,8 +25,8 @@ import {
25
25
  getPackageVersion,
26
26
  isDeno,
27
27
  pathHelpers
28
- } from "../../chunk-ES5N2BQY.js";
29
- import "../../chunk-34R6SIER.js";
28
+ } from "../../chunk-TZ7SHSRY.js";
29
+ import "../../chunk-FRUZDWXH.js";
30
30
  import {
31
31
  __name
32
32
  } from "../../chunk-3GQAWCBQ.js";
@@ -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-G74FG2CI.js");
2094
+ const { findSessionContext: findSessionContext2 } = await import("../../tool-execution-helpers-HNASWGXY.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-G74FG2CI.js");
2172
+ const { findSessionContext: findSessionContext2 } = await import("../../tool-execution-helpers-HNASWGXY.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-G74FG2CI.js");
2227
+ const { findSessionContext: findSessionContext2 } = await import("../../tool-execution-helpers-HNASWGXY.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"}
@@ -58,6 +58,20 @@ export declare class MCPSession {
58
58
  * ```
59
59
  */
60
60
  get tools(): Tool[];
61
+ /**
62
+ * List all available tools from the MCP server.
63
+ * This method fetches fresh tools from the server, unlike the `tools` getter which returns cached tools.
64
+ *
65
+ * @param options - Optional request options
66
+ * @returns Array of available tools
67
+ *
68
+ * @example
69
+ * ```typescript
70
+ * const tools = await session.listTools();
71
+ * console.log(`Available tools: ${tools.map(t => t.name).join(", ")}`);
72
+ * ```
73
+ */
74
+ listTools(options?: RequestOptions): Promise<Tool[]>;
61
75
  /**
62
76
  * Get the server capabilities advertised during initialization.
63
77
  *