项目简介

'fastify-mcp-server' 是一个 Fastify 插件,旨在帮助开发者快速构建符合 Model Context Protocol (MCP) 标准的服务器。它利用 Fastify 的高性能特性,提供了流式 HTTP 传输、强大的会话管理、灵活的认证支持以及完善的错误处理等核心功能。通过此插件,您的 Fastify 应用能够作为一个可靠的后端,为各种 AI 助手和客户端提供上下文信息和可调用的功能(工具)。

主要功能点

  • MCP 协议集成: 无缝集成 Model Context Protocol (MCP) 规范,使您的应用能够作为 AI 助手的标准后端。
  • 流式 HTTP 传输: 全面支持 MCP 的流式 HTTP 协议,通过服务器发送事件 (SSE) 实现高效的数据流通信。
  • 自动化会话管理: 提供自动化的会话创建、跟踪和销毁机制,简化 MCP 客户端的连接和管理。
  • 请求智能路由: 根据不同的 MCP 请求类型(如初始化、发送消息、获取流式响应等)进行智能路由和处理。
  • 可选的身份认证: 支持通过 Bearer Token 实现安全认证,保护您的 MCP 端点和数据访问。
  • OAuth 元数据端点: 可自动注册 OAuth 2.0 授权服务器和受保护资源元数据端点,提高与 OAuth 客户端的互操作性和发现能力。

安装步骤

  1. 确保您的开发环境中已安装 Node.js 和 npm (Node Package Manager)。
  2. 在您的 Fastify 项目目录下,使用 npm 安装 'fastify-mcp-server' 及其必需的 MCP SDK:
    npm install fastify-mcp-server @modelcontextprotocol/sdk
  3. 安装完成后,您可以在 Fastify 应用中引入并配置此插件。

服务器配置

当您的 MCP 客户端(例如 VS Code Copilot Chat 或其他兼容 MCP 的 AI 助手)需要连接到由 'fastify-mcp-server' 实现的 MCP 服务器时,它需要知道如何启动或连接到该服务器。以下是您可能需要提供给 MCP 客户端的配置信息示例,这通常是一个 JSON 格式的配置对象,假设您的 MCP 服务器监听在 'http://localhost:3000/mcp':

{
  "name": "my-fastify-mcp-server",
  "description": "我的 Fastify MCP 示例服务器,提供时间查询和认证工具。",
  "command": "node",
  "args": [
    "path/to/your/server.js"
  ],
  "url": "http://localhost:3000/mcp",
  "headers": {
    "Authorization": "Bearer ${input:bearer_token}"
  },
  "capabilities": {
    "tools": ["hello-world", "get-datetime", "example-auth-tool"]
  }
}

参数注释:

  • 'name': 服务器的唯一标识名称,方便客户端识别。
  • 'description': 服务器功能的简短描述,帮助用户了解其用途。
  • 'command': 用于启动服务器的命令行程序,例如如果您使用 Node.js 运行,则为 'node'。
  • 'args': 一个字符串数组,包含传递给 'command' 的参数。通常包括您的服务器入口文件路径(例如 'path/to/your/server.js')。
  • 'url': MCP 服务器的访问地址。这是客户端发起 MCP 请求的 HTTP/HTTPS 端点,通常是 'http://<host>:<port>/mcp'。
  • 'headers': 可选的 HTTP 头对象。例如,如果您启用了 Bearer Token 认证,这里可以配置 'Authorization' 头部,'"${input:bearer_token}"' 是一种常见的占位符,表示客户端在连接时会提示用户输入令牌。
  • 'capabilities': 服务器声明其支持的能力,例如它提供了哪些可供调用的工具 (tools)。这里列出的是您的服务器实际定义的工具名称。

基本使用方法

  1. 创建 Fastify 应用实例: 首先,在您的项目中创建一个 Fastify 应用实例。

    import Fastify from 'fastify';
    const app = Fastify({ logger: true }); // 建议开启 logger 以便调试
  2. 创建 MCP 服务器实例并定义工具: 使用 '@modelcontextprotocol/sdk' 创建一个 MCP 服务器实例,并定义您希望通过 MCP 协议暴露给 AI 助手的工具。

    import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
    
    const mcp = new McpServer({
      name: 'my-mcp-server', // 服务器名称
      version: '1.0.0',       // 服务器版本
    });
    
    // 定义一个简单的工具:'hello-world'
    mcp.tool('hello-world', 'A simple tool that says hello.', () => ({
      content: [{ type: 'text', text: 'Hello from MCP!' }]
    }));
    
    // 定义另一个工具:'get-datetime'
    mcp.tool('get-datetime', 'Get the current date and time.', () => ({
      content: [
        {
          type: 'text',
          text: new Intl.DateTimeFormat('en-US', {
            day: '2-digit', month: 'long', year: 'numeric',
            hour: '2-digit', minute: '2-digit', hour12: false
          }).format(new Date())
        }
      ]
    }));
    
    // 您可以根据需求添加更多工具、资源或 Prompt 模板。
  3. 注册 'fastify-mcp-server' 插件: 将 'fastify-mcp-server' 插件注册到您的 Fastify 应用中,并传入之前创建的 MCP 服务器实例。

    import FastifyMcpServer from 'fastify-mcp-server';
    
    await app.register(FastifyMcpServer, {
      server: mcp.server,         // 您的 MCP 服务器实例
      endpoint: '/mcp',           // 可选:自定义 MCP 端点路径,默认为 '/mcp'
      // authorization: { ... }   // 可选:配置 Bearer Token 认证和 OAuth2 元数据
    });
  4. 启动 Fastify 服务器: 启动您的 Fastify 服务器,使其开始监听 HTTP 请求。

    await app.listen({ host: '127.0.0.1', port: 3000 });
    console.log('Fastify MCP Server Demo listening at http://127.0.0.1:3000/mcp');

    现在,您的 Fastify 应用已经作为一个功能完备的 MCP 服务器运行。MCP 客户端可以通过 'http://127.0.0.1:3000/mcp' 地址与您的服务器进行交互,并调用您定义的工具。

信息

分类

AI与计算