{"version":3,"sources":["../src/agent/mcp/client.ts","../src/agent/mcp/server.ts"],"names":["z"],"mappings":"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","file":"chunk-ECTRFW2A.mjs","sourcesContent":["/**\n * MCP Client Adapter\n *\n * Consume any MCP server as agent tools.\n * Google ADK / OpenAI / Vercel / Claude pattern.\n */\n\nimport { z } from 'zod';\nimport type { Tool, ToolContext } from '../core/types';\n\nexport interface MCPServerConfig {\n  /** MCP server URL or transport */\n  url: string;\n  /** Server name */\n  name: string;\n  /** Authentication headers */\n  headers?: Record<string, string>;\n  /** Tool filter (only expose these tools) */\n  toolFilter?: string[];\n  /** Timeout for tool calls */\n  timeoutMs?: number;\n}\n\nexport interface MCPToolDefinition {\n  name: string;\n  description: string;\n  inputSchema: Record<string, unknown>;\n}\n\n/**\n * MCP Client that discovers and wraps MCP server tools as EADK tools.\n */\nexport class MCPClient {\n  private config: MCPServerConfig;\n  private tools: Map<string, MCPToolDefinition> = new Map();\n\n  constructor(config: MCPServerConfig) {\n    this.config = config;\n  }\n\n  /**\n   * Discover available tools from the MCP server.\n   */\n  async discover(): Promise<MCPToolDefinition[]> {\n    try {\n      const response = await fetch(`${this.config.url}/tools/list`, {\n        method: 'POST',\n        headers: {\n          'Content-Type': 'application/json',\n          ...(this.config.headers ?? {}),\n        },\n        body: JSON.stringify({ jsonrpc: '2.0', method: 'tools/list', id: 1 }),\n      });\n\n      if (!response.ok) return [];\n\n      const data = (await response.json()) as {\n        result?: { tools?: MCPToolDefinition[] };\n      };\n      const serverTools = data.result?.tools ?? [];\n\n      // Filter if configured\n      const filtered = this.config.toolFilter\n        ? serverTools.filter((t) => this.config.toolFilter!.includes(t.name))\n        : serverTools;\n\n      for (const tool of filtered) {\n        this.tools.set(tool.name, tool);\n      }\n\n      return filtered;\n    } catch {\n      return [];\n    }\n  }\n\n  /**\n   * Get EADK tools from discovered MCP tools.\n   */\n  getTools(): Tool[] {\n    return [...this.tools.values()].map((mcpTool) => this.wrapMCPTool(mcpTool));\n  }\n\n  /**\n   * Call a specific MCP tool.\n   */\n  async callTool(name: string, args: unknown): Promise<unknown> {\n    const response = await fetch(`${this.config.url}/tools/call`, {\n      method: 'POST',\n      headers: {\n        'Content-Type': 'application/json',\n        ...(this.config.headers ?? {}),\n      },\n      body: JSON.stringify({\n        jsonrpc: '2.0',\n        method: 'tools/call',\n        params: { name, arguments: args },\n        id: Date.now(),\n      }),\n    });\n\n    if (!response.ok) {\n      throw new Error(`MCP tool call failed: ${response.status}`);\n    }\n\n    const data = (await response.json()) as {\n      result?: { content?: Array<{ text?: string }> };\n    };\n    return data.result?.content?.[0]?.text ?? data.result;\n  }\n\n  private wrapMCPTool(mcpTool: MCPToolDefinition): Tool {\n    return {\n      name: `${this.config.name}__${mcpTool.name}`,\n      description: mcpTool.description,\n      inputSchema: z.any(),\n      execute: async (input: unknown, _ctx: ToolContext) => {\n        return this.callTool(mcpTool.name, input);\n      },\n      computeTarget: 'cloud',\n    };\n  }\n}\n","/**\n * MCP Server Adapter\n *\n * Expose EADK agents and tools as an MCP server.\n * Google ADK pattern — makes agents consumable by any MCP client.\n */\n\nimport { z } from 'zod';\nimport type { EADKAgent, Tool } from '../core/types';\nimport { zodToJsonSchema } from '../core/tool';\n\nexport interface MCPServerOptions {\n  /** Server name */\n  name: string;\n  /** Server description */\n  description?: string;\n  /** Agents to expose as tools */\n  agents?: EADKAgent[];\n  /** Additional tools to expose */\n  tools?: Tool[];\n}\n\nexport interface MCPRequest {\n  jsonrpc: '2.0';\n  method: string;\n  params?: unknown;\n  id?: string | number;\n}\n\nexport interface MCPResponse {\n  jsonrpc: '2.0';\n  result?: unknown;\n  error?: { code: number; message: string };\n  id?: string | number;\n}\n\n/**\n * MCP Server that exposes EADK agents and tools.\n */\nexport class MCPServer {\n  private options: MCPServerOptions;\n  private tools: Map<string, Tool> = new Map();\n\n  constructor(options: MCPServerOptions) {\n    this.options = options;\n\n    // Register agent tools\n    if (options.agents) {\n      for (const agent of options.agents) {\n        const agentTool: Tool = {\n          name: `agent_${agent.config.name}`,\n          description:\n            agent.config.description ?? `Run the ${agent.config.name} agent`,\n          inputSchema: z.object({\n            input: z.string(),\n          }),\n          execute: async (input: unknown) => {\n            const typedInput = input as { input: string };\n            const result = await agent.run(typedInput.input);\n            return result.output;\n          },\n        } as Tool;\n        this.tools.set(agentTool.name, agentTool);\n      }\n    }\n\n    // Register additional tools\n    if (options.tools) {\n      for (const tool of options.tools) {\n        this.tools.set(tool.name, tool);\n      }\n    }\n  }\n\n  /**\n   * Handle an MCP JSON-RPC request.\n   */\n  async handleRequest(request: MCPRequest): Promise<MCPResponse> {\n    switch (request.method) {\n      case 'initialize':\n        return {\n          jsonrpc: '2.0',\n          result: {\n            protocolVersion: '2024-11-05',\n            capabilities: { tools: {} },\n            serverInfo: {\n              name: this.options.name,\n              version: '0.1.0',\n            },\n          },\n          id: request.id,\n        };\n\n      case 'tools/list':\n        return {\n          jsonrpc: '2.0',\n          result: {\n            tools: [...this.tools.values()].map((tool) => ({\n              name: tool.name,\n              description: tool.description,\n              inputSchema: zodToJsonSchema(tool.inputSchema),\n            })),\n          },\n          id: request.id,\n        };\n\n      case 'tools/call': {\n        const params = request.params as {\n          name: string;\n          arguments?: unknown;\n        };\n        const tool = this.tools.get(params.name);\n\n        if (!tool) {\n          return {\n            jsonrpc: '2.0',\n            error: { code: -32601, message: `Unknown tool: ${params.name}` },\n            id: request.id,\n          };\n        }\n\n        try {\n          const result = await tool.execute(params.arguments, {} as any);\n          return {\n            jsonrpc: '2.0',\n            result: {\n              content: [\n                {\n                  type: 'text',\n                  text:\n                    typeof result === 'string'\n                      ? result\n                      : JSON.stringify(result),\n                },\n              ],\n            },\n            id: request.id,\n          };\n        } catch (err) {\n          return {\n            jsonrpc: '2.0',\n            error: {\n              code: -32000,\n              message: err instanceof Error ? err.message : String(err),\n            },\n            id: request.id,\n          };\n        }\n      }\n\n      default:\n        return {\n          jsonrpc: '2.0',\n          error: {\n            code: -32601,\n            message: `Method not found: ${request.method}`,\n          },\n          id: request.id,\n        };\n    }\n  }\n}\n"]}