@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.
- package/dist/adapters/agui-adapter.d.mts +3 -4
- package/dist/adapters/agui-adapter.d.ts +3 -4
- package/dist/adapters/agui-middleware.d.mts +3 -4
- package/dist/adapters/agui-middleware.d.ts +3 -4
- package/dist/adapters/ai-adapter.d.mts +3 -4
- package/dist/adapters/ai-adapter.d.ts +3 -4
- package/dist/adapters/langchain-adapter.d.mts +3 -4
- package/dist/adapters/langchain-adapter.d.ts +3 -4
- package/dist/adapters/mastra-adapter.d.mts +2 -2
- package/dist/adapters/mastra-adapter.d.ts +2 -2
- package/dist/client/index.d.mts +2 -3
- package/dist/client/index.d.ts +2 -3
- package/dist/client/react.d.mts +4 -6
- package/dist/client/react.d.ts +4 -6
- package/dist/client/vue.d.mts +4 -6
- package/dist/client/vue.d.ts +4 -6
- package/dist/{index-Ch7ouNSa.d.ts → index-B8kJSrBJ.d.ts} +1 -2
- package/dist/{index-L5XoXgsb.d.mts → index-DiJsm_lK.d.mts} +1 -2
- package/dist/index.d.mts +5 -6
- package/dist/index.d.ts +5 -6
- package/dist/index.js +103 -95
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +103 -95
- package/dist/index.mjs.map +1 -1
- package/dist/{multi-session-client-Bwm-efqg.d.ts → multi-session-client-BluyCPo9.d.ts} +201 -71
- package/dist/{multi-session-client-k-9RvWvi.d.mts → multi-session-client-CWs-AE78.d.mts} +201 -71
- package/dist/server/index.d.mts +5 -128
- package/dist/server/index.d.ts +5 -128
- package/dist/server/index.js +103 -95
- package/dist/server/index.js.map +1 -1
- package/dist/server/index.mjs +103 -95
- package/dist/server/index.mjs.map +1 -1
- package/dist/shared/index.d.mts +4 -5
- package/dist/shared/index.d.ts +4 -5
- package/dist/{tool-router-CuApsDiV.d.mts → tool-router-CbG4Tum6.d.mts} +1 -1
- package/dist/{tool-router-CZMrOG8J.d.ts → tool-router-ChIhPwgP.d.ts} +1 -1
- package/dist/{types-DCk_IF4L.d.mts → types-CjczQwNX.d.mts} +122 -1
- package/dist/{types-DCk_IF4L.d.ts → types-CjczQwNX.d.ts} +122 -1
- package/package.json +1 -1
- package/src/server/mcp/multi-session-client.ts +177 -132
- package/dist/events-C4m7tK1U.d.mts +0 -122
- package/dist/events-C4m7tK1U.d.ts +0 -122
|
@@ -1,10 +1,9 @@
|
|
|
1
|
-
import { M as MCPClient, a as MultiSessionClient } from '../multi-session-client-
|
|
2
|
-
import { d as ToolRouter } from '../tool-router-
|
|
3
|
-
import '../
|
|
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-
|
|
2
|
-
import { d as ToolRouter } from '../tool-router-
|
|
3
|
-
import '../
|
|
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-
|
|
6
|
-
import '../
|
|
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-
|
|
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-
|
|
6
|
-
import '../
|
|
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-
|
|
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-
|
|
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-
|
|
4
|
-
import '../
|
|
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-
|
|
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-
|
|
4
|
-
import '../
|
|
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-
|
|
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-
|
|
4
|
-
import '../
|
|
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-
|
|
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-
|
|
4
|
-
import '../
|
|
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-
|
|
1
|
+
import { M as MCPClient, a as MultiSessionClient } from '../multi-session-client-CWs-AE78.mjs';
|
|
2
2
|
import { z } from 'zod';
|
|
3
|
-
import '../
|
|
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-
|
|
1
|
+
import { M as MCPClient, a as MultiSessionClient } from '../multi-session-client-BluyCPo9.js';
|
|
2
2
|
import { z } from 'zod';
|
|
3
|
-
import '../
|
|
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';
|
package/dist/client/index.d.mts
CHANGED
|
@@ -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-
|
|
2
|
-
export {
|
|
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';
|
package/dist/client/index.d.ts
CHANGED
|
@@ -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-
|
|
2
|
-
export {
|
|
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';
|
package/dist/client/react.d.mts
CHANGED
|
@@ -1,9 +1,7 @@
|
|
|
1
|
-
import { c as SSEClient, e as AppHostOptions, f as AppHostClient, a as AppHost } from '../index-
|
|
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-
|
|
3
|
-
import {
|
|
4
|
-
export {
|
|
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';
|
package/dist/client/react.d.ts
CHANGED
|
@@ -1,9 +1,7 @@
|
|
|
1
|
-
import { c as SSEClient, e as AppHostOptions, f as AppHostClient, a as AppHost } from '../index-
|
|
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-
|
|
3
|
-
import {
|
|
4
|
-
export {
|
|
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';
|
package/dist/client/vue.d.mts
CHANGED
|
@@ -1,9 +1,7 @@
|
|
|
1
|
-
import { c as SSEClient } from '../index-
|
|
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-
|
|
3
|
-
import {
|
|
4
|
-
export {
|
|
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
|
|
package/dist/client/vue.d.ts
CHANGED
|
@@ -1,9 +1,7 @@
|
|
|
1
|
-
import { c as SSEClient } from '../index-
|
|
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-
|
|
3
|
-
import {
|
|
4
|
-
export {
|
|
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,
|
|
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,
|
|
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-
|
|
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,
|
|
4
|
-
export { D as Disposable,
|
|
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-
|
|
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-
|
|
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-
|
|
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,
|
|
4
|
-
export { D as Disposable,
|
|
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-
|
|
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-
|
|
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
|
-
*
|
|
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
|
|
3094
|
-
* ones that are ready to connect.
|
|
3093
|
+
* Fetches active sessions and establishes connections to all of them.
|
|
3095
3094
|
*
|
|
3096
|
-
*
|
|
3097
|
-
*
|
|
3098
|
-
*
|
|
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
|
|
3102
|
-
const
|
|
3103
|
-
const
|
|
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
|
|
3163
|
+
* Connects a list of sessions in controlled batches.
|
|
3110
3164
|
*
|
|
3111
|
-
* Batching prevents overwhelming the event loop or external servers when
|
|
3112
|
-
* has many active MCP sessions
|
|
3113
|
-
*
|
|
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
|
|
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
|
|
3125
|
-
*
|
|
3126
|
-
*
|
|
3127
|
-
*
|
|
3128
|
-
* - If a connection attempt for this session is already in-flight
|
|
3129
|
-
*
|
|
3130
|
-
*
|
|
3131
|
-
*
|
|
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
|
-
*
|
|
3208
|
+
* Core connection loop for a single session with retry logic.
|
|
3155
3209
|
*
|
|
3156
|
-
*
|
|
3157
|
-
*
|
|
3158
|
-
*
|
|
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
|
|
3165
|
-
*
|
|
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
|
|
3169
|
-
const retryDelay = this.options.retryDelay
|
|
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
|
|
3234
|
+
const timeoutMs = this.options.timeout;
|
|
3184
3235
|
let timeoutTimer;
|
|
3185
3236
|
const timeoutPromise = new Promise((_, reject) => {
|
|
3186
|
-
timeoutTimer = setTimeout(
|
|
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
|
-
|
|
3204
|
-
|
|
3205
|
-
|
|
3206
|
-
|
|
3207
|
-
|
|
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
|
|