使用说明
项目简介
MCP-Nest 是一个基于 NestJS 框架开发的模块,旨在帮助开发者轻松构建符合 Model Context Protocol (MCP) 规范的服务器。它专注于通过 Server-Sent Events (SSE) 协议提供工具服务,使得大型语言模型 (LLM) 客户端能够发现并调用后端服务提供的各种工具。
主要功能点
- SSE 传输支持: 内置 '/sse' 端点用于建立 SSE 连接,'/messages' 端点用于处理工具执行请求。
- 工具自动发现与注册: 通过装饰器 '@Tool' 简化工具的定义和注册流程。
- 工具请求参数验证: 支持使用 Zod 库定义工具请求参数的 Schema,确保请求数据的有效性。
- 工具执行进度通知: 允许工具在执行过程中向客户端发送进度更新,提升用户体验。
- 基于 NestJS 模块化设计: 易于集成到现有的 NestJS 应用中,利用 NestJS 的依赖注入和模块化特性。
安装步骤
- 确保已安装 Node.js 和 npm。
- 在你的 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 与服务器建立连接。端口号和路径需与服务器实际监听的地址一致。
基本使用方法
- 导入 '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 {} - 定义工具: 创建工具类,并使用 '@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 }] }; } } - 启动服务器: 在 '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(); - 客户端连接和调用: 使用 MCP 客户端 SDK (例如 '@modelcontextprotocol/sdk') 连接到服务器的 '/sse' 端点,并调用已注册的工具。参考 README 中的客户端连接示例代码。
通过以上步骤,你就可以使用 MCP-Nest 快速搭建一个功能完善的 MCP 服务器,并提供可供 LLM 客户端调用的工具服务。
信息
分类
开发者工具