UNPKG

genkitx-mcp

Version:

A Genkit plugin that provides interoperability between Genkit and Model Context Protocol (MCP). Both client and server use cases are supported.

61 lines 1.73 kB
import { z } from "genkit"; import { logger } from "genkit/logging"; const toText = (c) => c.map((p) => p.text || "").join(""); function processResult(result) { if (result.isError) return { error: toText(result.content) }; if (result.content.every((c) => !!c.text)) { const text = toText(result.content); if (text.trim().startsWith("{") || text.trim().startsWith("[")) { try { return JSON.parse(text); } catch (e) { return text; } } return text; } if (result.content.length === 1) return result.content[0]; return result; } function registerTool(ai, client, tool, params) { logger.debug( `[@genkit-ai/mcp] Registering MCP tool ${params.name}/${tool.name}` ); ai.defineTool( { name: `${params.name}/${tool.name}`, description: tool.description || "", inputJsonSchema: tool.inputSchema, outputSchema: z.any() }, async (args) => { logger.debug( `[@genkit-ai/mcp] Calling MCP tool ${params.name}/${tool.name} with arguments`, JSON.stringify(args) ); const result = await client.callTool({ name: tool.name, arguments: args }); logger.debug( `MCP tool ${tool.name} result:`, JSON.stringify(result, null, 2) ); if (params.rawToolResponses) return result; return processResult(result); } ); } async function registerAllTools(ai, client, params) { let cursor; while (true) { const { nextCursor, tools } = await client.listTools({ cursor }); tools.forEach((t) => registerTool(ai, client, t, params)); cursor = nextCursor; if (!cursor) break; } } export { registerAllTools }; //# sourceMappingURL=tools.mjs.map