mcpField
N
NestJS MCP Server - Model Context Protocol Example

NestJS MCP Server - Model Context Protocol Example

远程服务
github.com/LiusDev开发工具1181 周前更新
代码仓库

关于 NestJS MCP Server - Model Context Protocol Example

NestJS 项目示例,展示如何以微服务架构实现 MCP 服务和客户端,适合研究 NestJS 与 MCP 的集成。服务端提供当前时间信息,后端通过 LangChain.js 调用 MCP 工具处理查询。

主要功能

  1. 01NestJS 微服务架构示例
  2. 02提供当前时间工具
  3. 03后端集成 LangChain.js
  4. 04支持连接多个 MCP 服务

适用场景

  1. 01构建以 MCP 工具回答时间查询的后端
  2. 02研究 NestJS 项目中的 MCP 客户端与服务端集成

MCP 相关

项目包含提供当前时间工具的 MCP 服务,以及使用 MCP 客户端 SDK 连接它的后端。后端可连接多个 MCP 服务,并将其工具提供给 LLM。

配置

远程服务无需本地安装。选择你使用的客户端,复制配置或使用一键安装。

服务地址http://localhost:3000/sse
一键复制安装命令
Claude CodeTerminal
Cursor.cursor/mcp.json
VS Code.vscode/mcp.json
Claude Desktopclaude_desktop_config.json
Windsurf~/.codeium/windsurf/mcp_config.json

命令在终端中运行;JSON 粘贴到对应客户端的 MCP 配置后重启。需要授权的服务会在首次连接时提示登录。

工具

详细介绍

NestJS MCP 服务 - Model Context Protocol 示例

作者:@LiusDev

本仓库展示了一个基于微服务架构的 Model Context Protocol(MCP)NestJS 实现。它由两个主要服务组成:

  1. mcp-server:提供用于获取大模型当前时间上下文的函数
  2. mcp-backend:一个使用 LangChain.js,并集成 MCP 客户端 SDK 以连接 MCP 服务的客户端

开始使用

前提条件
  • Node.js(v20 或更高版本)
  • 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 后端。

使用示例

两个服务都运行后,你可以向 MCP 后端发送 POST 请求来测试功能:

示例请求

向 http://localhost:3001 发送 POST 请求,并附上以下 JSON 请求体:

{
  "message": "What time is it in Viet Nam?"
}
使用 cURL
curl -X POST http://localhost:3001 -H "Content-Type: application/json" -d "{\"message\": \"What time is it in Viet Nam?\"}"
使用 Postman
  1. 新建一个指向 http://localhost:3001 的 POST 请求
  2. 将 Content-Type 请求头设为 application/json
  3. 在请求体中选择“raw”和“JSON”,然后输入:
    {
      "message": "What time is it in Viet Nam?"
    }
    
  4. 发送请求

响应将包含越南当前时间,该时间通过 MCP 服务的时间上下文函数获取。

连接到多个 MCP 服务

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

McpClientModule.register({
  throwOnLoadError: true,
  prefixToolNameWithServerName: false,  // Set to true to prefix tool names with server names
  additionalToolNamePrefix: '',
  mcpServers: {
    myServer: {
      transport: 'sse',
      url: 'http://localhost:3000/sse',
      useNodeEventSource: true,
      reconnect: {
        enabled: true,
        maxAttempts: 5,
        delayMs: 2000,
      },
    },
    // Add additional servers here
    anotherServer: {
      transport: 'sse',
      url: 'http://localhost:4000/sse',  // Different port for another server
      useNodeEventSource: true,
      reconnect: {
        enabled: true,
        maxAttempts: 5,
        delayMs: 2000,
      },
    },
  },
}),

连接到多个服务时:

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

MCP 客户端会自动从所有已配置的服务获取工具,并将它们提供给大模型使用。

架构

  • mcp-server:通过 Model Context Protocol 暴露工具,其中包括一个用于获取当前时间的函数
  • mcp-backend:连接到 MCP 服务,获取可用工具,并使用这些工具和 LangChain.js 处理用户查询

使用的技术

  • NestJS
  • LangChain.js
  • Model Context Protocol(MCP)
  • @langchain/mcp-adapters:用于 LangChain.js 的 MCP 客户端适配器
  • @rekog/mcp-nest:NestJS 的 MCP 服务实现

项目结构

mcp-server/
├── apps/
│   ├── mcp-server/       # MCP server implementation
│   └── mcp-backend/      # MCP client implementation
├── dist/                 # Compiled output
├── node_modules/
├── .env                  # Environment variables
└── package.json

许可证

本项目采用 UNLICENSED 许可证授权,详情请参阅 LICENSE 文件。

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。