项目简介
'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 协议与客户端通信,保证了协议的标准化和通用性。
安装步骤
-
安装 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 -
导入 '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' 保持一致。
基本使用方法
-
启动 NestJS 应用: 运行你的 NestJS 应用,'nest-mcp-sse' 模块会自动创建 MCP 服务器实例并监听 SSE 连接。
-
注册 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}' }], }; } ); } } -
客户端连接和调用: 在 MCP 客户端应用中,配置上述服务器信息,并使用 MCP 客户端 SDK 连接到 'nest-mcp-sse' 服务器。连接成功后,客户端即可列出并调用你注册的工具,与 LLM 应用进行交互。
通过 'nest-mcp-sse' 模块,你可以专注于 MCP 工具的业务逻辑开发,而无需过多关注 MCP 服务器的底层实现和 NestJS 的集成细节,从而高效地构建强大的 LLM 应用后端。
信息
分类
开发者工具