Firebase Genkit 集成工具

@firebase/genkit
0 Stars 67 次浏览 firebase 更新于 2026-08-23

提供了 [Genkit](https://github.com/firebase/genkit) 与模型上下文协议(MCP)之间的集成。

该服务暂未提供标准配置,请参考 README 手动接入

可用工具 (6 个)

该服务在 MCP 协议中暴露的工具,AI 可按需调用

echo 1 个参数 需填 1 项

Echoes back the input

必填参数:message

add 2 个参数 需填 2 项

Adds two numbers

必填参数:a、b

printEnv

Prints all environment variables, helpful for debugging MCP server configuration

该工具无需必填参数,直接调用即可

longRunningOperation 2 个参数

Demonstrates a long running operation with progress updates

该工具无需必填参数,直接调用即可

sampleLLM 2 个参数 需填 1 项

Samples from an LLM using MCP's sampling feature

必填参数:prompt

getTinyImage

Returns the MCP_TINY_IMAGE

该工具无需必填参数,直接调用即可

服务介绍

Genkit MCP

[!WARNING]
该插件为实验性插件,意味着它可能不会长期得到支持,并且其 API 可能会频繁发生重大变更。

此插件提供了 Genkit 与 模型上下文协议 (MCP) 之间的集成。MCP 是一个开放标准,允许开发者构建“服务器”,这些服务器可以向客户端提供工具、资源和提示。Genkit MCP 允许 Genkit 开发者既作为客户端使用 MCP 工具、提示和资源,也能够作为服务器提供工具和提示。

安装

要开始使用,您需要安装 Genkit 和 MCP 插件:

npm i genkit genkitx-mcp

MCP 客户端

要创建一个 MCP 客户端,您可以调用 mcpClient 函数来为 MCP 服务器生成一个 Genkit 插件。例如,要使用 MCP 的示例 文件系统服务器

import { genkit } from 'genkit';
import { mcpClient } from 'genkitx-mcp';

// the filesystem server requires one or more allowed directories
const ALLOWED_DIRS = ['/Users/yourusername/Desktop'];

const filesystemClient = mcpClient({
  name: 'filesystem',
  serverProcess: {
    command: 'npx',
    args: ['-y', '@modelcontextprotocol/server-everything', ...ALLOWED_DIRS],
  },
});

const ai = genkit({
  plugins: [
    filesystemClient /* ... other plugins such as model providers ...*/,
  ],
});

大多数 MCP 服务器设计为在同一台机器上作为子进程运行,使用 stdio 传输方式。当您提供 serverProcess 选项时,您正在指定用于启动服务器作为子进程的命令、参数和环境变量。

mcpClient() 选项

  • name: (必需)此客户端的名称,它将为其工具和提示命名空间。
  • version: (可选)客户端的版本号。默认为 "1.0.0"。
  • 您必须提供以下之一:
    • serverProcess: 使用 stdio MCP 传输方式启动本地服务器进程的参数。
      • command: 启动 MCP 服务器的 shell 命令路径。可以是例如 npxuvx 来从包管理器下载并运行服务器。
      • args: (可选)传递给命令的字符串参数数组。
      • env: (可选)传递给命令的环境变量键值对对象。
    • serverUrl: 使用 SSE MCP 传输方式连接到远程服务器的 URL。
    • serverWebsocketUrl: 使用 WebSocket MCP 传输方式连接到远程服务器的 URL。
    • transport: 用于连接到服务器的现有 MCP 传输对象。
  • rawToolResponses: (可选)布尔标志。如果为 true,则工具响应将以原始 MCP 格式返回;否则,它们将被处理以兼容 Genkit。

使用 MCP 动作

Genkit MCP 客户端会自动发现可用的工具和提示,并将其注册到 Genkit 中,使它们可以在其他工具和提示可以使用的地方使用。要访问资源,会注册特殊的 list_resourcesread_resource 工具,这些工具将访问服务器的资源。

所有 MCP 动作都位于您提供的名称下,因此名为 filesystem 的客户端将注册诸如 filesystem/read_file 等工具。

工具响应

MCP 工具返回一个 content 数组,而不是像大多数 Genkit 工具那样的结构化响应。Genkit MCP 插件尝试解析并转换返回的内容:

  1. 如果内容是文本且为有效的 JSON,那么将解析并返回该 JSON。
  2. 如果内容是文本但不是有效的 JSON,那么将返回该文本。
  3. 如果内容只有一个非文本部分,那么将返回该部分。
  4. 如果内容有多个或混合部分,那么将返回完整的内容响应。

MCP 服务器

您还可以将 Genkit 实例中的所有工具和提示作为 MCP 服务器暴露出来:

import { genkit, z } from 'genkit';
import { mcpServer } from 'genkitx-mcp';

const ai = genkit({});

ai.defineTool(
  {
    name: 'add',
    description: 'add two numbers together',
    inputSchema: z.object({ a: z.number(), b: z.number() }),
    outputSchema: z.number(),
  },
  async ({ a, b }) => {
    return a + b;
  }
);

ai.definePrompt(
  {
    name: 'happy',
    description: 'everybody together now',
    input: {
      schema: z.object({ action: z.string().optional() }),
      default: { action: 'clap your hands' },
    },
  },
  `If you're happy and you know it, {{action}}.`
);

mcpServer(ai, { name: 'example_server', version: '0.0.1' }).start();

上述代码将启动一个使用 stdio 传输方式的 MCP 服务器,并暴露一个名为 add 的工具和一个名为 happy 的提示。要使用不同的传输方式启动服务器,请使用 mcpServer(...).start(otherTransport)

已知限制

  • MCP 提示只能接受字符串参数,因此输入到模式中的数据必须是仅包含字符串属性值的对象。
  • MCP 提示只支持 usermodel 消息。不支持 system 消息。
  • MCP 提示在一条消息中只支持单一“类型”,因此不能在同一消息中混用媒体和文本。

测试您的 MCP 服务器

您可以使用官方检查器来测试您的 MCP 服务器。例如,如果您的服务器代码编译成 dist/index.js,您可以运行:

npx @modelcontextprotocol/inspector dist/index.js

一旦启动了检查器,您可以列出提示和操作,并手动进行测试。