使用说明

项目简介

MCP-Nest 是一个基于 NestJS 框架开发的模块,旨在帮助开发者轻松构建符合 Model Context Protocol (MCP) 规范的服务器。它专注于通过 Server-Sent Events (SSE) 协议提供工具服务,使得大型语言模型 (LLM) 客户端能够发现并调用后端服务提供的各种工具。

主要功能点

  • SSE 传输支持: 内置 '/sse' 端点用于建立 SSE 连接,'/messages' 端点用于处理工具执行请求。
  • 工具自动发现与注册: 通过装饰器 '@Tool' 简化工具的定义和注册流程。
  • 工具请求参数验证: 支持使用 Zod 库定义工具请求参数的 Schema,确保请求数据的有效性。
  • 工具执行进度通知: 允许工具在执行过程中向客户端发送进度更新,提升用户体验。
  • 基于 NestJS 模块化设计: 易于集成到现有的 NestJS 应用中,利用 NestJS 的依赖注入和模块化特性。

安装步骤

  1. 确保已安装 Node.js 和 npm。
  2. 在你的 NestJS 项目中,使用 npm 安装 '@rekog/mcp-nest' 模块以及其依赖:
    npm install @rekog/mcp-nest reflect-metadata @modelcontextprotocol/sdk zod

服务器配置

MCP 服务器是为 MCP 客户端提供服务的后端应用。以下是 MCP 客户端连接 MCP-Nest 服务器时所需的配置信息示例 (JSON 格式):

{
  "serverName": "my-mcp-server",  // MCP 服务器名称,与 McpModule.forRoot 中配置的 name 一致
  "command": "node",             // 启动 MCP 服务器的命令,通常为 node 或 npm start
  "args": ["main.js"],            // 启动命令的参数,例如入口文件 main.js
  "serverUrl": "http://localhost:3000/sse" // MCP 服务器的 SSE 连接地址,默认为 http://localhost:3000/sse,可根据实际部署情况修改
}

配置参数说明:

  • 'serverName': MCP 服务器的名称,在 'McpModule.forRoot' 中配置的 'name' 属性值。
  • 'command': 用于启动 MCP 服务器的命令行指令,例如 'node' 或 'npm start'。
  • 'args': 启动命令的参数,指定服务器入口文件或启动脚本。
  • 'serverUrl': MCP 服务器提供的 SSE 连接端点 URL,客户端通过此 URL 与服务器建立连接。端口号和路径需与服务器实际监听的地址一致。

基本使用方法

  1. 导入 'McpModule': 在你的 NestJS 模块 (例如 'app.module.ts') 中导入 'McpModule' 并通过 'forRoot' 静态方法进行配置,配置服务器名称、版本和 capabilities 等信息,并声明需要注册为工具的 Provider。
    import { Module } from '@nestjs/common';
    import { McpModule } from '@rekog/mcp-nest';
    import { GreetingTool } from './greeting.tool';
    
    @Module({
      imports: [
        McpModule.forRoot({
          name: 'my-mcp-server',
          version: '1.0.0',
          capabilities: {}
        })
      ],
      providers: [GreetingTool]
    })
    export class AppModule {}
  2. 定义工具: 创建工具类,并使用 '@Tool' 装饰器标记需要暴露为 MCP 工具的方法。在装饰器中指定工具的名称、描述和参数 Schema (使用 Zod 定义)。
    import { Injectable } from '@nestjs/common';
    import { Tool } from '@rekog/mcp-nest';
    import { z } from 'zod';
    import { Context } from '@rekog/mcp-nest/dist/services/mcp-tools.discovery';
    
    @Injectable()
    export class GreetingTool {
      @Tool({
        name: 'hello-world',
        description: '返回问候语的示例工具',
        parameters: z.object({
          name: z.string().default('World'),
        }),
      })
      async sayHello({ name }, context: Context) {
        const greeting = 'Hello, ${name}!';
        return {
          content: [{ type: 'text', text: greeting }]
        };
      }
    }
  3. 启动服务器: 在 'main.ts' 中使用 'NestFactory.create' 创建 NestJS 应用实例,并调用 'listen' 方法启动服务器。
    import { NestFactory } from '@nestjs/core';
    import { AppModule } from './app.module';
    
    async function bootstrap() {
      const app = await NestFactory.create(AppModule);
      await app.listen(3000);
    }
    bootstrap();
  4. 客户端连接和调用: 使用 MCP 客户端 SDK (例如 '@modelcontextprotocol/sdk') 连接到服务器的 '/sse' 端点,并调用已注册的工具。参考 README 中的客户端连接示例代码。

通过以上步骤,你就可以使用 MCP-Nest 快速搭建一个功能完善的 MCP 服务器,并提供可供 LLM 客户端调用的工具服务。

信息

分类

开发者工具