{"data":{"slug":"rekog-labs-mcp-nest","name":"MCP-Nest","tagline":"A NestJS module for creating MCP servers to expose AI tools and resources","github_url":"https://github.com/rekog-labs/MCP-Nest","owner":"rekog-labs","repo":"MCP-Nest","owner_avatar_url":"https://avatars.githubusercontent.com/u/153384226?v=4","primary_language":"TypeScript","stars":709,"forks":115,"topics":["llm","llms","mcp","mcp-nest","model-context-protocol","modelcontextprotocol","nestjs"],"archived":false,"github_pushed_at":"2026-09-15T07:06:47+00:00","maintenance_label":"Very active","stars_delta_30d":26,"url":"https://www.graphcanon.com/tools/rekog-labs-mcp-nest","markdown_url":"https://www.graphcanon.com/tools/rekog-labs-mcp-nest.md","api_url":"https://www.graphcanon.com/api/graphcanon/tools/rekog-labs-mcp-nest","graph_url":"https://www.graphcanon.com/api/graphcanon/graph?tool=rekog-labs-mcp-nest","description":"A NestJS module to effortlessly create Model Context Protocol (MCP) servers for exposing AI tools, resources, and prompts.","homepage_url":null,"license":"MIT","open_issues":16,"watchers":9,"ai_summary":"MCP-Nest is designed to simplify the creation of Model Context Protocol (MCP) servers via NestJS, enabling developers to easily integrate various AI tools and resources.","readme_excerpt":"## Installation\n\n```bash\nnpm install @rekog/mcp-nest \\\n  @modelcontextprotocol/server \\\n  @modelcontextprotocol/core \\\n  @modelcontextprotocol/node \\\n  zod@^4\n```\n\n---\n\n## Quick Start\n\nMCP-Nest runs as a **NestJS microservice transport strategy**. Tools, resources,\nand prompts live on `@McpController()` classes (so NestJS guards, pipes,\ninterceptors, and exception filters apply to them), and the strategy serves them\nover one or more transports (Streamable HTTP, STDIO).\n\n```typescript\n// greeting.controller.ts\nimport { McpController, Tool, McpContext } from '@rekog/mcp-nest';\nimport { Ctx, Payload } from '@nestjs/microservices';\nimport { z } from 'zod';\n\n@McpController()\nexport class GreetingController {\n  @Tool({\n    name: 'greeting-tool',\n    description: 'Returns a greeting with progress updates',\n    parameters: z.object({ name: z.string().default('World') }),\n  })\n  async sayHello(\n    @Payload() { name }: { name: string },\n    @Ctx() ctx: McpContext,\n  ) {\n    await ctx.reportProgress({ progress: 50, total: 100 });\n    return { content: [{ type: 'text', text: `Hello, ${name}!` }] };\n  }\n}\n```\n\n```typescript\n// app.module.ts\nimport { Module } from '@nestjs/common';\nimport {\n  McpStrategy,\n  MCP_STRATEGY,\n  StreamableHttpTransport,\n} from '@rekog/mcp-nest';\nimport { GreetingController } from './greeting.controller';\n\n// The strategy is the whole configuration — there is no McpModule.\nexport const mcp = new McpStrategy({\n  name: 'my-mcp-server',\n  version: '1.0.0',\n  transports: [\n    new StreamableHttpTransport(),\n  ],\n});\n\n@Module({\n  controllers: [GreetingController],\n  // Optional: only needed if a provider injects the strategy (e.g. for\n  // runtime/dynamic tool registration).\n  providers: [{ provide: MCP_STRATEGY, useValue: mcp }],\n})\nexport class AppModule {}\n```\n\n```typescript\n// main.ts\nimport { NestFactory } from '@nestjs/core';\nimport { AppModule, mcp } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create(AppModule);\n  mcp.setHttpAdapter(app.getHttpAdapter()); // needed for HTTP transports\n  app.connectMicroservice({ strategy: mcp });\n  await app.startAllMicroservices(); // mounts the MCP transports\n  await app.listen(3000); // also serves your normal HTTP routes\n}\nvoid bootstrap();\n```\n\n> **Order matters:** call `startAllMicroservices()` before `listen()` so the MCP\n> HTTP routes are mounted before the server starts accepting connections.\n\nThat `/mcp` endpoint is **dual-era**: it answers both the 2025-era protocol\n(`initialize` handshake + sessions) and the stateless `2026-07-28` revision,\nconcurrently, from the same `@Tool` methods. `ctx.reportProgress(...)` above\nreaches a `2026-07-28` client as-is — every modern request can stream progress\nback even though it is sessionless. A 2025-era client needs a session-aware\ntransport for it (`new StreamableHttpTransport({ statefulMode: true })` or\n`StdioTransport`); on the legacy stateless default it is a no-op. See\n[Protocol Revisions](docs/protocol-revisions.md).\n\nFor an STDIO-only server, skip the HTTP adapter and use\n`NestFactory.createMicroservice(AppModule, { strategy: mcp })` with\n`transports: [new StdioTransport()]` and disable logging (stdout is reserved for\nthe protocol).","github_created_at":"2025-01-26T22:21:27+00:00","created_at":"2026-07-11T11:54:59.922548+00:00","updated_at":"2026-09-20T06:46:30.787295+00:00","categories":[{"slug":"inference-serving","name":"Inference & Serving","url":"https://www.graphcanon.com/categories/inference-serving","markdown_url":"https://www.graphcanon.com/categories/inference-serving.md","api_url":"https://www.graphcanon.com/api/graphcanon/categories/inference-serving"},{"slug":"model-training","name":"Model Training","url":"https://www.graphcanon.com/categories/model-training","markdown_url":"https://www.graphcanon.com/categories/model-training.md","api_url":"https://www.graphcanon.com/api/graphcanon/categories/model-training"}],"tags":[{"slug":"llm","name":"llm"},{"slug":"llms","name":"llms"},{"slug":"mcp","name":"mcp"},{"slug":"mcp-nest","name":"mcp-nest"},{"slug":"model-context-protocol","name":"model-context-protocol"},{"slug":"modelcontextprotocol","name":"modelcontextprotocol"},{"slug":"nestjs","name":"nestjs"}],"trust":{"provenance":{"is_fork":false,"github_id":922709376,"owner_type":"Organization","methodology":"github_public_v1","parent_repo":null,"near_duplicate_slugs":[]},"computed_at":"2026-09-20T06:46:28.971Z","maintenance":{"label":"Very active","score":96,"methodology":"github_public_v1","releases_90d":11,"days_since_push":4,"last_release_at":"2026-09-09T10:43:38Z","stars_delta_30d":26,"open_issues_delta_30d":-16},"security_summary":{"status":"no_manifest","scanner":null,"low_count":0,"high_count":0,"last_scan_at":"2026-07-11T11:55:01.107Z","medium_count":0,"scan_profile":"mcp_manifest","critical_count":0}},"capability_facts":{"mcp":{"source":"package.json:@modelcontextprotocol/*","observed_at":"2026-09-20T06:46:30.008Z","server_manifest":true},"scan":{"source":"repo_scan","observed_at":"2026-09-20T06:46:30.008Z"},"languages":{"value":["typescript","javascript"],"source":"github.language+package.json","observed_at":"2026-09-20T06:46:30.008Z"},"license_spdx":{"value":"MIT","source":"github.license","observed_at":"2026-09-20T06:46:30.008Z"}},"decision_facts":{"hosting":null,"pricing":null,"requirements":null,"constraints":null,"when_to_use":["Use when you want to leverage the robust structure of NestJS to build MCP servers for providing access to your AI services.","If you aim to streamline development within a strongly typed environment, such as TypeScript, choosing MCP-Nest can accelerate the process."],"when_not_to_use":["Avoid if you are committed to frameworks other than NestJS, as alternative setups may not integrate smoothly with MCP-Nest.","Do not use this tool when non-TypeScript environments or preferences for a lower level of abstraction in web development are prioritized."],"source":"enrich:decision_facts","observed_at":"2026-07-16T23:13:34.632Z"},"constraint_facets":null,"decision_summary":[{"label":"Adopt for","value":"MCP-Nest is a NestJS module for developing MCP servers that expose AI tools and resources."}]}}