项目简介

'nest-mcp-sse' 是一个 NestJS 的全局动态模块,旨在帮助开发者快速搭建基于 SSE(Server-Sent Events)传输协议的 MCP (Model Context Protocol) 服务器。该模块封装了 MCP 服务器的实例管理和 SSE 传输管理,让开发者可以专注于 MCP 工具 (Tools) 的开发,而无需关注底层的连接处理、生命周期管理和 MCP 服务器实例化等细节。

主要特点:

  • 快速集成: 在 NestJS 应用中轻松集成 MCP 服务器功能。
  • 多实例管理: 支持管理多个 MCP Server 实例,满足不同场景需求。
  • 自动连接管理: 自动处理 SSE 连接的建立和断开,简化开发流程。
  • 原生 SDK: 没有过度封装 MCP Server 原生方法,降低学习成本,方便使用 MCP TS-SDK 的完整功能。

主要功能点

  • 资源 (Resources) 管理: 虽然模块本身不直接提供资源管理界面,但你可以利用 MCP Server 原生 SDK 的能力,在 NestJS 服务中轻松注册和管理各种资源,并通过 MCP 协议提供给 LLM 客户端访问。
  • 工具 (Tools) 注册与执行: 允许你在 NestJS 控制器或服务中注册 MCP 工具,并由 MCP Server 统一管理。LLM 客户端可以通过标准的 MCP 协议调用这些工具,扩展 LLM 的能力。
  • Prompt 模板 (Prompts) 支持: 模块集成了 MCP Server,因此你可以利用 MCP Server 的 Prompt 模板功能,定义和管理 Prompt,实现可定制的 LLM 交互模式。
  • SSE 传输: 使用高效的 SSE 协议进行数据传输,实时推送上下文信息和工具执行结果。
  • JSON-RPC 通信: 底层基于 JSON-RPC 协议与客户端通信,保证了协议的标准化和通用性。

安装步骤

  1. 安装 npm 包: 在你的 NestJS 项目中,使用 npm, yarn 或 pnpm 安装 'nest-mcp-sse' 模块以及其依赖 '@modelcontextprotocol/sdk' 和 'zod'。

    # npm
    npm install nest-mcp-sse @modelcontextprotocol/sdk zod
    
    # yarn
    yarn add nest-mcp-sse @modelcontextprotocol/sdk zod
    
    # pnpm
    pnpm add nest-mcp-sse @modelcontextprotocol/sdk zod
  2. 导入 'McpModule' 模块: 在你的 NestJS 根模块(通常是 'AppModule')中导入 'McpModule',并使用 'forRoot' 静态方法进行配置。

    import { Module } from "@nestjs/common";
    import { McpModule } from "nest-mcp-sse";
    
    @Module({
      imports: [
        McpModule.forRoot({
          controllerBaseUrl: "api/mcp",
          mcpServerConfigs: [
            {
              serverId: "my-mcp-server",
              serverInfo: {
                name: "my-mcp-server",
                version: "1.0.0",
              },
            },
          ],
        }),
      ],
      controllers: [],
      providers: [],
    })
    export class AppModule {}

服务器配置

MCP 客户端需要配置 MCP 服务器的连接信息才能正常工作。以下是一个典型的 MCP 服务器配置示例,你需要将其配置到你的 MCP 客户端应用中。

{
  "servers": [
    {
      "serverName": "my-mcp-server",  // MCP 服务器名称,用于客户端识别
      "command": "http://localhost:3000/api/mcp/my-mcp-server/sse", // SSE 连接端点 URL,指向你的 nest-mcp-sse 服务器的 SSE 接口
      "args": [], // 启动参数,通常为空数组
      "serverInfo": { // 服务器信息,与你在 McpModule 中配置的 serverInfo 一致
        "name": "my-mcp-server",
        "version": "1.0.0"
      }
    }
  ]
}

配置参数说明:

  • 'serverName': 自定义的服务器名称,客户端用此名称引用服务器。
  • 'command': 必须配置。MCP 服务器的 SSE 连接端点 URL。客户端通过此 URL 建立 SSE 连接。请根据你的 'controllerBaseUrl' 和 'serverId' 调整 URL。
  • 'args': 启动参数,对于 SSE 传输通常为空数组 '[]'。
  • 'serverInfo': 服务器的基本信息,例如名称和版本,应与 'McpModule.forRoot' 或 'mcpServerService.registerServer' 中配置的 'serverInfo' 保持一致。

基本使用方法

  1. 启动 NestJS 应用: 运行你的 NestJS 应用,'nest-mcp-sse' 模块会自动创建 MCP 服务器实例并监听 SSE 连接。

  2. 注册 MCP 工具 (Tools): 在你的 NestJS 控制器或服务中,通过 'McpServerService' 获取 MCP Server 实例,并使用 'tool()' 方法注册工具。

    import { Controller, Injectable } from "@nestjs/common";
    import { McpServerService } from "nest-mcp-sse";
    import { z } from "zod";
    
    @Controller()
    export class MyController {
      constructor(private readonly mcpServerService: McpServerService) {
        this.registerMyTool();
      }
    
      private registerMyTool() {
        this.mcpServerService.getServer("my-mcp-server")?.tool(
          "my-tool-name", // 工具名称,客户端通过此名称调用
          { /* 工具参数 Schema (使用 zod 定义) */
            input: z.string().describe("输入参数")
          },
          async ({ input }: { input: string }) => { /* 工具执行函数 */
            return {
              content: [{ type: "text", text: '你输入的是: ${input}' }],
            };
          }
        );
      }
    }
  3. 客户端连接和调用: 在 MCP 客户端应用中,配置上述服务器信息,并使用 MCP 客户端 SDK 连接到 'nest-mcp-sse' 服务器。连接成功后,客户端即可列出并调用你注册的工具,与 LLM 应用进行交互。

通过 'nest-mcp-sse' 模块,你可以专注于 MCP 工具的业务逻辑开发,而无需过多关注 MCP 服务器的底层实现和 NestJS 的集成细节,从而高效地构建强大的 LLM 应用后端。

信息

分类

开发者工具