@mcp-ts/sdk 1.0.0 → 1.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (43) hide show
  1. package/README.md +3 -3
  2. package/dist/adapters/agui-adapter.d.mts +19 -42
  3. package/dist/adapters/agui-adapter.d.ts +19 -42
  4. package/dist/adapters/agui-adapter.js +69 -69
  5. package/dist/adapters/agui-adapter.js.map +1 -1
  6. package/dist/adapters/agui-adapter.mjs +69 -70
  7. package/dist/adapters/agui-adapter.mjs.map +1 -1
  8. package/dist/adapters/agui-middleware.d.mts +24 -136
  9. package/dist/adapters/agui-middleware.d.ts +24 -136
  10. package/dist/adapters/agui-middleware.js +275 -350
  11. package/dist/adapters/agui-middleware.js.map +1 -1
  12. package/dist/adapters/agui-middleware.mjs +275 -350
  13. package/dist/adapters/agui-middleware.mjs.map +1 -1
  14. package/dist/client/index.d.mts +2 -2
  15. package/dist/client/index.d.ts +2 -2
  16. package/dist/client/react.d.mts +2 -2
  17. package/dist/client/react.d.ts +2 -2
  18. package/dist/client/vue.d.mts +2 -2
  19. package/dist/client/vue.d.ts +2 -2
  20. package/dist/index.d.mts +1 -1
  21. package/dist/index.d.ts +1 -1
  22. package/dist/index.js +2 -1
  23. package/dist/index.js.map +1 -1
  24. package/dist/index.mjs +2 -1
  25. package/dist/index.mjs.map +1 -1
  26. package/dist/server/index.d.mts +3 -3
  27. package/dist/server/index.d.ts +3 -3
  28. package/dist/server/index.js +2 -1
  29. package/dist/server/index.js.map +1 -1
  30. package/dist/server/index.mjs +2 -1
  31. package/dist/server/index.mjs.map +1 -1
  32. package/dist/shared/index.d.mts +1 -1
  33. package/dist/shared/index.d.ts +1 -1
  34. package/dist/shared/index.js.map +1 -1
  35. package/dist/shared/index.mjs.map +1 -1
  36. package/dist/{types-SbDlA2VX.d.mts → types-CLccx9wW.d.mts} +1 -1
  37. package/dist/{types-SbDlA2VX.d.ts → types-CLccx9wW.d.ts} +1 -1
  38. package/package.json +2 -2
  39. package/src/adapters/agui-adapter.ts +98 -109
  40. package/src/adapters/agui-middleware.ts +424 -512
  41. package/src/server/handlers/sse-handler.ts +4 -1
  42. package/src/server/storage/types.ts +1 -1
  43. package/src/shared/types.ts +1 -1
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/adapters/agui-adapter.ts","../../src/adapters/agui-middleware.ts"],"names":["result","AguiAdapter"],"mappings":"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","file":"agui-middleware.mjs","sourcesContent":["/**\r\n * MCP Adapter for AG-UI Integration\r\n *\r\n * This adapter transforms MCP tools into formats compatible with AG-UI agents.\r\n * It provides tools with handlers for server-side execution and tool definitions\r\n * in JSON Schema format for passing to remote agents.\r\n *\r\n * @example\r\n * ```typescript\r\n * import { MultiSessionClient } from '@mcp-ts/sdk/server';\r\n * import { AguiAdapter } from '@mcp-ts/sdk/adapters/mcp-adapter';\r\n * import { createMcpMiddleware } from '@mcp-ts/sdk/adapters/agui-middleware';\r\n * import { HttpAgent } from '@ag-ui/client';\r\n *\r\n * // Create MCP client\r\n * const mcpClient = new MultiSessionClient('user_123');\r\n * await mcpClient.connect();\r\n *\r\n * // Create adapter and get tools\r\n * const adapter = new AguiAdapter(mcpClient);\r\n * const tools = await adapter.getTools();\r\n *\r\n * // Use with AG-UI middleware\r\n * const agent = new HttpAgent({ url: 'http://localhost:8000/agent' });\r\n * agent.use(createMcpMiddleware(mcpClient, { tools }));\r\n * ```\r\n */\r\n\r\nimport { MCPClient } from '../server/mcp/oauth-client.js';\r\nimport { MultiSessionClient } from '../server/mcp/multi-session-client.js';\r\n\r\n/**\r\n * Configuration options for AguiAdapter\r\n */\r\nexport interface AguiAdapterOptions {\r\n /**\r\n * Prefix for tool names to avoid collision with other tools.\r\n * @default serverId or 'mcp'\r\n */\r\n prefix?: string;\r\n}\r\n\r\n/**\r\n * AG-UI Tool with handler for server-side execution.\r\n *\r\n * Tools contain:\r\n * - `name`: Unique identifier (prefixed with server ID)\r\n * - `description`: Human-readable description for the LLM\r\n * - `parameters`: JSON Schema defining the input format\r\n * - `handler`: Function that executes the tool via MCP client\r\n */\r\nexport interface AguiTool {\r\n /** Unique tool name (e.g., \"server-abc_get_weather\") */\r\n name: string;\r\n /** Human-readable description for the LLM */\r\n description: string;\r\n /** JSON Schema format parameters */\r\n parameters?: Record<string, any>;\r\n /** Handler function that executes the MCP tool */\r\n handler?: (args: any) => any | Promise<any>;\r\n}\r\n\r\n/**\r\n * Tool definition format for passing to remote agents (without handler).\r\n * Compatible with OpenAI's function calling API.\r\n */\r\nexport interface AguiToolDefinition {\r\n /** Tool name (e.g., \"server-abc_get_weather\") */\r\n name: string;\r\n /** Human-readable description */\r\n description: string;\r\n /** JSON Schema format parameters */\r\n parameters: Record<string, any>;\r\n}\r\n\r\n/**\r\n * Adapter that transforms MCP tools into AG-UI compatible formats.\r\n *\r\n * This adapter provides two main outputs:\r\n * - `getTools()`: Returns tools with handlers for server-side execution\r\n * - `getToolDefinitions()`: Returns tool definitions in JSON Schema format for remote agents\r\n */\r\nexport class AguiAdapter {\r\n constructor(\r\n private client: MCPClient | MultiSessionClient,\r\n private options: AguiAdapterOptions = {}\r\n ) { }\r\n\r\n /**\r\n * Get tools with handlers for MCP tool execution.\r\n *\r\n * Each tool includes a handler function that:\r\n * 1. Calls the MCP tool via the client\r\n * 2. Extracts text content from the result\r\n * 3. Returns the result as a string or JSON\r\n *\r\n * @returns Array of AguiTool objects\r\n */\r\n async getTools(): Promise<AguiTool[]> {\r\n const isMultiSession = typeof (this.client as any).getClients === 'function';\r\n\r\n if (isMultiSession) {\r\n const clients = (this.client as MultiSessionClient).getClients();\r\n const allTools: AguiTool[] = [];\r\n\r\n for (const client of clients) {\r\n const tools = await this.transformTools(client);\r\n allTools.push(...tools);\r\n }\r\n\r\n return allTools;\r\n }\r\n\r\n return this.transformTools(this.client as MCPClient);\r\n }\r\n\r\n private async transformTools(client: MCPClient): Promise<AguiTool[]> {\r\n if (!client.isConnected()) {\r\n return [];\r\n }\r\n\r\n const result = await client.listTools();\r\n const prefix = this.options.prefix ?? client.getServerId() ?? 'mcp';\r\n const tools: AguiTool[] = [];\r\n\r\n for (const tool of result.tools) {\r\n const toolName = `${prefix}_${tool.name}`;\r\n\r\n tools.push({\r\n name: toolName,\r\n description: tool.description || `Execute ${tool.name}`,\r\n parameters: tool.inputSchema || { type: 'object', properties: {} },\r\n handler: async (args: any) => {\r\n console.log(`[AguiAdapter] Executing MCP tool: ${tool.name}`, args);\r\n const result = await client.callTool(tool.name, args);\r\n\r\n // Extract text content from result\r\n if (result.content && Array.isArray(result.content)) {\r\n const textContent = result.content\r\n .filter((c: any) => c.type === 'text')\r\n .map((c: any) => c.text)\r\n .join('\\n');\r\n return textContent || result;\r\n }\r\n\r\n return result;\r\n }\r\n });\r\n }\r\n\r\n return tools;\r\n }\r\n\r\n /**\r\n * Get tools as a function (for dynamic loading).\r\n *\r\n * @returns Function that returns a Promise of tools\r\n */\r\n getToolsFunction(): () => Promise<AguiTool[]> {\r\n return async () => this.getTools();\r\n }\r\n\r\n /**\r\n * Get tool definitions in JSON Schema format for passing to remote agents.\r\n *\r\n * This format is compatible with:\r\n * - OpenAI's function calling API\r\n * - AG-UI input.tools format\r\n * - Most LLM tool/function calling implementations\r\n *\r\n * @returns Array of AguiToolDefinition objects\r\n */\r\n async getToolDefinitions(): Promise<AguiToolDefinition[]> {\r\n const isMultiSession = typeof (this.client as any).getClients === 'function';\r\n\r\n if (isMultiSession) {\r\n const clients = (this.client as MultiSessionClient).getClients();\r\n const allTools: AguiToolDefinition[] = [];\r\n\r\n for (const client of clients) {\r\n const tools = await this.transformToolDefinitions(client);\r\n allTools.push(...tools);\r\n }\r\n\r\n return allTools;\r\n }\r\n\r\n return this.transformToolDefinitions(this.client as MCPClient);\r\n }\r\n\r\n private async transformToolDefinitions(client: MCPClient): Promise<AguiToolDefinition[]> {\r\n if (!client.isConnected()) {\r\n return [];\r\n }\r\n\r\n const result = await client.listTools();\r\n const prefix = this.options.prefix ?? client.getServerId() ?? 'mcp';\r\n const tools: AguiToolDefinition[] = [];\r\n\r\n for (const tool of result.tools) {\r\n tools.push({\r\n name: `${prefix}_${tool.name}`,\r\n description: tool.description || `Execute ${tool.name}`,\r\n parameters: tool.inputSchema || { type: 'object', properties: {} },\r\n });\r\n }\r\n\r\n return tools;\r\n }\r\n}\r\n","/**\n * AG-UI Middleware for MCP Tool Execution\n *\n * This middleware intercepts tool calls from remote agents (e.g., LangGraph, AutoGen)\n * and executes MCP tools server-side, returning results back to the agent.\n *\n * ## How It Works\n *\n * 1. **Tool Injection**: When a run starts, the middleware injects MCP tool definitions\n * into `input.tools` so the remote agent knows about available MCP tools.\n *\n * 2. **Event Interception**: The middleware subscribes to the agent's event stream and\n * tracks tool calls using AG-UI events:\n * - `TOOL_CALL_START`: Records tool name and ID\n * - `TOOL_CALL_ARGS`: Accumulates streamed arguments\n * - `TOOL_CALL_END`: Marks tool call as complete\n * - `RUN_FINISHED`: Triggers execution of pending MCP tools\n *\n * 3. **Server-Side Execution**: When `RUN_FINISHED` arrives with pending MCP tool calls,\n * the middleware:\n * - Executes each MCP tool via the MCP client\n * - Emits `TOOL_CALL_RESULT` events with the results\n * - Adds results to `input.messages` for context\n * - Emits `RUN_FINISHED` to close the current run\n * - Triggers a new run so the agent can process tool results\n *\n * 4. **Recursive Processing**: If the new run makes more MCP tool calls, the cycle\n * repeats until the agent completes without pending MCP calls.\n *\n * ## Tool Identification\n *\n * MCP tools are identified by a configurable prefix (default: `server-`).\n * Tools not matching this prefix are passed through without interception.\n *\n * @requires @ag-ui/client - This middleware requires @ag-ui/client as a peer dependency\n * @requires rxjs - Uses RxJS Observables for event streaming\n *\n * @example\n * ```typescript\n * import { HttpAgent } from '@ag-ui/client';\n * import { McpMiddleware } from '@mcp-ts/sdk/adapters/agui-middleware';\n * import { AguiAdapter } from '@mcp-ts/sdk/adapters/agui-adapter';\n *\n * // Create MCP client and adapter\n * const mcpClient = new MultiSessionClient('user_123');\n * await mcpClient.connect();\n *\n * const adapter = new AguiAdapter(mcpClient);\n * const actions = await adapter.getActions();\n *\n * // Create middleware with pre-loaded actions\n * const middleware = new McpMiddleware({\n * client: mcpClient,\n * actions,\n * toolPrefix: 'server-',\n * });\n *\n * // Use with HttpAgent\n * const agent = new HttpAgent({ url: 'http://localhost:8000/agent' });\n * agent.use(middleware);\n * ```\n */\n\nimport { Observable, Subscriber } from 'rxjs';\nimport {\n Middleware,\n EventType,\n type AbstractAgent,\n type RunAgentInput,\n type BaseEvent,\n type ToolCallEndEvent,\n} from '@ag-ui/client';\nimport { MCPClient } from '../server/mcp/oauth-client.js';\nimport { MultiSessionClient } from '../server/mcp/multi-session-client.js';\nimport type { AguiTool } from './agui-adapter.js';\n\n/**\n * Tool definition format for AG-UI input.tools\n */\nexport interface AgUiTool {\n name: string;\n description: string;\n parameters?: Record<string, any>;\n}\n\n/**\n * Configuration for McpMiddleware\n */\nexport interface McpMiddlewareConfig {\n /**\n * MCP client or MultiSessionClient for executing tools\n */\n client: MCPClient | MultiSessionClient;\n\n /**\n * Prefix used to identify MCP tool names.\n * Tools starting with this prefix will be executed server-side.\n * @default 'server-'\n */\n toolPrefix?: string;\n\n /**\n * Pre-loaded tools with handlers for execution.\n * If not provided, tools will be loaded from the MCP client on first use.\n */\n tools?: AguiTool[];\n}\n\n/**\n * AG-UI Middleware that executes MCP tools server-side.\n *\n * This middleware intercepts tool calls for MCP tools (identified by prefix),\n * executes them via the MCP client, and returns results to the agent.\n *\n * @see {@link createMcpMiddleware} for a simpler factory function\n */\nexport class McpMiddleware extends Middleware {\n private client: MCPClient | MultiSessionClient;\n private toolPrefix: string;\n private actions: AguiTool[] | null;\n private tools: AgUiTool[] | null;\n private actionsLoaded: boolean = false;\n\n constructor(config: McpMiddlewareConfig) {\n super();\n this.client = config.client;\n this.toolPrefix = config.toolPrefix ?? 'server-';\n this.actions = config.tools ?? null;\n this.tools = null;\n if (this.actions) {\n this.actionsLoaded = true;\n this.tools = this.actionsToTools(this.actions);\n }\n }\n\n /**\n * Convert actions to AG-UI tool format\n */\n private actionsToTools(actions: AguiTool[]): AgUiTool[] {\n return actions.map(action => ({\n name: action.name,\n description: action.description,\n parameters: action.parameters || { type: 'object', properties: {} },\n }));\n }\n\n /**\n * Check if a tool name is an MCP tool (matches the configured prefix)\n */\n private isMcpTool(toolName: string): boolean {\n return toolName.startsWith(this.toolPrefix);\n }\n\n /**\n * Load actions from the MCP client if not already loaded\n */\n private async ensureActionsLoaded(): Promise<void> {\n if (this.actionsLoaded) return;\n\n const { AguiAdapter } = await import('./agui-adapter.js');\n const adapter = new AguiAdapter(this.client);\n this.actions = await adapter.getTools();\n this.actionsLoaded = true;\n }\n\n /**\n * Execute an MCP tool and return the result as a string\n */\n private async executeTool(toolName: string, args: Record<string, any>): Promise<string> {\n await this.ensureActionsLoaded();\n\n const action = this.actions?.find(a => a.name === toolName);\n if (!action) {\n return `Error: Tool not found: ${toolName}`;\n }\n\n if (!action.handler) {\n return `Error: Tool has no handler: ${toolName}`;\n }\n\n try {\n console.log(`[McpMiddleware] Executing tool: ${toolName}`, args);\n const result = await action.handler(args);\n console.log(`[McpMiddleware] Tool result:`, typeof result === 'string' ? result.slice(0, 200) : result);\n return typeof result === 'string' ? result : JSON.stringify(result);\n } catch (error: any) {\n console.error(`[McpMiddleware] Error executing tool:`, error);\n return `Error executing tool: ${error.message || String(error)}`;\n }\n }\n\n /**\n * Generate a unique message ID for tool results\n */\n private generateMessageId(): string {\n return `mcp_result_${Date.now()}_${Math.random().toString(36).slice(2, 9)}`;\n }\n\n /**\n * Run the middleware, intercepting and executing MCP tool calls\n */\n run(input: RunAgentInput, next: AbstractAgent): Observable<BaseEvent> {\n return new Observable<BaseEvent>((observer: Subscriber<BaseEvent>) => {\n // State for this run\n const toolCallArgsBuffer = new Map<string, string>();\n const toolCallNames = new Map<string, string>();\n const pendingMcpCalls = new Set<string>();\n\n console.log(`[McpMiddleware] Starting run with ${this.actions?.length ?? 0} registered actions`);\n console.log(`[McpMiddleware] Tool prefix: \"${this.toolPrefix}\"`);\n\n // Inject MCP tools into input.tools\n if (this.tools && this.tools.length > 0) {\n const existingTools = input.tools || [];\n input.tools = [...existingTools, ...this.tools];\n console.log(`[McpMiddleware] Injected ${this.tools.length} MCP tools into input.tools`);\n console.log(`[McpMiddleware] Total tools: ${input.tools.length}`);\n console.log(`[McpMiddleware] Tool names:`, this.tools.map(t => t.name));\n }\n\n const handleRunFinished = async (event: BaseEvent) => {\n if (pendingMcpCalls.size === 0) {\n observer.next(event);\n observer.complete();\n return;\n }\n\n console.log(`[McpMiddleware] RUN_FINISHED received with ${pendingMcpCalls.size} pending MCP calls`);\n\n // Execute all pending MCP tool calls\n const callPromises = [...pendingMcpCalls].map(async (toolCallId) => {\n const toolName = toolCallNames.get(toolCallId);\n if (!toolName) return;\n\n const argsString = toolCallArgsBuffer.get(toolCallId) || '{}';\n let args: Record<string, any> = {};\n try {\n args = JSON.parse(argsString);\n } catch (e) {\n console.error(`[McpMiddleware] Failed to parse args:`, argsString);\n }\n\n console.log(`[McpMiddleware] Executing pending tool: ${toolName}`);\n const result = await this.executeTool(toolName, args);\n const messageId = this.generateMessageId();\n\n // Emit tool result event\n const resultEvent: BaseEvent = {\n type: EventType.TOOL_CALL_RESULT,\n toolCallId,\n messageId,\n content: result,\n role: 'tool',\n timestamp: Date.now(),\n } as any;\n\n console.log(`[McpMiddleware] Emitting TOOL_CALL_RESULT for: ${toolName}`);\n observer.next(resultEvent);\n\n // Add tool result to messages for the next run\n input.messages.push({\n id: messageId,\n role: 'tool',\n toolCallId,\n content: result,\n } as any);\n\n pendingMcpCalls.delete(toolCallId);\n });\n\n await Promise.all(callPromises);\n\n // Emit RUN_FINISHED before starting new run\n console.log(`[McpMiddleware] All MCP tools executed, emitting RUN_FINISHED`);\n observer.next({\n type: EventType.RUN_FINISHED,\n threadId: (input as any).threadId,\n runId: (input as any).runId,\n timestamp: Date.now(),\n } as any);\n\n // Trigger a new run to continue the conversation\n console.log(`[McpMiddleware] Triggering new run`);\n this.triggerNewRun(observer, input, next, toolCallArgsBuffer, toolCallNames, pendingMcpCalls);\n };\n\n const subscription = next.run(input).subscribe({\n next: (event: BaseEvent) => {\n // Track tool call names from TOOL_CALL_START events\n if (event.type === EventType.TOOL_CALL_START) {\n const startEvent = event as any;\n if (startEvent.toolCallId && startEvent.toolCallName) {\n toolCallNames.set(startEvent.toolCallId, startEvent.toolCallName);\n const isMcp = this.isMcpTool(startEvent.toolCallName);\n console.log(`[McpMiddleware] TOOL_CALL_START: ${startEvent.toolCallName} (id: ${startEvent.toolCallId}, isMCP: ${isMcp})`);\n\n if (isMcp) {\n pendingMcpCalls.add(startEvent.toolCallId);\n }\n }\n }\n\n // Accumulate tool call arguments from TOOL_CALL_ARGS events\n if (event.type === EventType.TOOL_CALL_ARGS) {\n const argsEvent = event as any;\n if (argsEvent.toolCallId && argsEvent.delta) {\n const existing = toolCallArgsBuffer.get(argsEvent.toolCallId) || '';\n toolCallArgsBuffer.set(argsEvent.toolCallId, existing + argsEvent.delta);\n }\n }\n\n // Track TOOL_CALL_END\n if (event.type === EventType.TOOL_CALL_END) {\n const endEvent = event as ToolCallEndEvent;\n const toolName = toolCallNames.get(endEvent.toolCallId);\n console.log(`[McpMiddleware] TOOL_CALL_END: ${toolName ?? 'unknown'} (id: ${endEvent.toolCallId})`);\n }\n\n // Handle RUN_FINISHED - execute pending MCP tools\n if (event.type === EventType.RUN_FINISHED) {\n handleRunFinished(event);\n return;\n }\n\n // Pass through all other events\n observer.next(event);\n },\n error: (error) => {\n observer.error(error);\n },\n complete: () => {\n if (pendingMcpCalls.size === 0) {\n observer.complete();\n }\n },\n });\n\n return () => {\n subscription.unsubscribe();\n };\n });\n }\n\n private triggerNewRun(\n observer: Subscriber<BaseEvent>,\n input: RunAgentInput,\n next: AbstractAgent,\n toolCallArgsBuffer: Map<string, string>,\n toolCallNames: Map<string, string>,\n pendingMcpCalls: Set<string>,\n ): void {\n toolCallArgsBuffer.clear();\n toolCallNames.clear();\n pendingMcpCalls.clear();\n\n console.log(`[McpMiddleware] Starting new run with updated messages`);\n\n const subscription = next.run(input).subscribe({\n next: (event: BaseEvent) => {\n if (event.type === EventType.TOOL_CALL_START) {\n const startEvent = event as any;\n if (startEvent.toolCallId && startEvent.toolCallName) {\n toolCallNames.set(startEvent.toolCallId, startEvent.toolCallName);\n const isMcp = this.isMcpTool(startEvent.toolCallName);\n console.log(`[McpMiddleware] TOOL_CALL_START: ${startEvent.toolCallName} (id: ${startEvent.toolCallId}, isMCP: ${isMcp})`);\n\n if (isMcp) {\n pendingMcpCalls.add(startEvent.toolCallId);\n }\n }\n }\n\n if (event.type === EventType.TOOL_CALL_ARGS) {\n const argsEvent = event as any;\n if (argsEvent.toolCallId && argsEvent.delta) {\n const existing = toolCallArgsBuffer.get(argsEvent.toolCallId) || '';\n toolCallArgsBuffer.set(argsEvent.toolCallId, existing + argsEvent.delta);\n }\n }\n\n if (event.type === EventType.TOOL_CALL_END) {\n const endEvent = event as ToolCallEndEvent;\n const toolName = toolCallNames.get(endEvent.toolCallId);\n console.log(`[McpMiddleware] TOOL_CALL_END: ${toolName ?? 'unknown'} (id: ${endEvent.toolCallId})`);\n }\n\n if (event.type === EventType.RUN_FINISHED) {\n if (pendingMcpCalls.size > 0) {\n console.log(`[McpMiddleware] RUN_FINISHED with ${pendingMcpCalls.size} pending calls, executing...`);\n this.handlePendingCalls(observer, input, next, toolCallArgsBuffer, toolCallNames, pendingMcpCalls);\n } else {\n observer.next(event);\n observer.complete();\n }\n return;\n }\n\n observer.next(event);\n },\n error: (error) => observer.error(error),\n complete: () => {\n if (pendingMcpCalls.size === 0) {\n observer.complete();\n }\n },\n });\n }\n\n private async handlePendingCalls(\n observer: Subscriber<BaseEvent>,\n input: RunAgentInput,\n next: AbstractAgent,\n toolCallArgsBuffer: Map<string, string>,\n toolCallNames: Map<string, string>,\n pendingMcpCalls: Set<string>,\n ): Promise<void> {\n const callPromises = [...pendingMcpCalls].map(async (toolCallId) => {\n const toolName = toolCallNames.get(toolCallId);\n if (!toolName) return;\n\n const argsString = toolCallArgsBuffer.get(toolCallId) || '{}';\n let args: Record<string, any> = {};\n try {\n args = JSON.parse(argsString);\n } catch (e) {\n console.error(`[McpMiddleware] Failed to parse args:`, argsString);\n }\n\n console.log(`[McpMiddleware] Executing pending tool: ${toolName}`);\n const result = await this.executeTool(toolName, args);\n const messageId = this.generateMessageId();\n\n const resultEvent: BaseEvent = {\n type: EventType.TOOL_CALL_RESULT,\n toolCallId,\n messageId,\n content: result,\n role: 'tool',\n timestamp: Date.now(),\n } as any;\n\n console.log(`[McpMiddleware] Emitting TOOL_CALL_RESULT for: ${toolName}`);\n observer.next(resultEvent);\n\n input.messages.push({\n id: messageId,\n role: 'tool',\n toolCallId,\n content: result,\n } as any);\n\n pendingMcpCalls.delete(toolCallId);\n });\n\n await Promise.all(callPromises);\n\n console.log(`[McpMiddleware] Pending tools executed, emitting RUN_FINISHED`);\n observer.next({\n type: EventType.RUN_FINISHED,\n threadId: (input as any).threadId,\n runId: (input as any).runId,\n timestamp: Date.now(),\n } as any);\n\n console.log(`[McpMiddleware] Triggering new run`);\n this.triggerNewRun(observer, input, next, toolCallArgsBuffer, toolCallNames, pendingMcpCalls);\n }\n}\n\n/**\n * Factory function to create MCP middleware.\n *\n * This is a convenience wrapper around McpMiddleware that returns a function\n * compatible with the AG-UI middleware pattern.\n *\n * @param client - MCP client or MultiSessionClient\n * @param options - Configuration options\n * @returns Middleware function\n *\n * @example\n * ```typescript\n * import { HttpAgent } from '@ag-ui/client';\n * import { createMcpMiddleware } from '@mcp-ts/sdk/adapters/agui-middleware';\n *\n * const agent = new HttpAgent({ url: 'http://localhost:8000/agent' });\n * agent.use(createMcpMiddleware(multiSessionClient, {\n * toolPrefix: 'server-',\n * actions: mcpActions,\n * }));\n * ```\n */\nexport function createMcpMiddleware(\n client: MCPClient | MultiSessionClient,\n options: { toolPrefix?: string; tools?: AguiTool[] } = {}\n) {\n const middleware = new McpMiddleware({\n client,\n ...options,\n });\n\n return (input: RunAgentInput, next: AbstractAgent): Observable<BaseEvent> => {\n return middleware.run(input, next);\n };\n}\n\n// Legacy exports for backward compatibility\nexport { McpMiddleware as McpToolExecutorMiddleware };\nexport { createMcpMiddleware as createMcpToolMiddleware };\n\n// Re-export types for convenience\nexport { Middleware, EventType };\nexport type { RunAgentInput, BaseEvent, AbstractAgent, ToolCallEndEvent };\n"]}
1
+ {"version":3,"sources":["../../src/adapters/agui-adapter.ts","../../src/adapters/agui-middleware.ts"],"names":[],"mappings":"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","file":"agui-middleware.mjs","sourcesContent":["/**\r\n * MCP Adapter for AG-UI Integration\r\n *\r\n * This adapter transforms MCP tools into formats compatible with AG-UI agents.\r\n * It provides tools with handlers for server-side execution and tool definitions\r\n * in JSON Schema format for passing to remote agents.\r\n *\r\n * @example\r\n * ```typescript\r\n * import { MultiSessionClient } from '@mcp-ts/sdk/server';\r\n * import { AguiAdapter } from '@mcp-ts/sdk/adapters/agui-adapter';\r\n * import { createMcpMiddleware } from '@mcp-ts/sdk/adapters/agui-middleware';\r\n * import { HttpAgent } from '@ag-ui/client';\r\n *\r\n * // Create MCP client\r\n * const mcpClient = new MultiSessionClient('user_123');\r\n * await mcpClient.connect();\r\n *\r\n * // Create adapter and get tools\r\n * const adapter = new AguiAdapter(mcpClient);\r\n * const tools = await adapter.getTools();\r\n *\r\n * // Use with AG-UI middleware\r\n * const agent = new HttpAgent({ url: 'http://localhost:8000/agent' });\r\n * agent.use(createMcpMiddleware({ tools }));\r\n * ```\r\n */\r\n\r\nimport { MCPClient } from '../server/mcp/oauth-client.js';\r\nimport { MultiSessionClient } from '../server/mcp/multi-session-client.js';\r\n\r\n/**\r\n * Cleans a JSON Schema by removing meta-properties that cause issues with\r\n * strict Pydantic validation (e.g., Google ADK).\r\n *\r\n * Removes: $schema, $id, $comment, $defs, definitions\r\n *\r\n * @param schema - The JSON Schema to clean\r\n * @returns Cleaned schema without meta-properties\r\n */\r\nexport function cleanSchema(schema: Record<string, any> | undefined): Record<string, any> {\r\n if (!schema) {\r\n return { type: 'object', properties: {} };\r\n }\r\n\r\n const cleaned = { ...schema };\r\n\r\n // Remove JSON Schema meta-properties that cause Pydantic validation errors\r\n delete cleaned.$schema;\r\n delete cleaned.$id;\r\n delete cleaned.$comment;\r\n delete cleaned.$defs;\r\n delete cleaned.definitions;\r\n\r\n // Recursively clean nested properties\r\n if (cleaned.properties && typeof cleaned.properties === 'object') {\r\n const cleanedProps: Record<string, any> = {};\r\n for (const [key, value] of Object.entries(cleaned.properties)) {\r\n if (typeof value === 'object' && value !== null) {\r\n cleanedProps[key] = cleanSchema(value as Record<string, any>);\r\n } else {\r\n cleanedProps[key] = value;\r\n }\r\n }\r\n cleaned.properties = cleanedProps;\r\n }\r\n\r\n // Clean items if it's an array schema\r\n if (cleaned.items && typeof cleaned.items === 'object') {\r\n cleaned.items = cleanSchema(cleaned.items);\r\n }\r\n\r\n // Clean additionalProperties if it's an object schema\r\n if (cleaned.additionalProperties && typeof cleaned.additionalProperties === 'object') {\r\n cleaned.additionalProperties = cleanSchema(cleaned.additionalProperties);\r\n }\r\n\r\n return cleaned;\r\n}\r\n\r\n/**\r\n * Configuration options for AguiAdapter\r\n */\r\nexport interface AguiAdapterOptions {\r\n /**\r\n * Prefix for tool names to avoid collision with other tools.\r\n * @default serverId or 'mcp'\r\n */\r\n prefix?: string;\r\n}\r\n\r\n/**\r\n * AG-UI Tool with handler for server-side execution.\r\n */\r\nexport interface AguiTool {\r\n name: string;\r\n description: string;\r\n parameters?: Record<string, any>;\r\n handler?: (args: any) => any | Promise<any>;\r\n}\r\n\r\n/**\r\n * Tool definition format for passing to remote agents (without handler).\r\n */\r\nexport interface AguiToolDefinition {\r\n name: string;\r\n description: string;\r\n parameters: Record<string, any>;\r\n}\r\n\r\n/**\r\n * Adapter that transforms MCP tools into AG-UI compatible formats.\r\n */\r\nexport class AguiAdapter {\r\n constructor(\r\n private client: MCPClient | MultiSessionClient,\r\n private options: AguiAdapterOptions = {}\r\n ) { }\r\n\r\n /**\r\n * Get tools with handlers for MCP tool execution.\r\n */\r\n async getTools(): Promise<AguiTool[]> {\r\n if (this.isMultiSession()) {\r\n const clients = (this.client as MultiSessionClient).getClients();\r\n const allTools: AguiTool[] = [];\r\n for (const client of clients) {\r\n allTools.push(...await this.transformTools(client));\r\n }\r\n return allTools;\r\n }\r\n return this.transformTools(this.client as MCPClient);\r\n }\r\n\r\n /**\r\n * Get tool definitions in JSON Schema format for passing to remote agents.\r\n */\r\n async getToolDefinitions(): Promise<AguiToolDefinition[]> {\r\n if (this.isMultiSession()) {\r\n const clients = (this.client as MultiSessionClient).getClients();\r\n const allTools: AguiToolDefinition[] = [];\r\n for (const client of clients) {\r\n allTools.push(...await this.transformToolDefinitions(client));\r\n }\r\n return allTools;\r\n }\r\n return this.transformToolDefinitions(this.client as MCPClient);\r\n }\r\n\r\n /**\r\n * Get tools as a function (for dynamic loading).\r\n */\r\n getToolsFunction(): () => Promise<AguiTool[]> {\r\n return () => this.getTools();\r\n }\r\n\r\n private isMultiSession(): boolean {\r\n return typeof (this.client as any).getClients === 'function';\r\n }\r\n\r\n private async transformTools(client: MCPClient): Promise<AguiTool[]> {\r\n if (!client.isConnected()) return [];\r\n\r\n const result = await client.listTools();\r\n const prefix = this.options.prefix ?? `tool_${client.getServerId() ?? 'mcp'}`;\r\n\r\n return result.tools.map(tool => ({\r\n name: `${prefix}_${tool.name}`,\r\n description: tool.description || `Execute ${tool.name}`,\r\n parameters: cleanSchema(tool.inputSchema),\r\n handler: async (args: any) => {\r\n console.log(`[AguiAdapter] Executing MCP tool: ${tool.name}`, args);\r\n const result = await client.callTool(tool.name, args);\r\n\r\n if (result.content && Array.isArray(result.content)) {\r\n const textContent = result.content\r\n .filter((c: any) => c.type === 'text')\r\n .map((c: any) => c.text)\r\n .join('\\n');\r\n return textContent || result;\r\n }\r\n return result;\r\n }\r\n }));\r\n }\r\n\r\n private async transformToolDefinitions(client: MCPClient): Promise<AguiToolDefinition[]> {\r\n if (!client.isConnected()) return [];\r\n\r\n const result = await client.listTools();\r\n const prefix = this.options.prefix ?? `tool_${client.getServerId() ?? 'mcp'}`;\r\n\r\n return result.tools.map(tool => ({\r\n name: `${prefix}_${tool.name}`,\r\n description: tool.description || `Execute ${tool.name}`,\r\n parameters: cleanSchema(tool.inputSchema),\r\n }));\r\n }\r\n}\r\n","/**\r\n * AG-UI Middleware for MCP Tool Execution\r\n *\r\n * This middleware intercepts tool calls from remote agents and executes\r\n * MCP tools server-side, returning results back to the agent.\r\n *\r\n * @requires @ag-ui/client - Peer dependency for AG-UI types\r\n * @requires rxjs - Uses RxJS Observables for event streaming\r\n */\r\n\r\nimport { Observable, Subscriber } from 'rxjs';\r\nimport {\r\n Middleware,\r\n EventType,\r\n type AbstractAgent,\r\n type RunAgentInput,\r\n type BaseEvent,\r\n type ToolCallEndEvent,\r\n type Tool,\r\n} from '@ag-ui/client';\r\nimport { type AguiTool, cleanSchema } from './agui-adapter.js';\r\n\r\n/** Tool execution result for continuation */\r\ninterface ToolResult {\r\n toolCallId: string;\r\n toolName: string;\r\n result: string;\r\n messageId: string;\r\n}\r\n\r\n/** State for tracking tool calls during a run */\r\ninterface RunState {\r\n toolCallArgsBuffer: Map<string, string>;\r\n toolCallNames: Map<string, string>;\r\n pendingMcpCalls: Set<string>;\r\n textContent?: string;\r\n error: boolean;\r\n}\r\n\r\n/**\r\n * Configuration for McpMiddleware\r\n */\r\nexport interface McpMiddlewareConfig {\r\n /** Pre-loaded tools with handlers (required) */\r\n tools: AguiTool[];\r\n /** Max result length in chars (default: 50000) */\r\n maxResultLength?: number;\r\n}\r\n\r\n/**\r\n * AG-UI Middleware that executes MCP tools server-side.\r\n */\r\nexport class McpMiddleware extends Middleware {\r\n private tools: AguiTool[];\r\n private toolSchemas: Tool[];\r\n private maxResultLength: number;\r\n\r\n constructor(config: McpMiddlewareConfig) {\r\n super();\r\n this.tools = config.tools;\r\n this.maxResultLength = config.maxResultLength ?? 50000;\r\n this.toolSchemas = this.tools.map((t: AguiTool) => ({\r\n name: t.name,\r\n description: t.description,\r\n parameters: cleanSchema(t.parameters),\r\n }));\r\n }\r\n\r\n private isMcpTool(toolName: string): boolean {\r\n return this.tools.some(t => t.name === toolName);\r\n }\r\n\r\n private parseArgs(argsString: string): Record<string, any> {\r\n if (!argsString?.trim()) return {};\r\n\r\n try {\r\n return JSON.parse(argsString);\r\n } catch {\r\n // Handle duplicated JSON from streaming issues: {...}{...}\r\n const trimmed = argsString.trim();\r\n if (trimmed.includes('}{')) {\r\n const firstObject = trimmed.slice(0, trimmed.indexOf('}{') + 1);\r\n try {\r\n return JSON.parse(firstObject);\r\n } catch {\r\n console.error(`[McpMiddleware] Failed to parse JSON:`, firstObject);\r\n }\r\n }\r\n console.error(`[McpMiddleware] Failed to parse args:`, argsString);\r\n return {};\r\n }\r\n }\r\n\r\n private async executeTool(toolName: string, args: Record<string, any>): Promise<string> {\r\n const tool = this.tools.find(t => t.name === toolName);\r\n if (!tool?.handler) {\r\n return `Error: Tool ${tool ? 'has no handler' : 'not found'}: ${toolName}`;\r\n }\r\n\r\n try {\r\n console.log(`[McpMiddleware] Executing tool: ${toolName}`, args);\r\n const result = await tool.handler(args);\r\n let resultStr = typeof result === 'string' ? result : JSON.stringify(result);\r\n\r\n if (resultStr.length > this.maxResultLength) {\r\n const original = resultStr.length;\r\n resultStr = resultStr.slice(0, this.maxResultLength) +\r\n `\\n\\n[... Truncated from ${original} to ${this.maxResultLength} chars]`;\r\n console.log(`[McpMiddleware] Tool result truncated from ${original} to ${this.maxResultLength} chars`);\r\n }\r\n\r\n console.log(`[McpMiddleware] Tool result:`, resultStr.slice(0, 200));\r\n return resultStr;\r\n } catch (error: any) {\r\n console.error(`[McpMiddleware] Error executing tool:`, error);\r\n return `Error: ${error.message || String(error)}`;\r\n }\r\n }\r\n\r\n private generateId(prefix: string): string {\r\n return `${prefix}_${Date.now()}_${Math.random().toString(36).slice(2, 9)}`;\r\n }\r\n\r\n private ensureIds(input: RunAgentInput): void {\r\n const anyInput = input as any;\r\n if (!anyInput.threadId) anyInput.threadId = this.generateId('mcp_thread');\r\n if (!anyInput.runId) anyInput.runId = this.generateId('mcp_run');\r\n }\r\n\r\n /** Process tool call events and update state */\r\n private handleToolCallEvent(event: BaseEvent, state: RunState): void {\r\n const { toolCallArgsBuffer, toolCallNames, pendingMcpCalls } = state;\r\n\r\n // Accumulate text content for reconstruction\r\n if (event.type === EventType.TEXT_MESSAGE_CHUNK) {\r\n const e = event as any;\r\n if (e.delta) {\r\n state.textContent = (state.textContent || '') + e.delta;\r\n }\r\n }\r\n\r\n if (event.type === EventType.TOOL_CALL_START) {\r\n const e = event as any;\r\n if (e.toolCallId && e.toolCallName) {\r\n toolCallNames.set(e.toolCallId, e.toolCallName);\r\n if (this.isMcpTool(e.toolCallName)) {\r\n pendingMcpCalls.add(e.toolCallId);\r\n }\r\n console.log(`[McpMiddleware] TOOL_CALL_START: ${e.toolCallName} (id: ${e.toolCallId}, isMCP: ${this.isMcpTool(e.toolCallName)})`);\r\n }\r\n }\r\n\r\n if (event.type === EventType.TOOL_CALL_ARGS) {\r\n const e = event as any;\r\n if (e.toolCallId && e.delta) {\r\n const existing = toolCallArgsBuffer.get(e.toolCallId) || '';\r\n toolCallArgsBuffer.set(e.toolCallId, existing + e.delta);\r\n }\r\n }\r\n\r\n if (event.type === EventType.TOOL_CALL_END) {\r\n const e = event as ToolCallEndEvent;\r\n console.log(`[McpMiddleware] TOOL_CALL_END: ${toolCallNames.get(e.toolCallId) ?? 'unknown'} (id: ${e.toolCallId})`);\r\n }\r\n\r\n // Workaround: Extract parallel tool calls from MESSAGES_SNAPSHOT\r\n if (event.type === EventType.MESSAGES_SNAPSHOT) {\r\n const messages = (event as any).messages || [];\r\n if (messages.length > 0) {\r\n const lastMsg = messages[messages.length - 1];\r\n // Update text content from snapshot if available (often more reliable)\r\n if (lastMsg.role === 'assistant' && lastMsg.content) {\r\n state.textContent = lastMsg.content;\r\n }\r\n\r\n // Discover tools\r\n for (let i = messages.length - 1; i >= 0; i--) {\r\n const msg = messages[i];\r\n const tools = Array.isArray(msg.toolCalls) ? msg.toolCalls :\r\n (Array.isArray(msg.tool_calls) ? msg.tool_calls : []);\r\n\r\n if (msg.role === 'assistant' && tools.length > 0) {\r\n for (const tc of tools) {\r\n if (tc.id && tc.function?.name && !toolCallNames.has(tc.id)) {\r\n toolCallNames.set(tc.id, tc.function.name);\r\n toolCallArgsBuffer.set(tc.id, tc.function.arguments || '{}');\r\n if (this.isMcpTool(tc.function.name)) {\r\n pendingMcpCalls.add(tc.id);\r\n console.log(`[McpMiddleware] MESSAGES_SNAPSHOT: Discovered ${tc.function.name} (id: ${tc.id})`);\r\n }\r\n }\r\n }\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n /** Execute pending MCP tools and return results */\r\n private async executeTools(state: RunState): Promise<ToolResult[]> {\r\n const { toolCallArgsBuffer, toolCallNames, pendingMcpCalls } = state;\r\n const results: ToolResult[] = [];\r\n\r\n const promises = [...pendingMcpCalls].map(async (toolCallId) => {\r\n const toolName = toolCallNames.get(toolCallId);\r\n if (!toolName) return;\r\n\r\n const args = this.parseArgs(toolCallArgsBuffer.get(toolCallId) || '{}');\r\n console.log(`[McpMiddleware] Executing pending tool: ${toolName}`);\r\n\r\n const result = await this.executeTool(toolName, args);\r\n results.push({\r\n toolCallId,\r\n toolName,\r\n result,\r\n messageId: this.generateId('mcp_result'),\r\n });\r\n pendingMcpCalls.delete(toolCallId);\r\n });\r\n\r\n await Promise.all(promises);\r\n return results;\r\n }\r\n\r\n /** Emit tool results (without RUN_FINISHED - that's emitted when truly done) */\r\n private emitToolResults(observer: Subscriber<BaseEvent>, results: ToolResult[]): void {\r\n for (const { toolCallId, toolName, result, messageId } of results) {\r\n observer.next({\r\n type: EventType.TOOL_CALL_RESULT,\r\n toolCallId,\r\n messageId,\r\n content: result,\r\n role: 'tool',\r\n timestamp: Date.now(),\r\n } as any);\r\n console.log(`[McpMiddleware] Emitting TOOL_CALL_RESULT for: ${toolName}`);\r\n }\r\n }\r\n\r\n run(input: RunAgentInput, next: AbstractAgent): Observable<BaseEvent> {\r\n return new Observable<BaseEvent>((observer: Subscriber<BaseEvent>) => {\r\n const state: RunState = {\r\n toolCallArgsBuffer: new Map(),\r\n toolCallNames: new Map(),\r\n pendingMcpCalls: new Set(),\r\n textContent: '',\r\n error: false,\r\n };\r\n\r\n this.ensureIds(input);\r\n const anyInput = input as any;\r\n\r\n console.log(`[McpMiddleware] === NEW RUN ===`);\r\n console.log(`[McpMiddleware] threadId: ${anyInput.threadId}, runId: ${anyInput.runId}`);\r\n console.log(`[McpMiddleware] messages: ${input.messages?.length ?? 0}, tools: ${this.tools?.length ?? 0}`);\r\n\r\n // Inject MCP tools\r\n if (this.toolSchemas?.length) {\r\n input.tools = [...(input.tools || []), ...this.toolSchemas];\r\n console.log(`[McpMiddleware] Injected ${this.toolSchemas.length} tools:`, this.toolSchemas.map((t: Tool) => t.name));\r\n }\r\n\r\n const handleRunFinished = async () => {\r\n if (state.error) return; // Don't continue after error\r\n\r\n if (state.pendingMcpCalls.size === 0) {\r\n observer.next({\r\n type: EventType.RUN_FINISHED,\r\n threadId: anyInput.threadId,\r\n runId: anyInput.runId,\r\n timestamp: Date.now(),\r\n } as any);\r\n observer.complete();\r\n return;\r\n }\r\n\r\n console.log(`[McpMiddleware] RUN_FINISHED with ${state.pendingMcpCalls.size} pending calls`);\r\n\r\n // Reconstruct the Assistant Message that triggered these tools\r\n const toolCalls = [];\r\n for (const toolCallId of state.pendingMcpCalls) {\r\n const name = state.toolCallNames.get(toolCallId);\r\n const args = state.toolCallArgsBuffer.get(toolCallId) || '{}';\r\n if (name) {\r\n toolCalls.push({\r\n id: toolCallId,\r\n type: 'function',\r\n function: { name, arguments: args }\r\n });\r\n }\r\n }\r\n\r\n // Add the Assistant Message to history FIRST\r\n if (toolCalls.length > 0 || state.textContent) {\r\n const assistantMsg = {\r\n id: this.generateId('msg_ast'),\r\n role: 'assistant',\r\n content: state.textContent || null, // Ensure null if empty string for strict LLMs\r\n tool_calls: toolCalls.length > 0 ? toolCalls : undefined\r\n };\r\n input.messages.push(assistantMsg as any);\r\n console.log(`[McpMiddleware] Added assistant message to history before tools: ${state.textContent?.slice(0, 50)}... [${toolCalls.length} tools]`);\r\n }\r\n\r\n // Execute tools and emit results (no RUN_FINISHED yet - continuation follows)\r\n const results = await this.executeTools(state);\r\n this.emitToolResults(observer, results);\r\n\r\n // Prepare continuation\r\n console.log(`[McpMiddleware] Triggering continuation with ${results.length} results`);\r\n\r\n // Add tool result messages to history\r\n for (const { toolCallId, result, messageId } of results) {\r\n input.messages.push({\r\n id: messageId,\r\n role: 'tool',\r\n tool_call_id: toolCallId,\r\n content: result,\r\n } as any);\r\n }\r\n\r\n // Reset state for next turn\r\n state.toolCallArgsBuffer.clear();\r\n state.toolCallNames.clear();\r\n state.textContent = ''; // Clear text content for next turn\r\n\r\n anyInput.runId = this.generateId('mcp_run');\r\n console.log(`[McpMiddleware] === CONTINUATION RUN === messages: ${input.messages.length}`);\r\n\r\n // Subscribe to continuation\r\n next.run(input).subscribe({\r\n next: (event) => {\r\n if (state.error) return;\r\n\r\n this.handleToolCallEvent(event, state);\r\n\r\n if (event.type === EventType.RUN_ERROR) {\r\n console.log(`[McpMiddleware] RUN_ERROR received in continuation`);\r\n state.error = true;\r\n observer.next(event);\r\n observer.complete();\r\n return;\r\n }\r\n\r\n if (event.type === EventType.RUN_STARTED) {\r\n console.log(`[McpMiddleware] Filtering RUN_STARTED from continuation`);\r\n return;\r\n }\r\n\r\n if (event.type === EventType.RUN_FINISHED) {\r\n if (state.pendingMcpCalls.size > 0) {\r\n handleRunFinished();\r\n } else {\r\n observer.next(event);\r\n observer.complete();\r\n }\r\n return;\r\n }\r\n observer.next(event);\r\n },\r\n error: (err) => {\r\n state.error = true;\r\n observer.error(err);\r\n },\r\n complete: () => {\r\n if (!state.error && state.pendingMcpCalls.size === 0) observer.complete();\r\n },\r\n });\r\n };\r\n\r\n const subscription = next.run(input).subscribe({\r\n next: (event) => {\r\n if (state.error) return;\r\n\r\n this.handleToolCallEvent(event, state);\r\n\r\n if (event.type === EventType.RUN_ERROR) {\r\n console.log(`[McpMiddleware] RUN_ERROR received`);\r\n state.error = true;\r\n observer.next(event);\r\n observer.complete();\r\n return;\r\n }\r\n\r\n if (event.type === EventType.RUN_FINISHED) {\r\n handleRunFinished();\r\n return;\r\n }\r\n observer.next(event);\r\n },\r\n error: (err) => {\r\n state.error = true;\r\n observer.error(err);\r\n },\r\n complete: () => {\r\n if (!state.error && state.pendingMcpCalls.size === 0) observer.complete();\r\n },\r\n });\r\n\r\n return () => subscription.unsubscribe();\r\n });\r\n }\r\n}\r\n\r\n/**\r\n * Factory function to create MCP middleware.\r\n */\r\nexport function createMcpMiddleware(\r\n options: { tools: AguiTool[]; maxResultLength?: number }\r\n) {\r\n const middleware = new McpMiddleware(options);\r\n return (input: RunAgentInput, next: AbstractAgent): Observable<BaseEvent> => {\r\n return middleware.run(input, next);\r\n };\r\n}\r\n\r\n// Legacy exports\r\nexport { McpMiddleware as McpToolExecutorMiddleware };\r\nexport { createMcpMiddleware as createMcpToolMiddleware };\r\n\r\n// Re-exports\r\nexport { Middleware, EventType };\r\nexport type { RunAgentInput, BaseEvent, AbstractAgent, ToolCallEndEvent, Tool };\r\n"]}
@@ -1,7 +1,7 @@
1
1
  import { M as McpConnectionEvent, d as McpObservabilityEvent } from '../events-BP6WyRNh.mjs';
2
2
  export { D as Disposable, a as DisposableStore, E as Emitter, b as Event, c as McpConnectionState } from '../events-BP6WyRNh.mjs';
3
- import { s as SessionListResult, e as ConnectParams, h as ConnectResult, j as DisconnectResult, n as ListToolsRpcResult, r as RestoreSessionResult, k as FinishAuthResult, L as ListPromptsResult, l as ListResourcesResult } from '../types-SbDlA2VX.mjs';
4
- export { p as McpRpcRequest, q as McpRpcResponse, T as ToolInfo } from '../types-SbDlA2VX.mjs';
3
+ import { s as SessionListResult, e as ConnectParams, h as ConnectResult, j as DisconnectResult, n as ListToolsRpcResult, r as RestoreSessionResult, k as FinishAuthResult, L as ListPromptsResult, l as ListResourcesResult } from '../types-CLccx9wW.mjs';
4
+ export { p as McpRpcRequest, q as McpRpcResponse, T as ToolInfo } from '../types-CLccx9wW.mjs';
5
5
  import '@modelcontextprotocol/sdk/types.js';
6
6
 
7
7
  /**
@@ -1,7 +1,7 @@
1
1
  import { M as McpConnectionEvent, d as McpObservabilityEvent } from '../events-BP6WyRNh.js';
2
2
  export { D as Disposable, a as DisposableStore, E as Emitter, b as Event, c as McpConnectionState } from '../events-BP6WyRNh.js';
3
- import { s as SessionListResult, e as ConnectParams, h as ConnectResult, j as DisconnectResult, n as ListToolsRpcResult, r as RestoreSessionResult, k as FinishAuthResult, L as ListPromptsResult, l as ListResourcesResult } from '../types-SbDlA2VX.js';
4
- export { p as McpRpcRequest, q as McpRpcResponse, T as ToolInfo } from '../types-SbDlA2VX.js';
3
+ import { s as SessionListResult, e as ConnectParams, h as ConnectResult, j as DisconnectResult, n as ListToolsRpcResult, r as RestoreSessionResult, k as FinishAuthResult, L as ListPromptsResult, l as ListResourcesResult } from '../types-CLccx9wW.js';
4
+ export { p as McpRpcRequest, q as McpRpcResponse, T as ToolInfo } from '../types-CLccx9wW.js';
5
5
  import '@modelcontextprotocol/sdk/types.js';
6
6
 
7
7
  /**
@@ -1,7 +1,7 @@
1
1
  import { c as McpConnectionState, M as McpConnectionEvent } from '../events-BP6WyRNh.mjs';
2
2
  export { D as Disposable, a as DisposableStore, E as Emitter, b as Event, d as McpObservabilityEvent } from '../events-BP6WyRNh.mjs';
3
- import { T as ToolInfo, k as FinishAuthResult, n as ListToolsRpcResult, L as ListPromptsResult, l as ListResourcesResult } from '../types-SbDlA2VX.mjs';
4
- export { p as McpRpcRequest, q as McpRpcResponse } from '../types-SbDlA2VX.mjs';
3
+ import { T as ToolInfo, k as FinishAuthResult, n as ListToolsRpcResult, L as ListPromptsResult, l as ListResourcesResult } from '../types-CLccx9wW.mjs';
4
+ export { p as McpRpcRequest, q as McpRpcResponse } from '../types-CLccx9wW.mjs';
5
5
  export { SSEClient, SSEClientOptions } from './index.mjs';
6
6
  import '@modelcontextprotocol/sdk/types.js';
7
7
 
@@ -1,7 +1,7 @@
1
1
  import { c as McpConnectionState, M as McpConnectionEvent } from '../events-BP6WyRNh.js';
2
2
  export { D as Disposable, a as DisposableStore, E as Emitter, b as Event, d as McpObservabilityEvent } from '../events-BP6WyRNh.js';
3
- import { T as ToolInfo, k as FinishAuthResult, n as ListToolsRpcResult, L as ListPromptsResult, l as ListResourcesResult } from '../types-SbDlA2VX.js';
4
- export { p as McpRpcRequest, q as McpRpcResponse } from '../types-SbDlA2VX.js';
3
+ import { T as ToolInfo, k as FinishAuthResult, n as ListToolsRpcResult, L as ListPromptsResult, l as ListResourcesResult } from '../types-CLccx9wW.js';
4
+ export { p as McpRpcRequest, q as McpRpcResponse } from '../types-CLccx9wW.js';
5
5
  export { SSEClient, SSEClientOptions } from './index.js';
6
6
  import '@modelcontextprotocol/sdk/types.js';
7
7
 
@@ -1,7 +1,7 @@
1
1
  import { c as McpConnectionState, M as McpConnectionEvent } from '../events-BP6WyRNh.mjs';
2
2
  export { D as Disposable, a as DisposableStore, E as Emitter, b as Event, d as McpObservabilityEvent } from '../events-BP6WyRNh.mjs';
3
- import { T as ToolInfo, k as FinishAuthResult, n as ListToolsRpcResult, L as ListPromptsResult, l as ListResourcesResult } from '../types-SbDlA2VX.mjs';
4
- export { p as McpRpcRequest, q as McpRpcResponse } from '../types-SbDlA2VX.mjs';
3
+ import { T as ToolInfo, k as FinishAuthResult, n as ListToolsRpcResult, L as ListPromptsResult, l as ListResourcesResult } from '../types-CLccx9wW.mjs';
4
+ export { p as McpRpcRequest, q as McpRpcResponse } from '../types-CLccx9wW.mjs';
5
5
  export { SSEClient, SSEClientOptions } from './index.mjs';
6
6
  import '@modelcontextprotocol/sdk/types.js';
7
7
 
@@ -1,7 +1,7 @@
1
1
  import { c as McpConnectionState, M as McpConnectionEvent } from '../events-BP6WyRNh.js';
2
2
  export { D as Disposable, a as DisposableStore, E as Emitter, b as Event, d as McpObservabilityEvent } from '../events-BP6WyRNh.js';
3
- import { T as ToolInfo, k as FinishAuthResult, n as ListToolsRpcResult, L as ListPromptsResult, l as ListResourcesResult } from '../types-SbDlA2VX.js';
4
- export { p as McpRpcRequest, q as McpRpcResponse } from '../types-SbDlA2VX.js';
3
+ import { T as ToolInfo, k as FinishAuthResult, n as ListToolsRpcResult, L as ListPromptsResult, l as ListResourcesResult } from '../types-CLccx9wW.js';
4
+ export { p as McpRpcRequest, q as McpRpcResponse } from '../types-CLccx9wW.js';
5
5
  export { SSEClient, SSEClientOptions } from './index.js';
6
6
  import '@modelcontextprotocol/sdk/types.js';
7
7
 
package/dist/index.d.mts CHANGED
@@ -2,7 +2,7 @@ export { M as MCPClient, a as MultiSessionClient, S as StorageOAuthClientProvide
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-0qmYrqoa.mjs';
3
3
  export { ClientMetadata, NextMcpHandlerOptions, SSEConnectionManager, SSEHandlerOptions, StorageBackend, createNextMcpHandler, createSSEHandler, storage } from './server/index.mjs';
4
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-BP6WyRNh.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 ListPromptsResult, l as ListResourcesResult, m as ListToolsResponse, n as ListToolsRpcResult, M as McpRpcMethod, o as McpRpcParams, p as McpRpcRequest, q as McpRpcResponse, R as ReadResourceParams, r as RestoreSessionResult, S as SessionInfo, s as SessionListResult, t as SessionParams, T as ToolInfo, u as TransportType, v as isCallToolSuccess, w as isConnectAuthRequired, x as isConnectError, y as isConnectSuccess, z as isListToolsSuccess } from './types-SbDlA2VX.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 ListPromptsResult, l as ListResourcesResult, m as ListToolsResponse, n as ListToolsRpcResult, M as McpRpcMethod, o as McpRpcParams, p as McpRpcRequest, q as McpRpcResponse, R as ReadResourceParams, r as RestoreSessionResult, S as SessionInfo, s as SessionListResult, t as SessionParams, T as ToolInfo, u as TransportType, v as isCallToolSuccess, w as isConnectAuthRequired, x as isConnectError, y as isConnectSuccess, z as isListToolsSuccess } from './types-CLccx9wW.mjs';
6
6
  export { OAuthClientInformation, OAuthClientInformationFull, OAuthClientMetadata, OAuthTokens } from '@modelcontextprotocol/sdk/shared/auth.js';
7
7
  export { CallToolResult, ListToolsResult, Tool } from '@modelcontextprotocol/sdk/types.js';
8
8
  export { SSEClient, SSEClientOptions } from './client/index.mjs';
package/dist/index.d.ts CHANGED
@@ -2,7 +2,7 @@ export { M as MCPClient, a as MultiSessionClient, S as StorageOAuthClientProvide
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-0qmYrqoa.js';
3
3
  export { ClientMetadata, NextMcpHandlerOptions, SSEConnectionManager, SSEHandlerOptions, StorageBackend, createNextMcpHandler, createSSEHandler, storage } from './server/index.js';
4
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-BP6WyRNh.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 ListPromptsResult, l as ListResourcesResult, m as ListToolsResponse, n as ListToolsRpcResult, M as McpRpcMethod, o as McpRpcParams, p as McpRpcRequest, q as McpRpcResponse, R as ReadResourceParams, r as RestoreSessionResult, S as SessionInfo, s as SessionListResult, t as SessionParams, T as ToolInfo, u as TransportType, v as isCallToolSuccess, w as isConnectAuthRequired, x as isConnectError, y as isConnectSuccess, z as isListToolsSuccess } from './types-SbDlA2VX.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 ListPromptsResult, l as ListResourcesResult, m as ListToolsResponse, n as ListToolsRpcResult, M as McpRpcMethod, o as McpRpcParams, p as McpRpcRequest, q as McpRpcResponse, R as ReadResourceParams, r as RestoreSessionResult, S as SessionInfo, s as SessionListResult, t as SessionParams, T as ToolInfo, u as TransportType, v as isCallToolSuccess, w as isConnectAuthRequired, x as isConnectError, y as isConnectSuccess, z as isListToolsSuccess } from './types-CLccx9wW.js';
6
6
  export { OAuthClientInformation, OAuthClientInformationFull, OAuthClientMetadata, OAuthTokens } from '@modelcontextprotocol/sdk/shared/auth.js';
7
7
  export { CallToolResult, ListToolsResult, Tool } from '@modelcontextprotocol/sdk/types.js';
8
8
  export { SSEClient, SSEClientOptions } from './client/index.js';
package/dist/index.js CHANGED
@@ -2025,7 +2025,8 @@ var SSEConnectionManager = class {
2025
2025
  * Connect to an MCP server
2026
2026
  */
2027
2027
  async connect(params) {
2028
- const { serverId, serverName, serverUrl, callbackUrl, transportType } = params;
2028
+ const { serverName, serverUrl, callbackUrl, transportType } = params;
2029
+ const serverId = params.serverId || await storage.generateSessionId();
2029
2030
  const existingSessions = await storage.getIdentitySessionsData(this.identity);
2030
2031
  const duplicate = existingSessions.find(
2031
2032
  (s) => s.serverId === serverId || s.serverUrl === serverUrl