项目简介
'@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与计算