使用说明
@iludolf/mcp适配器
NestJS模块用于模型上下文协议(MCP)集成。使您的NestJS应用程序能够充当MCP服务器,向AI助手公开工具、资源和提示。
特性
- 🔧 基于装饰器的API -使用
@McpTool,@McpResource,@McpPrompt装饰器 - 🚀 多个传输 -STDIO、SSE、HTTP支持
- 🔄 SSE保持活力 -自动ping以防止连接超时
- 📦 NestJS集成 -完全支持依赖注入
- 🔌 异步配置 -使用
forRootAsync使用ConfigService
安装
npm install @iludolf/mcp-adapter
# or
pnpm add @iludolf/mcp-adapter
# or
yarn add @iludolf/mcp-adapter
对等依赖关系
确保您安装了以下对等依赖项:
npm install @modelcontextprotocol/sdk@^1.10.0 @nestjs/common @nestjs/core reflect-metadata rxjs zod
| 包 | 版本 |
|---|---|
@modelcontextprotocol/sdk |
^1.10.0 |
@nestjs/common |
^10.0.0 || ^11.0.0 |
@nestjs/core |
^10.0.0 || ^11.0.0 |
reflect-metadata |
^0.1.13 || ^0.2.0 |
rxjs |
^7.0.0 |
zod |
^3.0.0 |
快速开始
1.导入模块
import { Module } from "@nestjs/common"
import { McpModule, TransportType } from "@iludolf/mcp-adapter"
@Module({
imports: [
McpModule.forRoot({
serverInfo: {
name: "my-mcp-server",
version: "1.0.0",
},
transport: TransportType.SSE, // or TransportType.STDIO
}),
],
})
export class AppModule {}
2.创建MCP处理程序
import { Injectable } from "@nestjs/common"
import { McpTool, McpResource, McpPrompt } from "@iludolf/mcp-adapter"
import { z } from "zod"
@Injectable()
export class MyMcpHandlers {
@McpTool({
name: "calculator",
description: "Performs basic arithmetic",
paramsSchema: {
operation: z.enum(["add", "subtract"]),
a: z.number(),
b: z.number(),
},
})
async calculate(args: { operation: string; a: number; b: number }) {
const result = args.operation === "add"
? args.a + args.b
: args.a - args.b
return { content: [{ type: "text", text: String(result) }] }
}
@McpResource({
name: "config",
uri: "config://app",
description: "Application configuration",
})
async getConfig() {
return {
contents: [{
uri: "config://app",
mimeType: "application/json",
text: JSON.stringify({ version: "1.0.0" }),
}],
}
}
@McpPrompt({
name: "greeting",
description: "Generate a greeting",
arguments: [{ name: "name", required: true }],
})
async generateGreeting(params: { arguments: { name: string } }) {
return {
messages: [{
role: "assistant",
content: { type: "text", text: `Hello, ${params.arguments.name}!` },
}],
}
}
}
3.注册处理程序提供者
@Module({
imports: [McpModule.forRoot({ /* ... */ })],
providers: [MyMcpHandlers],
})
export class AppModule {}
配置选项
McpModuleOptions
| 选项 | 类型 | 默认值 | 描述 |
|---|---|---|---|
serverInfo |
Implementation |
必需 | 服务器名称和版本 |
serverOptions |
ServerOptions |
- | MCP SDK服务器选项 |
transport |
TransportType |
STDIO |
传输类型(STDIO、SSE、HTTP、无) |
logger |
McpLogger |
DefaultMcpLogger |
自定义记录器 |
basePath |
string |
"mcp" |
HTTP端点的基本路径 |
global |
boolean |
false |
全局注册模块 |
异步配置
McpModule.forRootAsync({
imports: [ConfigModule],
useFactory: (config: ConfigService) => ({
serverInfo: {
name: config.get("MCP_NAME"),
version: config.get("MCP_VERSION"),
},
transport: TransportType.SSE,
}),
inject: [ConfigService],
})
HTTP端点(SSE/HTTP传输)
使用SSE或HTTP传输时,以下端点可用:
| 端点 | 方法 | 描述 |
|---|---|---|
/{basePath}/sse |
GET | SSE连接端点 |
/{basePath}/messages |
POST | 消息处理端点 |
/{basePath}/health |
GET | 健康检查端点 |
SSE保持活力
SSE连接每30秒自动发送一次保持活动ping,以防止超时错误(Body Timeout Error).这是透明处理的,不需要配置。
自定义记录器
import { McpLogger } from "@iludolf/mcp-adapter"
class MyLogger implements McpLogger {
info(message: string, context?: string) { /* ... */ }
warn(message: string, context?: string) { /* ... */ }
error(message: string, context?: string, trace?: string) { /* ... */ }
debug(message: string, context?: string) { /* ... */ }
}
McpModule.forRoot({
serverInfo: { name: "my-server", version: "1.0.0" },
logger: new MyLogger(),
})
兼容性
- MCP-SDK:使用新
registerTool,registerPrompt,registerResourceAPI(SDK 1.10.0+) - NestJS:与v10和v11兼容
- Node.js:需要Node.js 18+
许可证
麻省理工学院
