NestJS MCP Server Module

by rekog-labs

Integrations

  • Provides a module for NestJS to create an MCP (Model Context Protocol) server with Server-Sent Events (SSE) transport, allowing services to be exposed as tools that clients can discover and execute.

  • Enables sending continuous progress updates from tools to clients, allowing for tracking of long-running operations with percentage completion indicators.

  • Integrates Zod schema validation for tool requests, enabling type-safe parameter validation for tools exposed through the MCP server.

Модуль сервера NestJS MCP

Модуль NestJS для легкого предоставления инструментов, ресурсов и подсказок для ИИ из ваших приложений NestJS с использованием протокола контекста модели (MCP) .

с помощью @rekog/mcp-nest вы определяете инструменты, ресурсы и подсказки способом, привычным в NestJS, и используете всю мощь внедрения зависимостей, чтобы использовать существующую кодовую базу для создания сложных корпоративных серверов MCP.

Функции

  • 🚀 Поддержка всех типов транспорта:
    • Потоковое HTTP
    • HTTP+SSE
    • СТДИО
  • 🔍 Автоматическое обнаружение и регистрация tool , resource и prompt
  • 💯 Проверка вызова инструмента на основе Zod
  • 📊 Уведомления о ходе выполнения
  • 🔒 Аутентификация на основе Guard

Установка

npm install @rekog/mcp-nest @modelcontextprotocol/sdk zod

Быстрый старт

1. Модуль импорта

// app.module.ts import { Module } from '@nestjs/common'; import { McpModule } from '@rekog/mcp-nest'; import { GreetingTool } from './greeting.tool'; @Module({ imports: [ McpModule.forRoot({ name: 'my-mcp-server', version: '1.0.0', }), ], providers: [GreetingTool], }) export class AppModule {}

2. Определите инструменты и ресурсы

// greeting.tool.ts import { Injectable } from '@nestjs/common'; import { Tool, Resource, Context } from '@rekog/mcp-nest'; import { z } from 'zod'; import { Progress } from '@modelcontextprotocol/sdk/types'; @Injectable() export class GreetingTool { constructor() {} @Tool({ name: 'hello-world', description: 'Returns a greeting and simulates a long operation with progress updates', parameters: z.object({ name: z.string().default('World'), }), }) async sayHello({ name }, context: Context) { const greeting = `Hello, ${name}!`; const totalSteps = 5; for (let i = 0; i < totalSteps; i++) { await new Promise((resolve) => setTimeout(resolve, 500)); // Send a progress update. await context.reportProgress({ progress: (i + 1) * 20, total: 100, } as Progress); } return { content: [{ type: 'text', text: greeting }], }; } @Resource({ uri: 'mcp://hello-world/{userName}', name: 'Hello World', description: 'A simple greeting resource', mimeType: 'text/plain', }) // Different from the SDK, we put the parameters and URI in the same object. async getCurrentSchema({ uri, userName }) { return { content: [ { uri, text: `User is ${userName}`, mimeType: 'text/plain', }, ], }; } }

Готово!

Быстрый старт для STDIO

Главное отличие заключается в том, что при импорте модуля необходимо указать опцию transport .

McpModule.forRoot({ name: 'playground-stdio-server', version: '0.0.1', transport: McpTransportType.STDIO, });

Остальное то же самое, вы можете определить инструменты, ресурсы и подсказки как обычно. Пример автономного приложения NestJS, использующего транспорт STDIO, следующий:

async function bootstrap() { const app = await NestFactory.createApplicationContext(AppModule, { logger: false, }); return app.close(); } void bootstrap();

Далее вы можете использовать сервер MCP с клиентом MCP Stdio ( см. пример ) или после сборки проекта вы можете использовать его со следующей конфигурацией клиента MCP:

{ "mcpServers": { "greeting": { "command": "node", "args": [ "<path to dist js file>", ] } } }

Конечные точки API

Транспорт HTTP+SSE предоставляет две конечные точки:

  • GET /sse : конечная точка соединения SSE (защищена защитой, если настроена)
  • POST /messages : Конечная точка выполнения инструмента (защищена защитой, если настроена)

Потоковый HTTP-транспорт предоставляет следующие конечные точки:

  • POST /mcp : Основная конечная точка для всех операций MCP (выполнение инструмента, доступ к ресурсам и т. д.). В режиме с сохранением состояния создает и поддерживает сеансы.
  • GET /mcp : Устанавливает потоки Server-Sent Events (SSE) для обновлений в реальном времени и уведомлений о ходе выполнения. Доступно только в режиме с отслеживанием состояния.
  • DELETE /mcp : Завершает сеансы MCP. Доступно только в режиме с отслеживанием состояния.

Советы

Можно использовать модуль с глобальным префиксом, но рекомендуется исключить эти конечные точки с помощью:

app.setGlobalPrefix('/api', { exclude: ['sse', 'messages', 'mcp'] });

Аутентификация

Вы можете защитить свои конечные точки MCP с помощью стандартных средств защиты NestJS.

1. Создайте стражу

Реализуйте интерфейс CanActivate . Guard должен обрабатывать проверку запроса (например, проверку JWT, ключей API) и опционально прикреплять информацию о пользователе к объекту запроса.

Ничего особенного, более подробную информацию можно найти в документации NestJS.

2. Применить защиту

Передайте ваши защитные меры в конфигурацию McpModule.forRoot . Защитные меры будут применены к обеим конечным точкам /sse и /messages .

// app.module.ts import { Module } from '@nestjs/common'; import { McpModule } from '@rekog/mcp-nest'; import { GreetingTool } from './greeting.tool'; import { AuthGuard } from './auth.guard'; @Module({ imports: [ McpModule.forRoot({ name: 'my-mcp-server', version: '1.0.0', guards: [AuthGuard], // Apply the guard here }), ], providers: [GreetingTool, AuthGuard], // Ensure the Guard is also provided }) export class AppModule {}

Вот и все! Остальное то же самое, что и у NestJS Guards.

Детская площадка

Каталог playground содержит примеры для быстрого тестирования функций MCP и @rekog/mcp-nest . Более подробную информацию см. в playground/README.md .

Конфигурация

Метод McpModule.forRoot() принимает объект McpOptions для настройки сервера. Вот доступные параметры:

ВариантОписаниеПо умолчанию
nameОбязательно. Имя вашего MCP-сервера.-
versionОбязательно. Версия вашего сервера MCP.-
capabilitiesДополнительные возможности сервера MCP для рекламы. См. @modelcontextprotocol/sdk .undefined
instructionsДополнительные инструкции для клиента по взаимодействию с сервером.undefined
transportУказывает тип(ы) транспорта, которые необходимо включить.[McpTransportType.SSE, McpTransportType.STREAMABLE_HTTP, McpTransportType.STDIO]
sseEndpointПуть конечной точки для соединения SSE (используется с транспортом SSE ).'sse'
messagesEndpointКонечный путь для отправки сообщений (используется с транспортом SSE ).'messages'
mcpEndpointБазовый путь конечной точки для операций MCP (используется с транспортом STREAMABLE_HTTP ).'mcp'
globalApiPrefixГлобальный префикс для всех конечных точек MCP. Полезно при интеграции в существующее приложение.''
guardsМассив NestJS Guards для применения к конечным точкам MCP для аутентификации/авторизации.[]
decoratorsМассив декораторов классов NestJS для применения к сгенерированным контроллерам MCP.[]
sseКонфигурация, специфичная для транспорта SSE .{ pingEnabled: true, pingIntervalMs: 30000 }
sse.pingEnabledСледует ли включать периодические сообщения SSE ping для поддержания соединения.true
sse.pingIntervalMsИнтервал (в миллисекундах) отправки сообщений SSE ping.30000
streamableHttpКонфигурация, специфичная для транспорта STREAMABLE_HTTP .{ enableJsonResponse: true, sessionIdGenerator: undefined, statelessMode: true }
streamableHttp.enableJsonResponseЕсли true , позволяет конечной точке /mcp возвращать ответы JSON для непотоковых запросов (например, listTools ).true
streamableHttp.sessionIdGeneratorФункция для генерации уникальных идентификаторов сеансов при работе в режиме с сохранением состояния. Требуется, если statelessMode имеет значение false .undefined
streamableHttp.statelessModeЕсли true , транспорт STREAMABLE_HTTP работает без сохранения состояния (без сессий). Если false , он работает с сохранением состояния, требуя sessionIdGenerator .true
-
security - not tested
A
license - permissive license
-
quality - not tested

remote-capable server

The server can be hosted and run remotely because it primarily relies on remote services or has no dependency on the local environment.

Модуль NestJS, который позволяет отображать службы как сервер MCP с транспортом событий, отправленных сервером, что упрощает обнаружение и выполнение инструментов клиентами.

  1. Функции
    1. Установка
      1. Быстрый старт
        1. 1. Модуль импорта
        2. 2. Определите инструменты и ресурсы
      2. Быстрый старт для STDIO
        1. Конечные точки API
          1. Советы
        2. Аутентификация
          1. 1. Создайте стражу
          2. 2. Применить защиту
        3. Детская площадка
          1. Конфигурация

            Related MCP Servers

            • A
              security
              F
              license
              A
              quality
              An MCP server implementation that enables interaction with the Unstructured API, providing tools to list, create, update, and manage sources, destinations, and workflows.
              Last updated -
              39
              26
              • Apple
            • -
              security
              F
              license
              -
              quality
              A server that connects MCP clients (Claude, Cursor, Windsurf, etc.) to EventCatalog instances, allowing users to ask questions about their event-driven architecture and get insights about domains, services, and message schemas directly within their development tools.
              Last updated -
              21
              13
              TypeScript
              • Apple
            • -
              security
              F
              license
              -
              quality
              A TypeScript framework for building Model Context Protocol (MCP) servers with automatic discovery and loading of tools, resources, and prompts.
              Last updated -
              67
              TypeScript
              • Apple
            • -
              security
              F
              license
              -
              quality
              A Node.js module that provides an MCP Server connecting to MCP Bone online service, allowing users to register other MCP Servers, obtain function calling tools in JSON or XML format, and parse completion text into tool calls.
              Last updated -
              46
              JavaScript

            View all related MCP servers

            ID: lh2oqhrntb