genkitx-mcp
Version:
A Genkit plugin that provides interoperability between Genkit and Model Context Protocol (MCP). Both client and server use cases are supported.
1 lines • 5.08 kB
Source Map (JSON)
{"version":3,"sources":["../src/index.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 { StdioServerParameters } from '@modelcontextprotocol/sdk/client/stdio.js' with { 'resolution-mode': 'import' };\nimport type { Transport } from '@modelcontextprotocol/sdk/shared/transport.js' with { 'resolution-mode': 'import' };\nimport { Genkit, GenkitError } from 'genkit';\nimport { genkitPlugin } from 'genkit/plugin';\nimport { registerAllPrompts } from './client/prompts.js';\nimport { registerResourceTools } from './client/resources.js';\nimport { registerAllTools } from './client/tools.js';\nimport { GenkitMcpServer } from './server.js';\n\nexport interface McpClientOptions {\n /** Provide a name for this client which will be its namespace for all tools and prompts. */\n name: string;\n /** Provide a version number for this client (defaults to 1.0.0). */\n version?: string;\n /** If you already have an MCP transport you'd like to use, pass it here to connect to the server. */\n transport?: Transport;\n /** Start a local server process using the stdio MCP transport. */\n serverProcess?: StdioServerParameters;\n /** Connect to a remote server process using the SSE MCP transport. */\n serverUrl?: string;\n /** Return tool responses in raw MCP form instead of processing them for Genkit compatibility. */\n rawToolResponses?: boolean;\n}\n\nasync function transportFrom(params: McpClientOptions): Promise<Transport> {\n if (params.transport) return params.transport;\n if (params.serverUrl) {\n const { SSEClientTransport } = await import(\n '@modelcontextprotocol/sdk/client/sse.js'\n );\n return new SSEClientTransport(URL.parse(params.serverUrl)!);\n }\n if (params.serverProcess) {\n const { StdioClientTransport } = await import(\n '@modelcontextprotocol/sdk/client/stdio.js'\n );\n return new StdioClientTransport(params.serverProcess);\n }\n throw new GenkitError({\n status: 'INVALID_ARGUMENT',\n message:\n 'Unable to create a server connection with supplied options. Must provide transport, stdio, or sseUrl.',\n });\n}\n\nexport function mcpClient(params: McpClientOptions) {\n return genkitPlugin(params.name, async (ai: Genkit) => {\n const { Client } = await import(\n '@modelcontextprotocol/sdk/client/index.js'\n );\n\n const transport = await transportFrom(params);\n ai.options.model;\n const client = new Client(\n { name: params.name, version: params.version || '1.0.0' },\n { capabilities: {} }\n );\n await client.connect(transport);\n const capabilties = await client.getServerCapabilities();\n const promises: Promise<any>[] = [];\n if (capabilties?.tools) promises.push(registerAllTools(ai, client, params));\n if (capabilties?.prompts)\n promises.push(registerAllPrompts(ai, client, params));\n if (capabilties?.resources)\n promises.push(registerResourceTools(ai, client, params));\n await Promise.all(promises);\n });\n}\n\nexport interface McpServerOptions {\n /** The name you want to give your server for MCP inspection. */\n name: string;\n /** The version you want the server to advertise to clients. Defaults to 1.0.0. */\n version?: string;\n}\n\nexport function mcpServer(ai: Genkit, options: McpServerOptions) {\n return new GenkitMcpServer(ai, options);\n}\n"],"mappings":";;;AAkBA,SAAiB,mBAAmB;AACpC,SAAS,oBAAoB;AAC7B,SAAS,0BAA0B;AACnC,SAAS,6BAA6B;AACtC,SAAS,wBAAwB;AACjC,SAAS,uBAAuB;AAiBhC,SAAe,cAAc,QAA8C;AAAA;AACzE,QAAI,OAAO,UAAW,QAAO,OAAO;AACpC,QAAI,OAAO,WAAW;AACpB,YAAM,EAAE,mBAAmB,IAAI,MAAM,OACnC,yCACF;AACA,aAAO,IAAI,mBAAmB,IAAI,MAAM,OAAO,SAAS,CAAE;AAAA,IAC5D;AACA,QAAI,OAAO,eAAe;AACxB,YAAM,EAAE,qBAAqB,IAAI,MAAM,OACrC,2CACF;AACA,aAAO,IAAI,qBAAqB,OAAO,aAAa;AAAA,IACtD;AACA,UAAM,IAAI,YAAY;AAAA,MACpB,QAAQ;AAAA,MACR,SACE;AAAA,IACJ,CAAC;AAAA,EACH;AAAA;AAEO,SAAS,UAAU,QAA0B;AAClD,SAAO,aAAa,OAAO,MAAM,CAAO,OAAe;AACrD,UAAM,EAAE,OAAO,IAAI,MAAM,OACvB,2CACF;AAEA,UAAM,YAAY,MAAM,cAAc,MAAM;AAC5C,OAAG,QAAQ;AACX,UAAM,SAAS,IAAI;AAAA,MACjB,EAAE,MAAM,OAAO,MAAM,SAAS,OAAO,WAAW,QAAQ;AAAA,MACxD,EAAE,cAAc,CAAC,EAAE;AAAA,IACrB;AACA,UAAM,OAAO,QAAQ,SAAS;AAC9B,UAAM,cAAc,MAAM,OAAO,sBAAsB;AACvD,UAAM,WAA2B,CAAC;AAClC,QAAI,2CAAa,MAAO,UAAS,KAAK,iBAAiB,IAAI,QAAQ,MAAM,CAAC;AAC1E,QAAI,2CAAa;AACf,eAAS,KAAK,mBAAmB,IAAI,QAAQ,MAAM,CAAC;AACtD,QAAI,2CAAa;AACf,eAAS,KAAK,sBAAsB,IAAI,QAAQ,MAAM,CAAC;AACzD,UAAM,QAAQ,IAAI,QAAQ;AAAA,EAC5B,EAAC;AACH;AASO,SAAS,UAAU,IAAY,SAA2B;AAC/D,SAAO,IAAI,gBAAgB,IAAI,OAAO;AACxC;","names":[]}