@mcp-ts/sdk 2.4.1 → 2.4.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 (42) hide show
  1. package/dist/adapters/agui-adapter.d.mts +3 -4
  2. package/dist/adapters/agui-adapter.d.ts +3 -4
  3. package/dist/adapters/agui-middleware.d.mts +3 -4
  4. package/dist/adapters/agui-middleware.d.ts +3 -4
  5. package/dist/adapters/ai-adapter.d.mts +3 -4
  6. package/dist/adapters/ai-adapter.d.ts +3 -4
  7. package/dist/adapters/langchain-adapter.d.mts +3 -4
  8. package/dist/adapters/langchain-adapter.d.ts +3 -4
  9. package/dist/adapters/mastra-adapter.d.mts +2 -2
  10. package/dist/adapters/mastra-adapter.d.ts +2 -2
  11. package/dist/client/index.d.mts +2 -3
  12. package/dist/client/index.d.ts +2 -3
  13. package/dist/client/react.d.mts +4 -6
  14. package/dist/client/react.d.ts +4 -6
  15. package/dist/client/vue.d.mts +4 -6
  16. package/dist/client/vue.d.ts +4 -6
  17. package/dist/{index-Ch7ouNSa.d.ts → index-B8kJSrBJ.d.ts} +1 -2
  18. package/dist/{index-L5XoXgsb.d.mts → index-DiJsm_lK.d.mts} +1 -2
  19. package/dist/index.d.mts +5 -6
  20. package/dist/index.d.ts +5 -6
  21. package/dist/index.js +103 -95
  22. package/dist/index.js.map +1 -1
  23. package/dist/index.mjs +103 -95
  24. package/dist/index.mjs.map +1 -1
  25. package/dist/{multi-session-client-Bwm-efqg.d.ts → multi-session-client-BluyCPo9.d.ts} +201 -71
  26. package/dist/{multi-session-client-k-9RvWvi.d.mts → multi-session-client-CWs-AE78.d.mts} +201 -71
  27. package/dist/server/index.d.mts +5 -128
  28. package/dist/server/index.d.ts +5 -128
  29. package/dist/server/index.js +103 -95
  30. package/dist/server/index.js.map +1 -1
  31. package/dist/server/index.mjs +103 -95
  32. package/dist/server/index.mjs.map +1 -1
  33. package/dist/shared/index.d.mts +4 -5
  34. package/dist/shared/index.d.ts +4 -5
  35. package/dist/{tool-router-CuApsDiV.d.mts → tool-router-CbG4Tum6.d.mts} +1 -1
  36. package/dist/{tool-router-CZMrOG8J.d.ts → tool-router-ChIhPwgP.d.ts} +1 -1
  37. package/dist/{types-DCk_IF4L.d.mts → types-CjczQwNX.d.mts} +122 -1
  38. package/dist/{types-DCk_IF4L.d.ts → types-CjczQwNX.d.ts} +122 -1
  39. package/package.json +1 -1
  40. package/src/server/mcp/multi-session-client.ts +177 -132
  41. package/dist/events-C4m7tK1U.d.mts +0 -122
  42. package/dist/events-C4m7tK1U.d.ts +0 -122
@@ -1,10 +1,9 @@
1
- import { M as MCPClient, a as MultiSessionClient } from '../multi-session-client-k-9RvWvi.mjs';
2
- import { d as ToolRouter } from '../tool-router-CuApsDiV.mjs';
3
- import '../events-C4m7tK1U.mjs';
1
+ import { M as MCPClient, a as MultiSessionClient } from '../multi-session-client-CWs-AE78.mjs';
2
+ import { d as ToolRouter } from '../tool-router-CbG4Tum6.mjs';
3
+ import '../types-CjczQwNX.mjs';
4
4
  import '@modelcontextprotocol/sdk/types.js';
5
5
  import '@modelcontextprotocol/sdk/client/auth.js';
6
6
  import '@modelcontextprotocol/sdk/shared/auth.js';
7
- import '../types-DCk_IF4L.mjs';
8
7
 
9
8
  /**
10
9
  * MCP Adapter for AG-UI Integration
@@ -1,10 +1,9 @@
1
- import { M as MCPClient, a as MultiSessionClient } from '../multi-session-client-Bwm-efqg.js';
2
- import { d as ToolRouter } from '../tool-router-CZMrOG8J.js';
3
- import '../events-C4m7tK1U.js';
1
+ import { M as MCPClient, a as MultiSessionClient } from '../multi-session-client-BluyCPo9.js';
2
+ import { d as ToolRouter } from '../tool-router-ChIhPwgP.js';
3
+ import '../types-CjczQwNX.js';
4
4
  import '@modelcontextprotocol/sdk/types.js';
5
5
  import '@modelcontextprotocol/sdk/client/auth.js';
6
6
  import '@modelcontextprotocol/sdk/shared/auth.js';
7
- import '../types-DCk_IF4L.js';
8
7
 
9
8
  /**
10
9
  * MCP Adapter for AG-UI Integration
@@ -2,13 +2,12 @@ import { Observable } from 'rxjs';
2
2
  import { Middleware, RunAgentInput, AbstractAgent, BaseEvent } from '@ag-ui/client';
3
3
  export { AbstractAgent, BaseEvent, EventType, Middleware, RunAgentInput, Tool, ToolCallEndEvent } from '@ag-ui/client';
4
4
  import { AguiTool } from './agui-adapter.mjs';
5
- import '../multi-session-client-k-9RvWvi.mjs';
6
- import '../events-C4m7tK1U.mjs';
5
+ import '../multi-session-client-CWs-AE78.mjs';
6
+ import '../types-CjczQwNX.mjs';
7
7
  import '@modelcontextprotocol/sdk/types.js';
8
8
  import '@modelcontextprotocol/sdk/client/auth.js';
9
9
  import '@modelcontextprotocol/sdk/shared/auth.js';
10
- import '../tool-router-CuApsDiV.mjs';
11
- import '../types-DCk_IF4L.mjs';
10
+ import '../tool-router-CbG4Tum6.mjs';
12
11
 
13
12
  /**
14
13
  * AG-UI Middleware for MCP Tool Execution
@@ -2,13 +2,12 @@ import { Observable } from 'rxjs';
2
2
  import { Middleware, RunAgentInput, AbstractAgent, BaseEvent } from '@ag-ui/client';
3
3
  export { AbstractAgent, BaseEvent, EventType, Middleware, RunAgentInput, Tool, ToolCallEndEvent } from '@ag-ui/client';
4
4
  import { AguiTool } from './agui-adapter.js';
5
- import '../multi-session-client-Bwm-efqg.js';
6
- import '../events-C4m7tK1U.js';
5
+ import '../multi-session-client-BluyCPo9.js';
6
+ import '../types-CjczQwNX.js';
7
7
  import '@modelcontextprotocol/sdk/types.js';
8
8
  import '@modelcontextprotocol/sdk/client/auth.js';
9
9
  import '@modelcontextprotocol/sdk/shared/auth.js';
10
- import '../tool-router-CZMrOG8J.js';
11
- import '../types-DCk_IF4L.js';
10
+ import '../tool-router-ChIhPwgP.js';
12
11
 
13
12
  /**
14
13
  * AG-UI Middleware for MCP Tool Execution
@@ -1,11 +1,10 @@
1
- import { M as MCPClient, a as MultiSessionClient } from '../multi-session-client-k-9RvWvi.mjs';
1
+ import { M as MCPClient, a as MultiSessionClient } from '../multi-session-client-CWs-AE78.mjs';
2
2
  import { ToolSet } from 'ai';
3
- import { d as ToolRouter } from '../tool-router-CuApsDiV.mjs';
4
- import '../events-C4m7tK1U.mjs';
3
+ import { d as ToolRouter } from '../tool-router-CbG4Tum6.mjs';
4
+ import '../types-CjczQwNX.mjs';
5
5
  import '@modelcontextprotocol/sdk/types.js';
6
6
  import '@modelcontextprotocol/sdk/client/auth.js';
7
7
  import '@modelcontextprotocol/sdk/shared/auth.js';
8
- import '../types-DCk_IF4L.mjs';
9
8
 
10
9
  interface AIAdapterOptions {
11
10
  /**
@@ -1,11 +1,10 @@
1
- import { M as MCPClient, a as MultiSessionClient } from '../multi-session-client-Bwm-efqg.js';
1
+ import { M as MCPClient, a as MultiSessionClient } from '../multi-session-client-BluyCPo9.js';
2
2
  import { ToolSet } from 'ai';
3
- import { d as ToolRouter } from '../tool-router-CZMrOG8J.js';
4
- import '../events-C4m7tK1U.js';
3
+ import { d as ToolRouter } from '../tool-router-ChIhPwgP.js';
4
+ import '../types-CjczQwNX.js';
5
5
  import '@modelcontextprotocol/sdk/types.js';
6
6
  import '@modelcontextprotocol/sdk/client/auth.js';
7
7
  import '@modelcontextprotocol/sdk/shared/auth.js';
8
- import '../types-DCk_IF4L.js';
9
8
 
10
9
  interface AIAdapterOptions {
11
10
  /**
@@ -1,11 +1,10 @@
1
- import { M as MCPClient, a as MultiSessionClient } from '../multi-session-client-k-9RvWvi.mjs';
1
+ import { M as MCPClient, a as MultiSessionClient } from '../multi-session-client-CWs-AE78.mjs';
2
2
  import { StructuredTool } from '@langchain/core/tools';
3
- import { d as ToolRouter } from '../tool-router-CuApsDiV.mjs';
4
- import '../events-C4m7tK1U.mjs';
3
+ import { d as ToolRouter } from '../tool-router-CbG4Tum6.mjs';
4
+ import '../types-CjczQwNX.mjs';
5
5
  import '@modelcontextprotocol/sdk/types.js';
6
6
  import '@modelcontextprotocol/sdk/client/auth.js';
7
7
  import '@modelcontextprotocol/sdk/shared/auth.js';
8
- import '../types-DCk_IF4L.mjs';
9
8
 
10
9
  interface LangChainAdapterOptions {
11
10
  /**
@@ -1,11 +1,10 @@
1
- import { M as MCPClient, a as MultiSessionClient } from '../multi-session-client-Bwm-efqg.js';
1
+ import { M as MCPClient, a as MultiSessionClient } from '../multi-session-client-BluyCPo9.js';
2
2
  import { StructuredTool } from '@langchain/core/tools';
3
- import { d as ToolRouter } from '../tool-router-CZMrOG8J.js';
4
- import '../events-C4m7tK1U.js';
3
+ import { d as ToolRouter } from '../tool-router-ChIhPwgP.js';
4
+ import '../types-CjczQwNX.js';
5
5
  import '@modelcontextprotocol/sdk/types.js';
6
6
  import '@modelcontextprotocol/sdk/client/auth.js';
7
7
  import '@modelcontextprotocol/sdk/shared/auth.js';
8
- import '../types-DCk_IF4L.js';
9
8
 
10
9
  interface LangChainAdapterOptions {
11
10
  /**
@@ -1,6 +1,6 @@
1
- import { M as MCPClient, a as MultiSessionClient } from '../multi-session-client-k-9RvWvi.mjs';
1
+ import { M as MCPClient, a as MultiSessionClient } from '../multi-session-client-CWs-AE78.mjs';
2
2
  import { z } from 'zod';
3
- import '../events-C4m7tK1U.mjs';
3
+ import '../types-CjczQwNX.mjs';
4
4
  import '@modelcontextprotocol/sdk/types.js';
5
5
  import '@modelcontextprotocol/sdk/client/auth.js';
6
6
  import '@modelcontextprotocol/sdk/shared/auth.js';
@@ -1,6 +1,6 @@
1
- import { M as MCPClient, a as MultiSessionClient } from '../multi-session-client-Bwm-efqg.js';
1
+ import { M as MCPClient, a as MultiSessionClient } from '../multi-session-client-BluyCPo9.js';
2
2
  import { z } from 'zod';
3
- import '../events-C4m7tK1U.js';
3
+ import '../types-CjczQwNX.js';
4
4
  import '@modelcontextprotocol/sdk/types.js';
5
5
  import '@modelcontextprotocol/sdk/client/auth.js';
6
6
  import '@modelcontextprotocol/sdk/shared/auth.js';
@@ -1,5 +1,4 @@
1
- export { A as APP_HOST_DEFAULTS, a as AppHost, D as DEFAULT_MCP_APP_CSP, S as SANDBOX_PROXY_READY_METHOD, b as SANDBOX_RESOURCE_READY_METHOD, c as SSEClient, d as SSEClientOptions } from '../index-L5XoXgsb.mjs';
2
- export { D as Disposable, a as DisposableStore, E as Emitter, b as Event, M as McpConnectionEvent, c as McpConnectionState, d as McpObservabilityEvent } from '../events-C4m7tK1U.mjs';
3
- export { q as McpRpcRequest, r as McpRpcResponse, v as ToolInfo } from '../types-DCk_IF4L.mjs';
1
+ export { A as APP_HOST_DEFAULTS, a as AppHost, D as DEFAULT_MCP_APP_CSP, S as SANDBOX_PROXY_READY_METHOD, b as SANDBOX_RESOURCE_READY_METHOD, c as SSEClient, d as SSEClientOptions } from '../index-DiJsm_lK.mjs';
2
+ export { k as Disposable, l as DisposableStore, E as Emitter, m as Event, M as McpConnectionEvent, s as McpConnectionState, t as McpObservabilityEvent, w as McpRpcRequest, x as McpRpcResponse, B as ToolInfo } from '../types-CjczQwNX.mjs';
4
3
  import '@modelcontextprotocol/ext-apps/app-bridge';
5
4
  import '@modelcontextprotocol/sdk/types.js';
@@ -1,5 +1,4 @@
1
- export { A as APP_HOST_DEFAULTS, a as AppHost, D as DEFAULT_MCP_APP_CSP, S as SANDBOX_PROXY_READY_METHOD, b as SANDBOX_RESOURCE_READY_METHOD, c as SSEClient, d as SSEClientOptions } from '../index-Ch7ouNSa.js';
2
- export { D as Disposable, a as DisposableStore, E as Emitter, b as Event, M as McpConnectionEvent, c as McpConnectionState, d as McpObservabilityEvent } from '../events-C4m7tK1U.js';
3
- export { q as McpRpcRequest, r as McpRpcResponse, v as ToolInfo } from '../types-DCk_IF4L.js';
1
+ export { A as APP_HOST_DEFAULTS, a as AppHost, D as DEFAULT_MCP_APP_CSP, S as SANDBOX_PROXY_READY_METHOD, b as SANDBOX_RESOURCE_READY_METHOD, c as SSEClient, d as SSEClientOptions } from '../index-B8kJSrBJ.js';
2
+ export { k as Disposable, l as DisposableStore, E as Emitter, m as Event, M as McpConnectionEvent, s as McpConnectionState, t as McpObservabilityEvent, w as McpRpcRequest, x as McpRpcResponse, B as ToolInfo } from '../types-CjczQwNX.js';
4
3
  import '@modelcontextprotocol/ext-apps/app-bridge';
5
4
  import '@modelcontextprotocol/sdk/types.js';
@@ -1,9 +1,7 @@
1
- import { c as SSEClient, e as AppHostOptions, f as AppHostClient, a as AppHost } from '../index-L5XoXgsb.mjs';
2
- export { A as APP_HOST_DEFAULTS, D as DEFAULT_MCP_APP_CSP, S as SANDBOX_PROXY_READY_METHOD, b as SANDBOX_RESOURCE_READY_METHOD, d as SSEClientOptions } from '../index-L5XoXgsb.mjs';
3
- import { c as McpConnectionState, M as McpConnectionEvent } from '../events-C4m7tK1U.mjs';
4
- export { D as Disposable, a as DisposableStore, E as Emitter, b as Event, d as McpObservabilityEvent } from '../events-C4m7tK1U.mjs';
5
- import { v as ToolInfo, k as FinishAuthResult, o as ListToolsRpcResult, L as ListPromptsResult, m as ListResourcesResult } from '../types-DCk_IF4L.mjs';
6
- export { q as McpRpcRequest, r as McpRpcResponse } from '../types-DCk_IF4L.mjs';
1
+ import { c as SSEClient, e as AppHostOptions, f as AppHostClient, a as AppHost } from '../index-DiJsm_lK.mjs';
2
+ export { A as APP_HOST_DEFAULTS, D as DEFAULT_MCP_APP_CSP, S as SANDBOX_PROXY_READY_METHOD, b as SANDBOX_RESOURCE_READY_METHOD, d as SSEClientOptions } from '../index-DiJsm_lK.mjs';
3
+ import { s as McpConnectionState, B as ToolInfo, n as FinishAuthResult, r as ListToolsRpcResult, L as ListPromptsResult, p as ListResourcesResult, M as McpConnectionEvent } from '../types-CjczQwNX.mjs';
4
+ export { k as Disposable, l as DisposableStore, E as Emitter, m as Event, t as McpObservabilityEvent, w as McpRpcRequest, x as McpRpcResponse } from '../types-CjczQwNX.mjs';
7
5
  import React$1, { ReactNode, CSSProperties } from 'react';
8
6
  import '@modelcontextprotocol/ext-apps/app-bridge';
9
7
  import '@modelcontextprotocol/sdk/types.js';
@@ -1,9 +1,7 @@
1
- import { c as SSEClient, e as AppHostOptions, f as AppHostClient, a as AppHost } from '../index-Ch7ouNSa.js';
2
- export { A as APP_HOST_DEFAULTS, D as DEFAULT_MCP_APP_CSP, S as SANDBOX_PROXY_READY_METHOD, b as SANDBOX_RESOURCE_READY_METHOD, d as SSEClientOptions } from '../index-Ch7ouNSa.js';
3
- import { c as McpConnectionState, M as McpConnectionEvent } from '../events-C4m7tK1U.js';
4
- export { D as Disposable, a as DisposableStore, E as Emitter, b as Event, d as McpObservabilityEvent } from '../events-C4m7tK1U.js';
5
- import { v as ToolInfo, k as FinishAuthResult, o as ListToolsRpcResult, L as ListPromptsResult, m as ListResourcesResult } from '../types-DCk_IF4L.js';
6
- export { q as McpRpcRequest, r as McpRpcResponse } from '../types-DCk_IF4L.js';
1
+ import { c as SSEClient, e as AppHostOptions, f as AppHostClient, a as AppHost } from '../index-B8kJSrBJ.js';
2
+ export { A as APP_HOST_DEFAULTS, D as DEFAULT_MCP_APP_CSP, S as SANDBOX_PROXY_READY_METHOD, b as SANDBOX_RESOURCE_READY_METHOD, d as SSEClientOptions } from '../index-B8kJSrBJ.js';
3
+ import { s as McpConnectionState, B as ToolInfo, n as FinishAuthResult, r as ListToolsRpcResult, L as ListPromptsResult, p as ListResourcesResult, M as McpConnectionEvent } from '../types-CjczQwNX.js';
4
+ export { k as Disposable, l as DisposableStore, E as Emitter, m as Event, t as McpObservabilityEvent, w as McpRpcRequest, x as McpRpcResponse } from '../types-CjczQwNX.js';
7
5
  import React$1, { ReactNode, CSSProperties } from 'react';
8
6
  import '@modelcontextprotocol/ext-apps/app-bridge';
9
7
  import '@modelcontextprotocol/sdk/types.js';
@@ -1,9 +1,7 @@
1
- import { c as SSEClient } from '../index-L5XoXgsb.mjs';
2
- export { A as APP_HOST_DEFAULTS, a as AppHost, D as DEFAULT_MCP_APP_CSP, S as SANDBOX_PROXY_READY_METHOD, b as SANDBOX_RESOURCE_READY_METHOD, d as SSEClientOptions } from '../index-L5XoXgsb.mjs';
3
- import { c as McpConnectionState, M as McpConnectionEvent } from '../events-C4m7tK1U.mjs';
4
- export { D as Disposable, a as DisposableStore, E as Emitter, b as Event, d as McpObservabilityEvent } from '../events-C4m7tK1U.mjs';
5
- import { v as ToolInfo, k as FinishAuthResult, o as ListToolsRpcResult, L as ListPromptsResult, m as ListResourcesResult } from '../types-DCk_IF4L.mjs';
6
- export { q as McpRpcRequest, r as McpRpcResponse } from '../types-DCk_IF4L.mjs';
1
+ import { c as SSEClient } from '../index-DiJsm_lK.mjs';
2
+ export { A as APP_HOST_DEFAULTS, a as AppHost, D as DEFAULT_MCP_APP_CSP, S as SANDBOX_PROXY_READY_METHOD, b as SANDBOX_RESOURCE_READY_METHOD, d as SSEClientOptions } from '../index-DiJsm_lK.mjs';
3
+ import { s as McpConnectionState, B as ToolInfo, n as FinishAuthResult, r as ListToolsRpcResult, L as ListPromptsResult, p as ListResourcesResult, M as McpConnectionEvent } from '../types-CjczQwNX.mjs';
4
+ export { k as Disposable, l as DisposableStore, E as Emitter, m as Event, t as McpObservabilityEvent, w as McpRpcRequest, x as McpRpcResponse } from '../types-CjczQwNX.mjs';
7
5
  import '@modelcontextprotocol/ext-apps/app-bridge';
8
6
  import '@modelcontextprotocol/sdk/types.js';
9
7
 
@@ -1,9 +1,7 @@
1
- import { c as SSEClient } from '../index-Ch7ouNSa.js';
2
- export { A as APP_HOST_DEFAULTS, a as AppHost, D as DEFAULT_MCP_APP_CSP, S as SANDBOX_PROXY_READY_METHOD, b as SANDBOX_RESOURCE_READY_METHOD, d as SSEClientOptions } from '../index-Ch7ouNSa.js';
3
- import { c as McpConnectionState, M as McpConnectionEvent } from '../events-C4m7tK1U.js';
4
- export { D as Disposable, a as DisposableStore, E as Emitter, b as Event, d as McpObservabilityEvent } from '../events-C4m7tK1U.js';
5
- import { v as ToolInfo, k as FinishAuthResult, o as ListToolsRpcResult, L as ListPromptsResult, m as ListResourcesResult } from '../types-DCk_IF4L.js';
6
- export { q as McpRpcRequest, r as McpRpcResponse } from '../types-DCk_IF4L.js';
1
+ import { c as SSEClient } from '../index-B8kJSrBJ.js';
2
+ export { A as APP_HOST_DEFAULTS, a as AppHost, D as DEFAULT_MCP_APP_CSP, S as SANDBOX_PROXY_READY_METHOD, b as SANDBOX_RESOURCE_READY_METHOD, d as SSEClientOptions } from '../index-B8kJSrBJ.js';
3
+ import { s as McpConnectionState, B as ToolInfo, n as FinishAuthResult, r as ListToolsRpcResult, L as ListPromptsResult, p as ListResourcesResult, M as McpConnectionEvent } from '../types-CjczQwNX.js';
4
+ export { k as Disposable, l as DisposableStore, E as Emitter, m as Event, t as McpObservabilityEvent, w as McpRpcRequest, x as McpRpcResponse } from '../types-CjczQwNX.js';
7
5
  import '@modelcontextprotocol/ext-apps/app-bridge';
8
6
  import '@modelcontextprotocol/sdk/types.js';
9
7
 
@@ -1,5 +1,4 @@
1
- import { M as McpConnectionEvent, d as McpObservabilityEvent, e as McpAppsUIEvent } from './events-C4m7tK1U.js';
2
- import { s as SessionListResult, e as ConnectParams, h as ConnectResult, j as DisconnectResult, o as ListToolsRpcResult, l as GetSessionResult, k as FinishAuthResult, L as ListPromptsResult, m as ListResourcesResult } from './types-DCk_IF4L.js';
1
+ import { M as McpConnectionEvent, t as McpObservabilityEvent, P as McpAppsUIEvent, y as SessionListResult, e as ConnectParams, h as ConnectResult, j as DisconnectResult, r as ListToolsRpcResult, o as GetSessionResult, n as FinishAuthResult, L as ListPromptsResult, p as ListResourcesResult } from './types-CjczQwNX.js';
3
2
  import { AppBridge } from '@modelcontextprotocol/ext-apps/app-bridge';
4
3
  import { LoggingMessageNotification } from '@modelcontextprotocol/sdk/types.js';
5
4
 
@@ -1,5 +1,4 @@
1
- import { M as McpConnectionEvent, d as McpObservabilityEvent, e as McpAppsUIEvent } from './events-C4m7tK1U.mjs';
2
- import { s as SessionListResult, e as ConnectParams, h as ConnectResult, j as DisconnectResult, o as ListToolsRpcResult, l as GetSessionResult, k as FinishAuthResult, L as ListPromptsResult, m as ListResourcesResult } from './types-DCk_IF4L.mjs';
1
+ import { M as McpConnectionEvent, t as McpObservabilityEvent, P as McpAppsUIEvent, y as SessionListResult, e as ConnectParams, h as ConnectResult, j as DisconnectResult, r as ListToolsRpcResult, o as GetSessionResult, n as FinishAuthResult, L as ListPromptsResult, p as ListResourcesResult } from './types-CjczQwNX.mjs';
3
2
  import { AppBridge } from '@modelcontextprotocol/ext-apps/app-bridge';
4
3
  import { LoggingMessageNotification } from '@modelcontextprotocol/sdk/types.js';
5
4
 
package/dist/index.d.mts CHANGED
@@ -1,12 +1,11 @@
1
- export { M as MCPClient, a as MultiSessionClient, S as StorageOAuthClientProvider } from './multi-session-client-k-9RvWvi.mjs';
1
+ export { M as MCPClient, a as MultiSessionClient, S as Session, b as SessionMutationEvent, c as SessionMutationListener, d as SessionMutationType, e as SessionStore, f as StorageOAuthClientProvider } from './multi-session-client-CWs-AE78.mjs';
2
2
  export { A as AuthenticationError, C as ConfigurationError, a as ConnectionError, I as InvalidStateError, M as McpError, N as NotConnectedError, R as RpcErrorCode, b as RpcErrorCodes, S as SessionNotFoundError, c as SessionValidationError, T as ToolExecutionError, U as UnauthorizedError, s as sanitizeServerLabel } from './utils-DELRKQPU.mjs';
3
- export { ClientMetadata, NextMcpHandlerOptions, SSEConnectionManager, SSEHandlerOptions, Session, SessionMutationEvent, SessionMutationListener, SessionMutationType, SessionStore, createNextMcpHandler, createSSEHandler, onSessionMutation, sessions } from './server/index.mjs';
4
- export { D as Disposable, a as DisposableStore, E as Emitter, b as Event, M as McpConnectionEvent, c as McpConnectionState, d as McpObservabilityEvent } from './events-C4m7tK1U.mjs';
5
- export { C as CallToolParams, a as CallToolRequest, b as CallToolResponse, c as ConnectAuthRequiredResponse, d as ConnectErrorResponse, e as ConnectParams, f as ConnectRequest, g as ConnectResponse, h as ConnectResult, i as ConnectSuccessResponse, D as DisconnectParams, j as DisconnectResult, F as FinishAuthParams, k as FinishAuthResult, G as GetPromptParams, l as GetSessionResult, L as ListPromptsResult, m as ListResourcesResult, n as ListToolsResponse, o as ListToolsRpcResult, M as McpRpcMethod, p as McpRpcParams, q as McpRpcRequest, r as McpRpcResponse, R as ReadResourceParams, S as SessionInfo, s as SessionListResult, t as SessionParams, T as ToolClient, u as ToolClientProvider, v as ToolInfo, w as TransportType, x as isCallToolSuccess, y as isConnectAuthRequired, z as isConnectError, A as isConnectSuccess, B as isListToolsSuccess } from './types-DCk_IF4L.mjs';
3
+ export { ClientMetadata, NextMcpHandlerOptions, SSEConnectionManager, SSEHandlerOptions, createNextMcpHandler, createSSEHandler, onSessionMutation, sessions } from './server/index.mjs';
4
+ export { C as CallToolParams, a as CallToolRequest, b as CallToolResponse, c as ConnectAuthRequiredResponse, d as ConnectErrorResponse, e as ConnectParams, f as ConnectRequest, g as ConnectResponse, h as ConnectResult, i as ConnectSuccessResponse, D as DisconnectParams, j as DisconnectResult, k as Disposable, l as DisposableStore, E as Emitter, m as Event, F as FinishAuthParams, n as FinishAuthResult, G as GetPromptParams, o as GetSessionResult, L as ListPromptsResult, p as ListResourcesResult, q as ListToolsResponse, r as ListToolsRpcResult, M as McpConnectionEvent, s as McpConnectionState, t as McpObservabilityEvent, u as McpRpcMethod, v as McpRpcParams, w as McpRpcRequest, x as McpRpcResponse, R as ReadResourceParams, S as SessionInfo, y as SessionListResult, z as SessionParams, T as ToolClient, A as ToolClientProvider, B as ToolInfo, H as TransportType, I as isCallToolSuccess, J as isConnectAuthRequired, K as isConnectError, N as isConnectSuccess, O as isListToolsSuccess } from './types-CjczQwNX.mjs';
6
5
  export { OAuthClientInformation, OAuthClientInformationFull, OAuthClientMetadata, OAuthTokens } from '@modelcontextprotocol/sdk/shared/auth.js';
7
6
  export { CallToolResult, ListToolsResult, Tool } from '@modelcontextprotocol/sdk/types.js';
8
- export { A as APP_HOST_DEFAULTS, a as AppHost, D as DEFAULT_MCP_APP_CSP, S as SANDBOX_PROXY_READY_METHOD, b as SANDBOX_RESOURCE_READY_METHOD, c as SSEClient, d as SSEClientOptions } from './index-L5XoXgsb.mjs';
7
+ export { A as APP_HOST_DEFAULTS, a as AppHost, D as DEFAULT_MCP_APP_CSP, S as SANDBOX_PROXY_READY_METHOD, b as SANDBOX_RESOURCE_READY_METHOD, c as SSEClient, d as SSEClientOptions } from './index-DiJsm_lK.mjs';
9
8
  export { CallToolFn, DEFAULT_CLIENT_NAME, DEFAULT_CLIENT_URI, DEFAULT_HEARTBEAT_INTERVAL_MS, DEFAULT_LOGO_URI, DEFAULT_POLICY_URI, DORMANT_SESSION_EXPIRATION_MS, DORMANT_SESSION_EXPIRATION_SECONDS, MCP_CLIENT_NAME, MCP_CLIENT_VERSION, PENDING_SESSION_EXPIRATION_SECONDS, REDIS_KEY_PREFIX, SOFTWARE_ID, SOFTWARE_VERSION, STATE_EXPIRATION_MS, ToolUiConfig, createExecuteToolDefinition, createGetSchemaToolDefinition, createListServersToolDefinition, createRegexSearchToolDefinition, createSearchToolDefinition, executeMetaTool, findToolByName, getToolUiResourceUri, isMetaTool, resolveMetaToolProxy } from './shared/index.mjs';
10
- export { C as CompactTool, E as EmbedFn, I as IndexedTool, S as SchemaCompressor, T as ToolGroupInfo, a as ToolIndex, b as ToolIndexOptions, c as ToolListResult, d as ToolRouter, e as ToolRouterClientInput, f as ToolRouterOptions, g as ToolRouterStrategy, h as ToolSearchOptions, i as ToolServerSummary, j as ToolSummary } from './tool-router-CuApsDiV.mjs';
9
+ export { C as CompactTool, E as EmbedFn, I as IndexedTool, S as SchemaCompressor, T as ToolGroupInfo, a as ToolIndex, b as ToolIndexOptions, c as ToolListResult, d as ToolRouter, e as ToolRouterClientInput, f as ToolRouterOptions, g as ToolRouterStrategy, h as ToolSearchOptions, i as ToolServerSummary, j as ToolSummary } from './tool-router-CbG4Tum6.mjs';
11
10
  import '@modelcontextprotocol/sdk/client/auth.js';
12
11
  import '@modelcontextprotocol/ext-apps/app-bridge';
package/dist/index.d.ts CHANGED
@@ -1,12 +1,11 @@
1
- export { M as MCPClient, a as MultiSessionClient, S as StorageOAuthClientProvider } from './multi-session-client-Bwm-efqg.js';
1
+ export { M as MCPClient, a as MultiSessionClient, S as Session, b as SessionMutationEvent, c as SessionMutationListener, d as SessionMutationType, e as SessionStore, f as StorageOAuthClientProvider } from './multi-session-client-BluyCPo9.js';
2
2
  export { A as AuthenticationError, C as ConfigurationError, a as ConnectionError, I as InvalidStateError, M as McpError, N as NotConnectedError, R as RpcErrorCode, b as RpcErrorCodes, S as SessionNotFoundError, c as SessionValidationError, T as ToolExecutionError, U as UnauthorizedError, s as sanitizeServerLabel } from './utils-DELRKQPU.js';
3
- export { ClientMetadata, NextMcpHandlerOptions, SSEConnectionManager, SSEHandlerOptions, Session, SessionMutationEvent, SessionMutationListener, SessionMutationType, SessionStore, createNextMcpHandler, createSSEHandler, onSessionMutation, sessions } from './server/index.js';
4
- export { D as Disposable, a as DisposableStore, E as Emitter, b as Event, M as McpConnectionEvent, c as McpConnectionState, d as McpObservabilityEvent } from './events-C4m7tK1U.js';
5
- export { C as CallToolParams, a as CallToolRequest, b as CallToolResponse, c as ConnectAuthRequiredResponse, d as ConnectErrorResponse, e as ConnectParams, f as ConnectRequest, g as ConnectResponse, h as ConnectResult, i as ConnectSuccessResponse, D as DisconnectParams, j as DisconnectResult, F as FinishAuthParams, k as FinishAuthResult, G as GetPromptParams, l as GetSessionResult, L as ListPromptsResult, m as ListResourcesResult, n as ListToolsResponse, o as ListToolsRpcResult, M as McpRpcMethod, p as McpRpcParams, q as McpRpcRequest, r as McpRpcResponse, R as ReadResourceParams, S as SessionInfo, s as SessionListResult, t as SessionParams, T as ToolClient, u as ToolClientProvider, v as ToolInfo, w as TransportType, x as isCallToolSuccess, y as isConnectAuthRequired, z as isConnectError, A as isConnectSuccess, B as isListToolsSuccess } from './types-DCk_IF4L.js';
3
+ export { ClientMetadata, NextMcpHandlerOptions, SSEConnectionManager, SSEHandlerOptions, createNextMcpHandler, createSSEHandler, onSessionMutation, sessions } from './server/index.js';
4
+ export { C as CallToolParams, a as CallToolRequest, b as CallToolResponse, c as ConnectAuthRequiredResponse, d as ConnectErrorResponse, e as ConnectParams, f as ConnectRequest, g as ConnectResponse, h as ConnectResult, i as ConnectSuccessResponse, D as DisconnectParams, j as DisconnectResult, k as Disposable, l as DisposableStore, E as Emitter, m as Event, F as FinishAuthParams, n as FinishAuthResult, G as GetPromptParams, o as GetSessionResult, L as ListPromptsResult, p as ListResourcesResult, q as ListToolsResponse, r as ListToolsRpcResult, M as McpConnectionEvent, s as McpConnectionState, t as McpObservabilityEvent, u as McpRpcMethod, v as McpRpcParams, w as McpRpcRequest, x as McpRpcResponse, R as ReadResourceParams, S as SessionInfo, y as SessionListResult, z as SessionParams, T as ToolClient, A as ToolClientProvider, B as ToolInfo, H as TransportType, I as isCallToolSuccess, J as isConnectAuthRequired, K as isConnectError, N as isConnectSuccess, O as isListToolsSuccess } from './types-CjczQwNX.js';
6
5
  export { OAuthClientInformation, OAuthClientInformationFull, OAuthClientMetadata, OAuthTokens } from '@modelcontextprotocol/sdk/shared/auth.js';
7
6
  export { CallToolResult, ListToolsResult, Tool } from '@modelcontextprotocol/sdk/types.js';
8
- export { A as APP_HOST_DEFAULTS, a as AppHost, D as DEFAULT_MCP_APP_CSP, S as SANDBOX_PROXY_READY_METHOD, b as SANDBOX_RESOURCE_READY_METHOD, c as SSEClient, d as SSEClientOptions } from './index-Ch7ouNSa.js';
7
+ export { A as APP_HOST_DEFAULTS, a as AppHost, D as DEFAULT_MCP_APP_CSP, S as SANDBOX_PROXY_READY_METHOD, b as SANDBOX_RESOURCE_READY_METHOD, c as SSEClient, d as SSEClientOptions } from './index-B8kJSrBJ.js';
9
8
  export { CallToolFn, DEFAULT_CLIENT_NAME, DEFAULT_CLIENT_URI, DEFAULT_HEARTBEAT_INTERVAL_MS, DEFAULT_LOGO_URI, DEFAULT_POLICY_URI, DORMANT_SESSION_EXPIRATION_MS, DORMANT_SESSION_EXPIRATION_SECONDS, MCP_CLIENT_NAME, MCP_CLIENT_VERSION, PENDING_SESSION_EXPIRATION_SECONDS, REDIS_KEY_PREFIX, SOFTWARE_ID, SOFTWARE_VERSION, STATE_EXPIRATION_MS, ToolUiConfig, createExecuteToolDefinition, createGetSchemaToolDefinition, createListServersToolDefinition, createRegexSearchToolDefinition, createSearchToolDefinition, executeMetaTool, findToolByName, getToolUiResourceUri, isMetaTool, resolveMetaToolProxy } from './shared/index.js';
10
- export { C as CompactTool, E as EmbedFn, I as IndexedTool, S as SchemaCompressor, T as ToolGroupInfo, a as ToolIndex, b as ToolIndexOptions, c as ToolListResult, d as ToolRouter, e as ToolRouterClientInput, f as ToolRouterOptions, g as ToolRouterStrategy, h as ToolSearchOptions, i as ToolServerSummary, j as ToolSummary } from './tool-router-CZMrOG8J.js';
9
+ export { C as CompactTool, E as EmbedFn, I as IndexedTool, S as SchemaCompressor, T as ToolGroupInfo, a as ToolIndex, b as ToolIndexOptions, c as ToolListResult, d as ToolRouter, e as ToolRouterClientInput, f as ToolRouterOptions, g as ToolRouterStrategy, h as ToolSearchOptions, i as ToolServerSummary, j as ToolSummary } from './tool-router-ChIhPwgP.js';
11
10
  import '@modelcontextprotocol/sdk/client/auth.js';
12
11
  import '@modelcontextprotocol/ext-apps/app-bridge';
package/dist/index.js CHANGED
@@ -3070,17 +3070,14 @@ var DEFAULT_RETRY_DELAY_MS = 1e3;
3070
3070
  var CONNECTION_BATCH_SIZE = 5;
3071
3071
  var MultiSessionClient = class {
3072
3072
  /**
3073
- * Creates a new MultiSessionClient for the given user userId.
3074
- *
3075
- * @param userId - A unique string identifying the user (e.g. user ID or email).
3076
- * @param options - Optional tuning for connection timeout, retry count, and retry delay.
3077
- * Falls back to sensible defaults if not provided.
3073
+ * @param userId - Unique identifier for the user (e.g. user ID or email).
3074
+ * @param options - Optional tuning and lifecycle hooks.
3078
3075
  */
3079
3076
  constructor(userId, options = {}) {
3080
3077
  __publicField(this, "clients", []);
3078
+ __publicField(this, "connectionPromises", /* @__PURE__ */ new Map());
3081
3079
  __publicField(this, "userId");
3082
3080
  __publicField(this, "options");
3083
- __publicField(this, "connectionPromises", /* @__PURE__ */ new Map());
3084
3081
  this.userId = userId;
3085
3082
  this.options = {
3086
3083
  timeout: DEFAULT_TIMEOUT_MS,
@@ -3089,28 +3086,85 @@ var MultiSessionClient = class {
3089
3086
  ...options
3090
3087
  };
3091
3088
  }
3089
+ // -----------------------------------------------------------------------
3090
+ // Public API
3091
+ // -----------------------------------------------------------------------
3092
3092
  /**
3093
- * Fetches all sessions for this userId from storage and returns only the
3094
- * ones that are ready to connect.
3093
+ * Fetches active sessions and establishes connections to all of them.
3095
3094
  *
3096
- * A session is considered connectable when:
3097
- * - It has a `serverId`, `serverUrl`, and `callbackUrl` (i.e. it was fully initialized)
3098
- * - Its status is `active`. Pending sessions are skipped here
3099
- * and let the OAuth flow complete separately before we try to reconnect them.
3095
+ * Call this once after creating the client. On long-running servers you
3096
+ * can cache the `MultiSessionClient` instance and call `connect()` on
3097
+ * each request already-connected sessions are skipped internally.
3100
3098
  */
3101
- async getActiveSessions() {
3102
- const sessionList = await sessions.list(this.userId);
3103
- const valid = sessionList.filter(
3099
+ async connect() {
3100
+ const sessions2 = await this.fetchActiveSessions();
3101
+ const activeSessionIds = new Set(sessions2.map((s) => s.sessionId));
3102
+ for (const client of this.clients) {
3103
+ if (!activeSessionIds.has(client.getSessionId())) {
3104
+ this.options.onSessionEvicted?.(client.getSessionId());
3105
+ }
3106
+ }
3107
+ this.clients = this.clients.filter((c) => activeSessionIds.has(c.getSessionId()));
3108
+ await this.connectInBatches(sessions2);
3109
+ }
3110
+ /**
3111
+ * Drops all cached `MCPClient` instances and reconnects fresh from storage.
3112
+ *
3113
+ * Call this when downstream MCP servers have expired their transport sessions
3114
+ * (e.g. after a remote server restart) and subsequent tool calls return
3115
+ * "Session not found. Reconnect without session header." errors.
3116
+ *
3117
+ * OAuth tokens are preserved in the storage backend — no re-authentication
3118
+ * is required. Only the in-memory transport sessions are cleared.
3119
+ */
3120
+ async reconnect() {
3121
+ await this.disconnect();
3122
+ await this.connect();
3123
+ }
3124
+ /**
3125
+ * Returns all currently connected `MCPClient` instances.
3126
+ *
3127
+ * Use this to enumerate available tools across all connected servers,
3128
+ * or to route a tool call to the right client by `serverId`.
3129
+ */
3130
+ getClients() {
3131
+ return this.clients;
3132
+ }
3133
+ /**
3134
+ * Gracefully disconnects all active MCP clients and clears the internal list.
3135
+ *
3136
+ * For Streamable HTTP sessions, each client sends an HTTP DELETE to its MCP
3137
+ * endpoint per the spec before closing locally. All disconnects run in
3138
+ * parallel so shutdown is not serialised across many sessions.
3139
+ *
3140
+ * Call this during server shutdown or when a user logs out to free up
3141
+ * underlying transport resources (SSE streams, HTTP connections, etc.).
3142
+ */
3143
+ async disconnect() {
3144
+ await Promise.all(this.clients.map((client) => client.disconnect()));
3145
+ this.clients = [];
3146
+ }
3147
+ // -----------------------------------------------------------------------
3148
+ // Internals
3149
+ // -----------------------------------------------------------------------
3150
+ /**
3151
+ * Resolves the list of sessions to connect.
3152
+ *
3153
+ * Uses the custom `sessionProvider` when provided, otherwise falls back
3154
+ * to querying the storage backend via `sessions.list(userId)`.
3155
+ */
3156
+ async fetchActiveSessions() {
3157
+ const sessionList = this.options.sessionProvider ? await this.options.sessionProvider() : await sessions.list(this.userId);
3158
+ return sessionList.filter(
3104
3159
  (s) => s.serverId && s.serverUrl && s.callbackUrl && s.status === "active"
3105
3160
  );
3106
- return valid;
3107
3161
  }
3108
3162
  /**
3109
- * Connects to a list of sessions in controlled batches of `CONNECTION_BATCH_SIZE`.
3163
+ * Connects a list of sessions in controlled batches.
3110
3164
  *
3111
- * Batching prevents overwhelming the event loop or external servers when a user
3112
- * has many active MCP sessions (e.g. 20+ servers). Within each batch, sessions
3113
- * are connected concurrently using `Promise.all` for speed.
3165
+ * Batching prevents overwhelming the event loop or external servers when
3166
+ * a user has many active MCP sessions. Within each batch, sessions are
3167
+ * connected concurrently using `Promise.all`.
3114
3168
  */
3115
3169
  async connectInBatches(sessions2) {
3116
3170
  for (let i = 0; i < sessions2.length; i += CONNECTION_BATCH_SIZE) {
@@ -3119,17 +3173,16 @@ var MultiSessionClient = class {
3119
3173
  }
3120
3174
  }
3121
3175
  /**
3122
- * Connects a single session, with built-in deduplication to prevent race conditions.
3176
+ * Connects a single session, with deduplication to prevent race conditions.
3123
3177
  *
3124
- * - If a client for this session already exists and is connected, returns immediately.
3125
- * - If the existing client entry is no longer connected (e.g. it was explicitly
3126
- * disconnected), it is evicted so that `establishConnectionWithRetries` creates a
3127
- * fresh transport preventing "Client already connected" errors from the SDK.
3128
- * - If a connection attempt for this session is already in-flight (e.g. from a
3129
- * concurrent call), it joins the existing promise instead of starting a new one.
3130
- * This is the key concurrency lock the `connectionPromises` map acts as a
3131
- * per-session mutex so we never spin up two physical connections for the same session.
3132
- * - On completion (success or failure), the promise is cleaned up from the map.
3178
+ * - If a client for this session already exists and is connected, returns
3179
+ * immediately.
3180
+ * - If the existing client entry is no longer connected (e.g. explicit
3181
+ * disconnect), it is evicted so a fresh transport is created.
3182
+ * - If a connection attempt for this session is already in-flight, the
3183
+ * existing promise is reused as a per-session mutex.
3184
+ * - On completion (success or failure), the promise is cleaned up from
3185
+ * the connectionPromises map.
3133
3186
  */
3134
3187
  async connectSession(session) {
3135
3188
  const existing = this.clients.find((c) => c.getSessionId() === session.sessionId);
@@ -3137,6 +3190,7 @@ var MultiSessionClient = class {
3137
3190
  if (existing.isConnected()) {
3138
3191
  return;
3139
3192
  }
3193
+ this.options.onSessionEvicted?.(existing.getSessionId());
3140
3194
  this.clients = this.clients.filter((c) => c !== existing);
3141
3195
  }
3142
3196
  if (this.connectionPromises.has(session.sessionId)) {
@@ -3151,22 +3205,19 @@ var MultiSessionClient = class {
3151
3205
  }
3152
3206
  }
3153
3207
  /**
3154
- * The core connection loop for a single session.
3208
+ * Core connection loop for a single session with retry logic.
3155
3209
  *
3156
- * Attempts to establish a physical MCP connection, retrying up to `maxRetries` times
3157
- * if the connection fails. Each attempt:
3158
- * 1. Creates a fresh `MCPClient` instance from the session data.
3159
- * 2. Races the connect call against a timeout promise — if the server doesn't respond
3160
- * within `timeoutMs`, the attempt is aborted and counted as a failure.
3161
- * 3. On success, replaces any stale client entry for this session in the `clients` array.
3210
+ * 1. Creates a fresh `MCPClient` from the session data.
3211
+ * 2. Races `client.connect()` against a timeout.
3212
+ * 3. On success, replaces any stale entry and fires `onSessionConnected`.
3162
3213
  * 4. On failure, waits `retryDelay` ms before the next attempt.
3163
3214
  *
3164
- * If all attempts are exhausted, logs an error and returns silently (does not throw),
3165
- * so a single bad server doesn't block the rest of the batch from connecting.
3215
+ * If all attempts are exhausted, logs an error and returns silently so
3216
+ * a single bad server doesn't block the rest of the batch.
3166
3217
  */
3167
3218
  async establishConnectionWithRetries(session) {
3168
- const maxRetries = this.options.maxRetries ?? DEFAULT_MAX_RETRIES;
3169
- const retryDelay = this.options.retryDelay ?? DEFAULT_RETRY_DELAY_MS;
3219
+ const maxRetries = this.options.maxRetries;
3220
+ const retryDelay = this.options.retryDelay;
3170
3221
  let lastError;
3171
3222
  for (let attempt = 0; attempt <= maxRetries; attempt++) {
3172
3223
  try {
@@ -3180,10 +3231,13 @@ var MultiSessionClient = class {
3180
3231
  transportType: session.transportType,
3181
3232
  headers: session.headers
3182
3233
  });
3183
- const timeoutMs = this.options.timeout ?? DEFAULT_TIMEOUT_MS;
3234
+ const timeoutMs = this.options.timeout;
3184
3235
  let timeoutTimer;
3185
3236
  const timeoutPromise = new Promise((_, reject) => {
3186
- timeoutTimer = setTimeout(() => reject(new Error(`Connection timed out after ${timeoutMs}ms`)), timeoutMs);
3237
+ timeoutTimer = setTimeout(
3238
+ () => reject(new Error(`Connection timed out after ${timeoutMs}ms`)),
3239
+ timeoutMs
3240
+ );
3187
3241
  });
3188
3242
  try {
3189
3243
  await Promise.race([client.connect(), timeoutPromise]);
@@ -3192,6 +3246,7 @@ var MultiSessionClient = class {
3192
3246
  }
3193
3247
  this.clients = this.clients.filter((c) => c.getSessionId() !== session.sessionId);
3194
3248
  this.clients.push(client);
3249
+ this.options.onSessionConnected?.(session.sessionId, client);
3195
3250
  return;
3196
3251
  } catch (error) {
3197
3252
  lastError = error;
@@ -3200,58 +3255,11 @@ var MultiSessionClient = class {
3200
3255
  }
3201
3256
  }
3202
3257
  }
3203
- console.error(`[MultiSessionClient] Failed to connect to session ${session.sessionId} after ${maxRetries + 1} attempts:`, lastError);
3204
- }
3205
- /**
3206
- * The main entry point. Fetches all active sessions for this userId from
3207
- * storage and establishes connections to all of them in batches.
3208
- *
3209
- * Call this once after creating the client. On traditional servers, you can
3210
- * cache the `MultiSessionClient` instance after calling `connect()` to avoid
3211
- * re-fetching and re-connecting on every request.
3212
- */
3213
- async connect() {
3214
- const sessions2 = await this.getActiveSessions();
3215
- const activeSessionIds = new Set(sessions2.map((s) => s.sessionId));
3216
- this.clients = this.clients.filter((c) => activeSessionIds.has(c.getSessionId()));
3217
- await this.connectInBatches(sessions2);
3218
- }
3219
- /**
3220
- * Drops all cached `MCPClient` instances and reconnects fresh from storage.
3221
- *
3222
- * Call this when downstream MCP servers have expired their transport sessions
3223
- * (e.g. after a remote server restart) and subsequent tool calls return
3224
- * "Session not found. Reconnect without session header." errors.
3225
- *
3226
- * OAuth tokens are preserved in the storage backend — no re-authentication
3227
- * is required. Only the in-memory transport sessions are cleared.
3228
- */
3229
- async reconnect() {
3230
- await this.disconnect();
3231
- await this.connect();
3232
- }
3233
- /**
3234
- * Returns all currently connected `MCPClient` instances.
3235
- *
3236
- * Use this to enumerate available tools across all connected servers,
3237
- * or to route a tool call to the right client by `serverId`.
3238
- */
3239
- getClients() {
3240
- return this.clients;
3241
- }
3242
- /**
3243
- * Gracefully disconnects all active MCP clients and clears the internal client list.
3244
- *
3245
- * For Streamable HTTP sessions, each client sends an HTTP DELETE to its MCP
3246
- * endpoint per the spec before closing locally. All disconnects run in
3247
- * parallel so shutdown is not serialised across many sessions.
3248
- *
3249
- * Call this during server shutdown or when a user logs out to free up
3250
- * underlying transport resources (SSE streams, HTTP connections, etc.).
3251
- */
3252
- async disconnect() {
3253
- await Promise.all(this.clients.map((client) => client.disconnect()));
3254
- this.clients = [];
3258
+ this.options.onSessionFailed?.(session.sessionId, lastError);
3259
+ console.error(
3260
+ `[MultiSessionClient] Failed to connect to session ${session.sessionId} after ${maxRetries + 1} attempts:`,
3261
+ lastError
3262
+ );
3255
3263
  }
3256
3264
  };
3257
3265