使用说明
MCP 服务器(基于 NestJS)
英语 | 中文
一个基于 NestJS 的服务器,实现了模型上下文协议(MCP)。它提供了用于 MCP 元数据、JSON-RPC 工具调用、提示、资源以及 Swagger 文档的端点。
概述
- MCP 元数据:
/.well-known/mcp.json - JSON-RPC 工具:
POST /rpc - 提示:
/prompts - 资源:
/resources - Swagger UI:
/docs
特点/功能
- 自动注册来自(指定来源/路径的)工具
src/tools通过扫描*.tool.ts/*.tool.js。- 对象样式:默认导出符合
ToolDefinition(与name,handler等 - 类风格:导出一个类,使用
execute(params)。 - 工具命名优先级(类风格):静态
toolName> 类name> 文件名基础。
- 对象样式:默认导出符合
- 统一的返回类型
Promise<unknown>; 处理器的结果被封装在Promise.resolve(...)。 - 全球
ValidationPipe以及用于输入验证和类型安全的数据传输对象(DTO)。 - Swagger 自动生成文档,便于快速检查和测试。
快速入门
pnpm install
pnpm run start:dev
然后访问:
- Swagger:http://localhost:3000/docs
- MCP 元数据:http://localhost:3000/.well-known/mcp.json
- JSON-RPC: POST http://localhost:3000/rpc
JSON-RPC 示例
示例:调用添加工具(工具名称可能为 add-numbers 或者类静态(成员) toolName):
curl -X POST http://localhost:3000/rpc \
-H 'Content-Type: application/json' \
-d '{
"jsonrpc": "2.0",
"method": "add-numbers",
"params": { "a": 1, "b": 2 },
"id": 1
}'
如果你为类设置了一个静态名称:
export class AddNumbersTool {
static toolName = 'add number';
execute(params: { a: number; b: number }) {
return params.a + params.b;
}
}
然后使用“添加数字”方法进行调用。
添加一个工具
创建一个 *.tool.ts 在……下面 src/tools 使用任意一种风格:
- 对象样式:
export default {
name: 'echo',
handler: (params: unknown) => Promise.resolve(params),
};
- 班级风格:
export class WeatherTool {
static toolName = 'weather';
execute(params: { city: string }) {
return { city: params.city, temperature: 26, condition: 'Sunny' };
}
}
工具会自动注册,并且可以通过(某种方式)进行调用 /rpc。
结构(关键部分)
src/main.ts应用程序引导(或启动)、全局管道、Swaggersrc/app.module.ts模块布线src/tools/工具目录(自动注册)src/rpc/JSON-RPC 控制器 & 数据传输对象 (DTO)src/mcp/MCP元数据控制器src/prompts/,src/resources/提示与资源API
笔记
- 全球性的
AuthGuard被设定为APP_GUARD如果您需要身份验证/授权,请进行相应调整。 - 确保工具名称唯一,以避免注册表覆盖。
许可证
麻省理工学院(MIT)
