{"version":3,"sources":["../../src/client/tools.ts"],"sourcesContent":["/**\n * Copyright 2024 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport type { Client } from '@modelcontextprotocol/sdk/client/index.js' with { 'resolution-mode': 'import' };\nimport type {\n  CallToolResult,\n  Tool,\n} from '@modelcontextprotocol/sdk/types.js' with { 'resolution-mode': 'import' };\nimport { Genkit, JSONSchema7, z } from 'genkit';\nimport { logger } from 'genkit/logging';\nimport type { McpClientOptions } from '../index.js';\n\nconst toText = (c: CallToolResult['content']) =>\n  c.map((p) => p.text || '').join('');\n\nfunction processResult(result: CallToolResult) {\n  if (result.isError) return { error: toText(result.content) };\n  if (result.content.every((c) => !!c.text)) {\n    const text = toText(result.content);\n    if (text.trim().startsWith('{') || text.trim().startsWith('[')) {\n      try {\n        return JSON.parse(text);\n      } catch (e) {\n        return text;\n      }\n    }\n    return text;\n  }\n  if (result.content.length === 1) return result.content[0];\n  return result;\n}\n\nfunction registerTool(\n  ai: Genkit,\n  client: Client,\n  tool: Tool,\n  params: McpClientOptions\n) {\n  logger.debug(\n    `[@genkit-ai/mcp] Registering MCP tool ${params.name}/${tool.name}`\n  );\n  ai.defineTool(\n    {\n      name: `${params.name}/${tool.name}`,\n      description: tool.description || '',\n      inputJsonSchema: tool.inputSchema as JSONSchema7,\n      outputSchema: z.any(),\n    },\n    async (args) => {\n      logger.debug(\n        `[@genkit-ai/mcp] Calling MCP tool ${params.name}/${tool.name} with arguments`,\n        JSON.stringify(args)\n      );\n      const result = await client.callTool({\n        name: tool.name,\n        arguments: args,\n      });\n      logger.debug(\n        `MCP tool ${tool.name} result:`,\n        JSON.stringify(result, null, 2)\n      );\n      if (params.rawToolResponses) return result;\n      return processResult(result as CallToolResult);\n    }\n  );\n}\n\n/**\n * Lookup all tools available in the server and register each as a Genkit tool.\n */\nexport async function registerAllTools(\n  ai: Genkit,\n  client: Client,\n  params: McpClientOptions\n): Promise<void> {\n  let cursor: string | undefined;\n  while (true) {\n    const { nextCursor, tools } = await client.listTools({ cursor });\n    tools.forEach((t) => registerTool(ai, client, t, params));\n    cursor = nextCursor;\n    if (!cursor) break;\n  }\n}\n"],"mappings":"AAqBA,SAA8B,SAAS;AACvC,SAAS,cAAc;AAGvB,MAAM,SAAS,CAAC,MACd,EAAE,IAAI,CAAC,MAAM,EAAE,QAAQ,EAAE,EAAE,KAAK,EAAE;AAEpC,SAAS,cAAc,QAAwB;AAC7C,MAAI,OAAO,QAAS,QAAO,EAAE,OAAO,OAAO,OAAO,OAAO,EAAE;AAC3D,MAAI,OAAO,QAAQ,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,IAAI,GAAG;AACzC,UAAM,OAAO,OAAO,OAAO,OAAO;AAClC,QAAI,KAAK,KAAK,EAAE,WAAW,GAAG,KAAK,KAAK,KAAK,EAAE,WAAW,GAAG,GAAG;AAC9D,UAAI;AACF,eAAO,KAAK,MAAM,IAAI;AAAA,MACxB,SAAS,GAAG;AACV,eAAO;AAAA,MACT;AAAA,IACF;AACA,WAAO;AAAA,EACT;AACA,MAAI,OAAO,QAAQ,WAAW,EAAG,QAAO,OAAO,QAAQ,CAAC;AACxD,SAAO;AACT;AAEA,SAAS,aACP,IACA,QACA,MACA,QACA;AACA,SAAO;AAAA,IACL,yCAAyC,OAAO,IAAI,IAAI,KAAK,IAAI;AAAA,EACnE;AACA,KAAG;AAAA,IACD;AAAA,MACE,MAAM,GAAG,OAAO,IAAI,IAAI,KAAK,IAAI;AAAA,MACjC,aAAa,KAAK,eAAe;AAAA,MACjC,iBAAiB,KAAK;AAAA,MACtB,cAAc,EAAE,IAAI;AAAA,IACtB;AAAA,IACA,OAAO,SAAS;AACd,aAAO;AAAA,QACL,qCAAqC,OAAO,IAAI,IAAI,KAAK,IAAI;AAAA,QAC7D,KAAK,UAAU,IAAI;AAAA,MACrB;AACA,YAAM,SAAS,MAAM,OAAO,SAAS;AAAA,QACnC,MAAM,KAAK;AAAA,QACX,WAAW;AAAA,MACb,CAAC;AACD,aAAO;AAAA,QACL,YAAY,KAAK,IAAI;AAAA,QACrB,KAAK,UAAU,QAAQ,MAAM,CAAC;AAAA,MAChC;AACA,UAAI,OAAO,iBAAkB,QAAO;AACpC,aAAO,cAAc,MAAwB;AAAA,IAC/C;AAAA,EACF;AACF;AAKA,eAAsB,iBACpB,IACA,QACA,QACe;AACf,MAAI;AACJ,SAAO,MAAM;AACX,UAAM,EAAE,YAAY,MAAM,IAAI,MAAM,OAAO,UAAU,EAAE,OAAO,CAAC;AAC/D,UAAM,QAAQ,CAAC,MAAM,aAAa,IAAI,QAAQ,GAAG,MAAM,CAAC;AACxD,aAAS;AACT,QAAI,CAAC,OAAQ;AAAA,EACf;AACF;","names":[]}