项目简介

'@mcp-it/fastify' 是一个 Fastify 框架的插件,旨在帮助开发者快速将现有的或新建的 Fastify API 路由暴露为符合 Model Context Protocol (MCP) 标准的工具。这意味着大型语言模型 (LLM) 客户端,如 Cursor 或 Claude,可以通过 MCP 协议直接发现、理解并调用您的 API 接口,从而赋予 LLM 访问外部数据和执行操作的能力。

主要功能点

  • 自动发现 API 路由: 自动扫描并识别 Fastify 应用中注册的路由。
  • 基于 Schema 生成工具: 利用 Fastify 路由定义的 Schema 信息(通常基于 OpenAPI 标准)自动生成详细的 MCP 工具定义,包括工具名称、描述、输入参数等。
  • 支持多种传输协议: 支持通过 Server-Sent Events (SSE) 和 Streamable HTTP 两种协议与 MCP 客户端通信。
  • 灵活的路由配置: 允许通过路由配置对象自定义每个路由作为 MCP 工具的属性,例如隐藏某个路由不作为工具暴露,或自定义工具的名称和描述。
  • 提供调试端点: 可选地提供一个 HTTP 端点,用于方便地查看插件生成的 MCP 工具列表。

安装步骤

在您的 Node.js 项目中使用 npm, yarn 或 pnpm 安装该插件:

npm install @mcp-it/fastify
# 或者
yarn add @mcp-it/fastify
# 或者
pnpm add @mcp-it/fastify

服务器配置 (供 MCP 客户端连接使用)

MCP 客户端需要知道如何连接到您的 Fastify MCP 服务器。以下是常见的配置方式示例:

对于支持 SSE 的 MCP 客户端 (如 Cursor):

在客户端的 MCP 设置中,添加一个新的 SSE 连接,连接地址填写您的 Fastify 服务器运行地址加上 MCP 挂载路径(默认是 '/mcp')以及 SSE 端点('/sse')。

例如,如果您的 Fastify 服务器运行在 'http://localhost:3000',且使用了默认配置,连接地址通常是: 'http://localhost:3000/mcp/sse'

对于需要通过 StdIO 连接的 MCP 客户端 (如 Claude Desktop):

这类客户端通常需要通过一个命令行工具作为桥梁来连接到 HTTP (如 SSE) 服务器。常用的工具是 'mcp-remote' (需要安装 'mcp-proxy' 包)。您需要在客户端的 MCP 配置文件中指定启动这个命令行工具的命令及其参数。

例如,在 'claude_desktop_config.json' 文件中添加一个服务器配置(具体配置格式请参考客户端文档):

{
  "mcpServers": {
    "my-fastify-api": {
      "command": "npx",
      "args": [
        "mcp-remote",
        "http://localhost:3000/mcp/sse" // 您的 Fastify MCP 服务器的 SSE 地址
      ],
      // "name": "我的 Fastify API 服务器", // 可选:服务器显示名称
      // "description": "通过 MCP 暴露我的 Fastify API 工具" // 可选:服务器描述
    }
  }
}
  • 'server name' ('my-fastify-api'): 客户端内部用于标识该服务器的名称。
  • 'command' ('npx'): 启动桥接工具的命令。
  • 'args' ('["mcp-remote", "..."]'): 传递给命令的参数列表,通常第一个参数是工具名称 ('mcp-remote'),第二个参数是您的 MCP 服务器 SSE 端点的 URL。

基本使用方法

在您的 Fastify 应用中,注册 '@mcp-it/fastify' 插件。之后,您定义的带有 Schema (包含 'operationId', 'summary', 'description', 'params', 'body', 'response' 等) 的路由将会被自动转换为 MCP 工具。

import Fastify from "fastify";
import mcpPlugin from "@mcp-it/fastify";

const fastify = Fastify();

// 注册 MCP 插件,可以配置服务器名称和描述
await fastify.register(mcpPlugin, {
  name: "我的 Fastify 应用",
  description: "一个具备 MCP 工具能力的应用",
  // 更多配置选项请参考插件文档
});

// 定义一个 Fastify 路由,并提供 schema
fastify.get(
  "/users/:id",
  {
    schema: {
      operationId: "getUserById", // 这个将作为 MCP 工具的名称
      summary: "根据 ID 获取用户信息",
      description: "通过用户唯一 ID 获取用户的详细信息。",
      params: { // 定义路径参数 schema
        type: "object",
        required: ["id"],
        properties: {
          id: { type: "number", description: "用户的数字 ID" },
        },
      },
      response: { // 定义响应 schema (通常关注 200/2xx 响应)
        200: {
          description: "成功获取用户信息",
          type: "object",
          properties: {
            id: { type: "number" },
            name: { type: "string" },
            email: { type: "string" },
          },
        },
      },
    },
    // 如果需要,可以在 config.mcp 中覆盖默认工具属性或隐藏该路由
    // config: {
    //   mcp: { name: "fetchUser", description: "获取指定用户数据" }
    // }
  },
  async (request, reply) => {
    // 路由实际处理逻辑,例如从数据库获取用户数据
    const userId = (request.params as any).id;
    // 模拟数据获取
    return { id: userId, name: 'User ${userId}', email: 'user${userId}@example.com' };
  }
);

// 启动 Fastify 服务器
await fastify.listen({ port: 3000 });

console.log("Fastify 应用已启动,监听端口 3000");
console.log("MCP SSE 服务器端点:http://localhost:3000/mcp/sse");

启动 Fastify 服务器后,配置好的 MCP 客户端即可连接并发现名为 'getUserById' 的工具,并能够调用它,向 '/users/:id' 发起 GET 请求,并将响应结果展示给用户或用于 LLM 的下一步推理。

信息

分类

AI与计算