关于 NestJS MCP Server - Model Context Protocol Example
NestJS 项目示例,展示如何以微服务架构实现 MCP 服务和客户端,适合研究 NestJS 与 MCP 的集成。服务端提供当前时间信息,后端通过 LangChain.js 调用 MCP 工具处理查询。
主要功能
- 01NestJS 微服务架构示例
- 02提供当前时间工具
- 03后端集成 LangChain.js
- 04支持连接多个 MCP 服务
适用场景
- 01构建以 MCP 工具回答时间查询的后端
- 02研究 NestJS 项目中的 MCP 客户端与服务端集成
MCP 相关
项目包含提供当前时间工具的 MCP 服务,以及使用 MCP 客户端 SDK 连接它的后端。后端可连接多个 MCP 服务,并将其工具提供给 LLM。
配置
远程服务无需本地安装。选择你使用的客户端,复制配置或使用一键安装。
http://localhost:3000/sseclaude mcp add --transport http nestjs-mcp-server-langchainjs-demo http://localhost:3000/sse{"mcpServers":{"nestjs-mcp-server-langchainjs-demo":{"type":"http","url":"http://localhost:3000/sse"}}}在 Cursor 中打开{"servers":{"nestjs-mcp-server-langchainjs-demo":{"type":"http","url":"http://localhost:3000/sse"}}}在 VS Code 中打开{"mcpServers":{"nestjs-mcp-server-langchainjs-demo":{"type":"http","url":"http://localhost:3000/sse"}}}{"mcpServers":{"nestjs-mcp-server-langchainjs-demo":{"serverUrl":"http://localhost:3000/sse"}}}命令在终端中运行;JSON 粘贴到对应客户端的 MCP 配置后重启。需要授权的服务会在首次连接时提示登录。
工具
详细介绍
NestJS MCP 服务 - Model Context Protocol 示例
作者:@LiusDev
本仓库展示了一个基于微服务架构的 Model Context Protocol(MCP)NestJS 实现。它由两个主要服务组成:
- mcp-server:提供用于获取大模型当前时间上下文的函数
- mcp-backend:一个使用 LangChain.js,并集成 MCP 客户端 SDK 以连接 MCP 服务的客户端
开始使用
前提条件
- Node.js(v20 或更高版本)
- npm
安装
- 克隆仓库
- 安装依赖:
npm install
- 将
.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
- 新建一个指向
http://localhost:3001的 POST 请求 - 将 Content-Type 请求头设为
application/json - 在请求体中选择“raw”和“JSON”,然后输入:
{ "message": "What time is it in Viet Nam?" } - 发送请求
响应将包含越南当前时间,该时间通过 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 文件。
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。