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.

55 lines 2.18 kB
import { GenkitError } from "genkit"; import { genkitPlugin } from "genkit/plugin"; import { registerAllPrompts } from "./client/prompts.js"; import { registerResourceTools } from "./client/resources.js"; import { registerAllTools } from "./client/tools.js"; import { GenkitMcpServer } from "./server.js"; async function transportFrom(params) { if (params.transport) return params.transport; if (params.serverUrl) { const { SSEClientTransport } = await import("@modelcontextprotocol/sdk/client/sse.js"); return new SSEClientTransport(new URL(params.serverUrl)); } if (params.serverProcess) { const { StdioClientTransport } = await import("@modelcontextprotocol/sdk/client/stdio.js"); return new StdioClientTransport(params.serverProcess); } if (params.serverWebsocketUrl) { const { WebSocketClientTransport } = await import("@modelcontextprotocol/sdk/client/websocket.js"); let url = params.serverWebsocketUrl; if (typeof url === "string") url = new URL(url); return new WebSocketClientTransport(url); } throw new GenkitError({ status: "INVALID_ARGUMENT", message: "Unable to create a server connection with supplied options. Must provide transport, stdio, or sseUrl." }); } function mcpClient(params) { return genkitPlugin(params.name, async (ai) => { const { Client } = await import("@modelcontextprotocol/sdk/client/index.js"); const transport = await transportFrom(params); ai.options.model; const client = new Client( { name: params.name, version: params.version || "1.0.0" }, { capabilities: {} } ); await client.connect(transport); const capabilties = await client.getServerCapabilities(); const promises = []; if (capabilties?.tools) promises.push(registerAllTools(ai, client, params)); if (capabilties?.prompts) promises.push(registerAllPrompts(ai, client, params)); if (capabilties?.resources) promises.push(registerResourceTools(ai, client, params)); await Promise.all(promises); }); } function mcpServer(ai, options) { return new GenkitMcpServer(ai, options); } export { mcpClient, mcpServer }; //# sourceMappingURL=index.mjs.map