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
JavaScript
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