{"version":3,"sources":["../src/mcp.ts"],"names":["Client","SSEClientTransport","StdioClientTransport","Tool"],"mappings":"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","file":"index.cjs","sourcesContent":["import { Client } from '@modelcontextprotocol/sdk/client/index.js';\nimport { StdioClientTransport } from '@modelcontextprotocol/sdk/client/stdio.js';\nimport { SSEClientTransport } from '@modelcontextprotocol/sdk/client/sse.js';\nimport { Tool, JSONSchema } from '@agenite/tool';\nimport { MCPServerConfig, MCPToolCallResult } from './types';\n\ninterface ServerClient {\n  client: Client;\n  connected: boolean;\n  serverConfig: MCPServerConfig;\n}\n\nexport class MCPClient {\n  private clients: Map<string, ServerClient> = new Map();\n  private clientConfig: {\n    name: string;\n    version: string;\n  };\n\n  constructor(\n    private config: {\n      mcpServers: {\n        [name: string]: MCPServerConfig;\n      };\n      name?: string;\n      version?: string;\n    }\n  ) {\n    this.clientConfig = {\n      name: this.config.name || 'mcp-client',\n      version: this.config.version || '1.0.0',\n    };\n    \n    // Initialize clients for each server\n    Object.entries(this.config.mcpServers).forEach(([name, serverConfig]) => {\n      this.clients.set(name, {\n        client: new Client(this.clientConfig),\n        connected: false,\n        serverConfig\n      });\n    });\n  }\n\n  /**\n   * Connect to a specific MCP server\n   * @private\n   */\n  private async connect(serverName: string): Promise<void> {\n    const serverClient = this.clients.get(serverName);\n    if (!serverClient) {\n      throw new Error(`Server ${serverName} not found in configuration`);\n    }\n\n    if (serverClient.connected) return;\n\n    const { serverConfig } = serverClient;\n    let transport;\n\n    if ('url' in serverConfig) {\n      if (!serverConfig.url) {\n        throw new Error('URL is required for SSE transport');\n      }\n\n      transport = new SSEClientTransport(new URL(serverConfig.url));\n    } else if ('command' in serverConfig) {\n      // Default to stdio transport\n      if (!serverConfig.command || !serverConfig.args) {\n        throw new Error('Command and args are required for stdio transport');\n      }\n\n      transport = new StdioClientTransport({\n        command: serverConfig.command,\n        args: serverConfig.args,\n        env: serverConfig.env,\n      });\n    }\n\n    if (!transport) {\n      throw new Error('Transport is required');\n    }\n\n    await serverClient.client.connect(transport);\n    serverClient.connected = true;\n  }\n\n  /**\n   * Connect to all configured MCP servers\n   * @private\n   */\n  private async connectAll(): Promise<void> {\n    const serverNames = Array.from(this.clients.keys());\n    await Promise.all(serverNames.map(name => this.connect(name)));\n  }\n\n  /**\n   * Get available tools from a specific MCP server\n   */\n  public async getTools(serverName: string): Promise<Tool[]> {\n    const serverClient = this.clients.get(serverName);\n    if (!serverClient) {\n      throw new Error(`Server ${serverName} not found in configuration`);\n    }\n\n    if (!serverClient.connected) {\n      await this.connect(serverName);\n    }\n\n    const toolList = await serverClient.client.listTools();\n\n    return toolList.tools.map((toolSchema) => {\n      return new Tool({\n        name: `${serverName}.${toolSchema.name}`,\n        description: toolSchema.description || '',\n        inputSchema: toolSchema.inputSchema as JSONSchema,\n        execute: async ({ input }) => {\n          const result = await this.callTool(\n            serverName,\n            toolSchema.name,\n            input as Record<string, unknown>\n          );\n          return result;\n        },\n      });\n    });\n  }\n\n  /**\n   * Get available tools from all connected MCP servers as a flat array\n   * This is the preferred method for integration with Agent\n   */\n  public async getAllTools(): Promise<Tool[]> {\n    await this.connectAll();\n    const serverNames = Array.from(this.clients.keys());\n    const toolPromises = serverNames.map(name => this.getTools(name));\n    \n    const results = await Promise.all(toolPromises);\n    return results.flat();\n  }\n\n  /**\n   * Get available tools from all connected MCP servers organized by server\n   */\n  public async getAllToolsByServer(): Promise<{[serverName: string]: Tool[]}> {\n    await this.connectAll();\n    const serverNames = Array.from(this.clients.keys());\n    const toolsPromises = serverNames.map(async (name) => {\n      const tools = await this.getTools(name);\n      return [name, tools];\n    });\n    \n    const results = await Promise.all(toolsPromises);\n    return Object.fromEntries(results);\n  }\n\n  /**\n   * Call a tool on a specific MCP server\n   * @private This is internally used by the Tool execute functions\n   */\n  private async callTool(\n    serverName: string,\n    toolName: string,\n    input?: Record<string, unknown>\n  ): Promise<MCPToolCallResult> {\n    const serverClient = this.clients.get(serverName);\n    if (!serverClient) {\n      throw new Error(`Server ${serverName} not found in configuration`);\n    }\n\n    if (!serverClient.connected) {\n      await this.connect(serverName);\n    }\n\n    const result = await serverClient.client.callTool({\n      name: toolName,\n      arguments: input,\n    });\n\n    return {\n      isError: !!result.isError,\n      data: result.content as string,\n    };\n  }\n\n  /**\n   * Get configured server names\n   */\n  public getServerNames(): string[] {\n    return Array.from(this.clients.keys());\n  }\n}\n"]}