Skip to main content
Glama

NestJS MCP Server Module

by rekog-labs
MIT License
39,877
336
  • Apple
  • Linux

Módulo de servidor MCP de NestJS

Un módulo NestJS para exponer sin esfuerzo herramientas, recursos y avisos para IA, desde sus aplicaciones NestJS utilizando el Protocolo de contexto de modelo (MCP) .

Con @rekog/mcp-nest define herramientas, recursos y avisos de una manera familiar en NestJS y aprovecha todo el poder de la inyección de dependencia para utilizar tu base de código existente en la creación de servidores MCP complejos y listos para la empresa.

Características

  • 🚀 Soporte para todos los tipos de transporte:
    • HTTP transmisible
    • HTTP+SSE
    • STDIO
  • 🔍 tool automática, resource y descubrimiento y registro prompt
  • Validación de llamadas a herramientas basadas en Zod
  • 📊 Notificaciones de progreso
  • Autenticación basada en guardia
  • 🌐 Acceso a la información de solicitudes HTTP dentro de los recursos de MCP (herramientas, recursos, indicaciones)

Instalación

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

Inicio rápido

1. Módulo de importación

// 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. Definir herramientas y recursos

// greeting.tool.ts import type { Request } from 'express'; 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, request: Request) { const userAgent = request.get('user-agent') || 'Unknown'; const greeting = `Hello, ${name}! Your user agent is: ${userAgent}`; const totalSteps = 5; for (let i = 0; i < totalSteps; i++) { await new Promise((resolve) => setTimeout(resolve, 100)); // 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', }, ], }; } }

¡Ya estás listo!

[!TIP] El ejemplo anterior muestra cómo se accede a los encabezados Request HTTP en MCP Tools. Esto resulta útil para identificar usuarios, agregar lógica específica del cliente y muchos otros casos de uso. Para más ejemplos, consulte las Pruebas de autenticación .

Inicio rápido para STDIO

La principal diferencia es que debes proporcionar la opción transport al importar el módulo.

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

El resto es igual: puedes definir herramientas, recursos y avisos como siempre. A continuación, se muestra un ejemplo de una aplicación NestJS independiente que utiliza el transporte STDIO:

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

A continuación, puede utilizar el servidor MCP con un cliente MCP Stdio ( ver ejemplo ) o, después de crear su proyecto, puede usarlo con la siguiente configuración de cliente MCP:

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

Puntos finales de API

El transporte HTTP+SSE expone dos puntos finales:

  • GET /sse : punto final de conexión SSE (protegido por protectores si está configurado)
  • POST /messages : Punto final de ejecución de la herramienta (protegido por guardias si está configurado)

El transporte HTTP transmisible expone los siguientes puntos finales:

  • POST /mcp : Punto final principal para todas las operaciones de MCP (ejecución de herramientas, acceso a recursos, etc.). En modo con estado, crea y mantiene sesiones.
  • GET /mcp : Establece flujos de eventos enviados por el servidor (SSE) para actualizaciones en tiempo real y notificaciones de progreso. Solo disponible en modo con estado.
  • DELETE /mcp : Finaliza las sesiones MCP. Solo disponible en modo con estado.

Consejos

Es posible utilizar el módulo con prefijo global, pero la forma recomendada es excluir esos puntos finales con:

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

Autenticación

Puede proteger sus puntos finales de MCP utilizando NestJS Guards estándar.

1. Crea un guardia

Implementar la interfaz CanActivate . El guardián debe gestionar la validación de solicitudes (p. ej., comprobar JWT y claves API) y, opcionalmente, adjuntar información del usuario al objeto de solicitud.

Nada especial, consulte la documentación de NestJS para obtener más detalles.

2. Aplicar la protección

Transfiera sus protecciones a la configuración de McpModule.forRoot . Estas se aplicarán a los puntos finales /sse y /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 {}

¡Listo! El resto es igual que con NestJS Guards.

Patio de juegos

El directorio playground contiene ejemplos para probar rápidamente las funciones de MCP y @rekog/mcp-nest . Consulte el playground/README.md para obtener más información.

Configuración

El método McpModule.forRoot() acepta un objeto McpOptions para configurar el servidor. Estas son las opciones disponibles:

OpciónDescripciónPor defecto
nameObligatorio. El nombre de su servidor MCP.-
versionObligatorio. La versión de su servidor MCP.-
capabilitiesFunciones opcionales del servidor MCP para publicidad. Consulte @modelcontextprotocol/sdk .undefined
instructionsInstrucciones opcionales para el cliente sobre cómo interactuar con el servidor.undefined
transportEspecifica el tipo(s) de transporte a habilitar.[McpTransportType.SSE, McpTransportType.STREAMABLE_HTTP, McpTransportType.STDIO]
sseEndpointLa ruta del punto final para la conexión SSE (utilizada con el transporte SSE ).'sse'
messagesEndpointLa ruta del punto final para enviar mensajes (utilizada con el transporte SSE ).'messages'
mcpEndpointLa ruta del punto final base para las operaciones MCP (utilizada con el transporte STREAMABLE_HTTP ).'mcp'
globalApiPrefixUn prefijo global para todos los puntos finales de MCP. Útil si se integra en una aplicación existente.''
guardsUna matriz de protectores NestJS para aplicar a los puntos finales de MCP para autenticación/autorización.[]
decoratorsUna matriz de decoradores de clase NestJS para aplicar a los controladores MCP generados.[]
sseConfiguración específica del transporte SSE .{ pingEnabled: true, pingIntervalMs: 30000 }
sse.pingEnabledSi se deben habilitar mensajes de ping SSE periódicos para mantener la conexión activa.true
sse.pingIntervalMsEl intervalo (en milisegundos) para enviar mensajes de ping SSE.30000
streamableHttpConfiguración específica del transporte STREAMABLE_HTTP .{ enableJsonResponse: true, sessionIdGenerator: undefined, statelessMode: true }
streamableHttp.enableJsonResponseSi true , permite que el punto final /mcp devuelva respuestas JSON para solicitudes que no son de transmisión (como listTools ).true
streamableHttp.sessionIdGeneratorUna función para generar identificadores de sesión únicos al ejecutarse en modo con estado. Obligatorio si statelessMode es false .undefined
streamableHttp.statelessModeSi true , el transporte STREAMABLE_HTTP funciona sin estado (sin sesiones). Si es false , funciona con estado, lo que requiere un 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.

Un módulo NestJS que permite exponer los servicios como un servidor MCP con transporte de eventos enviados por el servidor, lo que facilita el descubrimiento y la ejecución de herramientas por parte de los clientes.

  1. Características
    1. Instalación
      1. Inicio rápido
        1. 1. Módulo de importación
        2. 2. Definir herramientas y recursos
      2. Inicio rápido para STDIO
        1. Puntos finales de API
          1. Consejos
        2. Autenticación
          1. 1. Crea un guardia
          2. 2. Aplicar la protección
        3. Patio de juegos
          1. Configuración

            Related MCP Servers

            • -
              security
              A
              license
              -
              quality
              A demonstration server that implements the Model Context Protocol (MCP) SDK, providing tools and endpoints for server-sent events and message handling.
              Last updated -
              41
              7
              TypeScript
              MIT License
            • -
              security
              F
              license
              -
              quality
              A server for Model Context Protocol (MCP) that uses Server-Sent Events (SSE) for streaming communication, enabling tools like the HackerNews API to be accessed through a secure HTTP+SSE transport.
              Last updated -
              23
              TypeScript
            • -
              security
              F
              license
              -
              quality
              An MCP server that enables interaction with Nexmo's Messages API, allowing agents to send and manage messages across various channels via natural language commands.
              Last updated -
              Python
            • -
              security
              F
              license
              -
              quality
              An MCP (Model Context Protocol) server implementation using HTTP SSE (Server-Sent Events) connections with built-in utility tools including echo, time, calculator, and weather query functionality.
              Last updated -
              JavaScript

            View all related MCP servers

            MCP directory API

            We provide all the information about MCP servers via our MCP API.

            curl -X GET 'https://glama.ai/api/mcp/v1/servers/rekog-labs/MCP-Nest'

            If you have feedback or need assistance with the MCP directory API, please join our Discord server