返回市场
nestjs-mcp服务器-langchainjs演示

nestjs-mcp服务器-langchainjs演示

作者:LiusDev10 星标更新:2025-04-10

项目介绍

NestJS MCP Server - 模型上下文协议示例

作者:@LiusDev

此仓库演示了一个基于NestJS实现的模型上下文协议(MCP)微服务架构。它由两个主要服务组成:

  1. mcp-server:提供获取LLM当前时间上下文的功能。
  2. mcp-backend:一个客户端,使用LangChain.js并集成MCP客户端SDK连接到MCP服务器。

开始使用

预备条件

  • Node.js(v22或更高)
  • npm

安装

  1. 克隆仓库
  2. 安装依赖:
npm install
  1. .env.example重命名为.env并添加你的OpenAI API密钥:
cp .env.example .env

然后编辑.env文件以包含你的OpenAI API密钥:

OPENAI_API_KEY=your_openai_api_key_here
OPENAI_API_URL=https://api.openai.com/v1
PORT=3001

运行服务

为了实现完整功能,你需要运行两个服务:

启动MCP服务器

npm run start:dev mcp-server

这将在默认端口3000启动MCP服务器。

启动MCP后端

npm run start:dev mcp-backend

这将在默认端口3001启动MCP后端。

使用示例

一旦两个服务都在运行,你可以通过发送POST请求到MCP后端来测试其功能:

示例请求

http://localhost:3001发送一个POST请求,附带以下JSON正文:

{
  "message": "越南现在几点?"
}

使用cURL

curl -X POST http://localhost:3001 -H "Content-Type: application/json" -d "{\"message\": \"越南现在几点?\"}"

使用Postman

  1. 创建一个新的POST请求到http://localhost:3001
  2. 设置Content-Type头为application/json
  3. 在请求正文中选择“原始”和“JSON”,然后输入:
    {
      "message": "越南现在几点?"
    }
    
  4. 发送请求

响应将包含通过MCP服务器的时间上下文函数检索到的越南当前时间。

连接到多个MCP服务器

后端可以同时连接到多个MCP服务器。要添加额外的服务器,请修改apps/mcp-backend/src/mcp-backend.module.ts中的McpClientModule.register配置:

McpClientModule.register({
  throwOnLoadError: true,
  prefixToolNameWithServerName: false,  // 设置为true以在工具名称前加上服务器名称
  additionalToolNamePrefix: '',
  mcpServers: {
    myServer: {
      transport: 'sse',
      url: 'http://localhost:3000/sse',
      useNodeEventSource: true,
      reconnect: {
        enabled: true,
        maxAttempts: 5,
        delayMs: 2000,
      },
    },
    // 在这里添加额外的服务器
    anotherServer: {
      transport: 'sse',
      url: 'http://localhost:4000/sse',  // 另一个服务器的不同端口
      useNodeEventSource: true,
      reconnect: {
        enabled: true,
        maxAttempts: 5,
        delayMs: 2000,
      },
    },
  },
}),

当连接到多个服务器时:

  • 考虑设置prefixToolNameWithServerName: true以避免工具名称冲突
  • 确保每个服务器在mcpServers对象中具有唯一的键
  • 确保每个服务器运行在不同的端口上

MCP客户端将自动从所有配置的服务器中获取工具,并使其对LLM可用。

架构

  • mcp-server:通过模型上下文协议暴露工具,包括获取当前时间的功能。
  • mcp-backend:连接到MCP服务器,检索可用工具,并使用LangChain.js处理用户查询。

使用的技术

  • NestJS
  • LangChain.js
  • 模型上下文协议(MCP)
  • @langchain/mcp-adapters:用于LangChain.js的MCP客户端适配器
  • @rekog/mcp-nest:用于NestJS的MCP服务器实现

项目结构

mcp-server/
├── apps/
│   ├── mcp-server/       # MCP服务器实现
│   └── mcp-backend/      # MCP客户端实现
├── dist/                 # 编译输出
├── node_modules/
├── .env                  # 环境变量
└── package.json

许可证

本项目根据UNLICENSED许可证发布 - 查看LICENSE文件以获取详情。