UNPKG

@agenite/mcp

Version:
1 lines 9.59 kB
{"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"]}