mcpField
N
NestJS MCP Server Module

NestJS MCP Server Module

本地服务
github.com/rekog-labs开发工具725今天更新

关于 NestJS MCP Server Module

NestJS MCP Server Module(@rekog/mcp-nest)是一个 NestJS 模块,可将应用中的方法以 MCP 工具、资源和提示词的形式暴露给 AI。它以 NestJS 微服务传输策略运行,适合构建基于依赖注入的企业级 MCP 服务。

主要功能

  1. 01以 CustomTransportStrategy 方式运行 MCP
  2. 02支持 Streamable HTTP 与 STDIO 传输
  3. 03通过 Zod 对工具参数进行校验
  4. 04基于 Guard 的认证与按工具授权
  5. 05支持资源模板与提示词

适用场景

  1. 01将现有 NestJS 业务服务暴露为 MCP 工具
  2. 02为 MCP 服务接入 OAuth 或外部授权服务器
  3. 03在 NestJS 应用中以依赖注入组织 MCP 组件

MCP 相关

该模块用于构建 MCP 服务,将 @Tool、资源和提示词通过 Streamable HTTP 或 STDIO 提供给 MCP 客户端。

配置

本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。

暂未收录安装方式

我们还没有获取到这个服务的安装包或远程地址,请按项目 README 中的说明安装。

代码仓库

工具

还没有获取到工具列表

本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。

详细介绍

NestJS MCP 服务模块

README 配图

CI Code Coverage NPM Version NPM Downloads NPM License

一个 NestJS 模块,可让你使用 Model Context Protocol (MCP),轻松地从 NestJS 应用中为 AI 提供工具、资源和提示词。

借助 @rekog/mcp-nest,你可以用熟悉的 NestJS 方式定义工具、资源和提示词,并充分利用依赖注入的全部能力,在现有代码库的基础上构建复杂、适用于企业的 MCP 服务。

功能

  • 🧩 NestJS 微服务策略:MCP 以 CustomTransportStrategy 的形式运行,因此工具/资源/提示词都是真正的 @MessagePattern 处理程序——守卫、管道、拦截器和异常过滤器均可原生应用于这些处理程序
  • 🚀 多传输支持:Streamable HTTP 和 STDIO——通过 transports 数组进行选择
  • 🕰️ 双时代协议支持:一个端点可并行服务于 2025 时代的协议(initialize + 会话)和无状态的 2026-07-28 修订版——无需更改工具代码
  • 🔧 工具:将 NestJS 方法作为 MCP 工具公开,并支持自动发现和 Zod 验证
    • 🛠️ 引导:通过引导用户输入进行交互式工具调用
    • 🔁 多轮往返请求:在协议修订版 2026-07-28 中支持引导、采样和根目录——一个处理程序即可服务于两个时代
    • 🌐 HTTP 请求访问:在 MCP 处理程序中完整访问请求上下文
    • 🔐 单工具授权:为工具实现精细化授权
  • 📁 资源:通过 MCP 资源系统提供内容和数据
  • 📚 资源模板:通过参数化 URI 提供动态资源
  • 💬 提示词:定义可复用的提示词模板,用于 AI 交互
  • 🔐 基于守卫的身份验证:基于守卫的安全机制,并支持 OAuth
  • 🏠 内置授权服务 — 使用内置授权服务,轻松完成设置。(Beta)
  • 🌐 外部授权服务 — 使用外部授权服务(Keycloak、Auth0 等)保护你的 MCP 服务。
  • 💉 依赖注入:在 MCP 组件中充分利用 NestJS DI 系统
  • 🔍 服务变更与插桩 — 为自定义逻辑或插桩目的变更底层 MCP 服务。

你是否有兴趣构建 ChatGPT 小组件(使用 OpenAI SDK)或 MCP 应用? 在此仓库 MCP-Nest-Samples 中了解如何使用 @rekog/MCP-Nest 构建。

提示

你可以通过 Context7 中的 chat 选项卡轻松了解此软件包。更进一步,还可以连接 Context7 MCP 服务,让你的 AI Agent 查阅文档并为你实现 MCP-Nest。

安装

npm install @rekog/mcp-nest \
  @modelcontextprotocol/server \
  @modelcontextprotocol/core \
  @modelcontextprotocol/node \
  zod@^4
可选依赖项

内置授权服务现在位于单独的软件包中。如果你要使用它,请将其与 @rekog/mcp-nest 一起安装:

npm install @rekog/mcp-nest-auth

如果你还要使用授权服务的 TypeORM 存储,请同时安装以下可选对等依赖项:

npm install @nestjs/typeorm typeorm

快速开始

MCP-Nest 以 NestJS 微服务传输策略的形式运行。工具、资源 和提示词定义在 @McpController() 类中(因此 NestJS 守卫、管道、 拦截器和异常过滤器都适用于它们),该策略通过一种或多种传输方式 (Streamable HTTP、STDIO)提供服务。

// greeting.controller.ts
import { McpController, Tool, McpContext } from '@rekog/mcp-nest';
import { Ctx, Payload } from '@nestjs/microservices';
import { z } from 'zod';

@McpController()
export class GreetingController {
  @Tool({
    name: 'greeting-tool',
    description: 'Returns a greeting with progress updates',
    parameters: z.object({ name: z.string().default('World') }),
  })
  async sayHello(
    @Payload() { name }: { name: string },
    @Ctx() ctx: McpContext,
  ) {
    await ctx.reportProgress({ progress: 50, total: 100 });
    return { content: [{ type: 'text', text: `Hello, ${name}!` }] };
  }
}
// app.module.ts
import { Module } from '@nestjs/common';
import {
  McpStrategy,
  MCP_STRATEGY,
  StreamableHttpTransport,
} from '@rekog/mcp-nest';
import { GreetingController } from './greeting.controller';

// The strategy is the whole configuration — there is no McpModule.
export const mcp = new McpStrategy({
  name: 'my-mcp-server',
  version: '1.0.0',
  transports: [
    new StreamableHttpTransport(),
  ],
});

@Module({
  controllers: [GreetingController],
  // Optional: only needed if a provider injects the strategy (e.g. for
  // runtime/dynamic tool registration).
  providers: [{ provide: MCP_STRATEGY, useValue: mcp }],
})
export class AppModule {}
// main.ts
import { NestFactory } from '@nestjs/core';
import { AppModule, mcp } from './app.module';

async function bootstrap() {
  const app = await NestFactory.create(AppModule);
  mcp.setHttpAdapter(app.getHttpAdapter()); // needed for HTTP transports
  app.connectMicroservice({ strategy: mcp });
  await app.startAllMicroservices(); // mounts the MCP transports
  await app.listen(3000); // also serves your normal HTTP routes
}
void bootstrap();

**调用顺序很重要:**先调用 startAllMicroservices(),再调用 listen(), 这样 MCP HTTP 路由会在服务器开始接受连接之前挂载。

/mcp 端点支持双时代协议:它可以同时通过相同的 @Tool 方法响应 2025 年版协议(initialize 握手 + 会话)和无状态的 2026-07-28 修订版。 上方的 ctx.reportProgress(...) 会原样发送给 2026-07-28 客户端——即使 请求不带会话,所有现代请求也都可以流式传回进度。2025 年版客户端需要 支持会话的传输方式才能实现此功能(new StreamableHttpTransport({ statefulMode: true }) 或 StdioTransport());使用旧版无状态默认设置时,此功能不起作用。请参阅 协议修订版。

对于仅使用 STDIO 的服务器,请跳过 HTTP 适配器,改用 NestFactory.createMicroservice(AppModule, { strategy: mcp }),并设置 transports: [new StdioTransport()],同时禁用日志记录(stdout 专用于 协议)。

文档

示例

examples 目录包含涵盖所有功能的可运行示例。 详情请参阅 examples/README.md。

评论

支持 Markdown

第一次接触 MCP?

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

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