NestJS MCP Server Module について
NestJS MCP Server Module(@rekog/mcp-nest)は、NestJS アプリケーションのメソッドを MCP ツール、リソース、プロンプトとして公開するモジュールです。NestJS のマイクロサービス トランスポート戦略として動作するため、ガードやパイプなどをそのまま利用できます。NestJS で本番向けの MCP サーバーを構築するチームに適しています。
主な機能
- 01CustomTransportStrategy として MCP を実行
- 02Streamable HTTP と STDIO のトランスポート
- 03Zod によるツール引数の検証
- 04ガードによる認証とツール単位の認可
- 05リソーステンプレートとプロンプト
活用シーン
- 01既存の NestJS サービスを MCP ツールとして公開する
- 02OAuth や外部認可サーバーで MCP サーバーを保護する
- 03依存性注入を使って MCP コンポーネントを構成する
MCP 対応
MCP サーバーを構築するためのモジュールで、@Tool メソッド、リソース、プロンプトを Streamable HTTP または STDIO 経由で MCP クライアントに提供します。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
このサーバーのパッケージやリモートエンドポイントはまだ取得できていません。プロジェクトの README の手順に従ってください。
ツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
NestJS MCP サーバーモジュール
NestJS アプリケーションから、AI 向けのツール、リソース、プロンプトを簡単に公開できる NestJS モジュールです。**Model Context Protocol(MCP)**を使用します。
@rekog/mcp-nest を使うと、NestJS でおなじみの方法でツール、リソース、プロンプトを定義でき、依存性注入の力を最大限に活用して、既存のコードベースを使いながら複雑なエンタープライズ向け MCP サーバーを構築できます。
特長
- 🧩 NestJS マイクロサービス戦略:MCP は
CustomTransportStrategyとして動作するため、ツール/リソース/プロンプトは実際の@MessagePatternハンドラーです。ガード、パイプ、インターセプター、例外フィルターがネイティブに適用されます - 🚀 マルチトランスポート対応:ストリーミング可能な HTTP と STDIO に対応し、
transports配列で選択できます - 🕰️ 2つの世代のプロトコルに対応:1つのエンドポイントで、2025年世代のプロトコル(
initialize+ セッション)とステートレスな2026-07-28リビジョンを同時に提供できます。ツールのコードを変更する必要はありません - 🔧 ツール:自動検出と Zod 検証により、NestJS メソッドを MCP ツールとして公開できます
- 🛠️ エリシテーション:ユーザー入力のエリシテーションに対応した対話型ツール呼び出し
- 🔁 複数回の往復リクエスト:プロトコルリビジョン
2026-07-28でのエリシテーション、サンプリング、ルートに対応します。1つのハンドラーで両世代を処理できます - 🌐 HTTP リクエストへのアクセス:MCP ハンドラー内でリクエストコンテキストに完全にアクセスできます
- 🔐 ツールごとの認可:ツールに対するきめ細かな認可を実装できます
- 📁 リソース:MCP リソースシステムを通じてコンテンツやデータを提供できます
- 📚 リソーステンプレート:パラメーター化された URI を持つ動的なリソースを作成できます
- 💬 プロンプト:AI とのやり取りに再利用できるプロンプトテンプレートを定義できます
- 🔐 ガードベースの認証:OAuth に対応したガードベースのセキュリティを実現できます
- 🏠 組み込みの認可サーバー — セットアップを簡単にするため、組み込みの認可サーバーを使用できます。(ベータ版)
- 🌐 外部認可サーバー — 外部認可サーバー(Keycloak、Auth0 など)で MCP サーバーを保護できます。
- 💉 依存性注入:MCP コンポーネント全体で NestJS の DI システムを活用できます
- 🔍 サーバーの変更と計測 — カスタムロジックや計測のために、内部の MCP サーバーを変更できます。
OpenAI SDK を使った ChatGPT ウィジェットや MCP アプリの構築に興味がありますか?
このリポジトリの MCP-Nest-Samples で、@rekog/MCP-Nest を使った方法をご確認ください。
ヒント
Context7 の
chatタブを使うと、このパッケージについて簡単に学べます。さらに、Context7 MCP サーバーを接続すると、AI エージェントがドキュメントにアクセスし、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 のガード、パイプ、インターセプター、例外フィルターが適用されます)、この戦略によって 1 つ以上のトランスポート(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();
順序が重要です: サーバーが接続の受け付けを開始する前に MCP の HTTP ルートをマウントできるよう、
listen()の前にstartAllMicroservices()を呼び出してください。
この /mcp エンドポイントは 2 つの世代に対応しています。同じ @Tool メソッドから、2025 年世代のプロトコル(initialize ハンドシェイク+セッション)と、ステートレスな 2026-07-28 リビジョンの両方に同時に応答します。上記の ctx.reportProgress(...) はそのまま 2026-07-28 クライアントに届きます。セッションレスであっても、最新のすべてのリクエストで進捗をストリーミングして返せます。2025 年世代のクライアントで使用するには、セッション対応のトランスポート(new StreamableHttpTransport({ statefulMode: true }) または StdioTransport)が必要です。従来のステートレスなデフォルト設定では何も行いません。詳しくはプロトコルのリビジョンを参照してください。
STDIO 専用のサーバーでは、HTTP アダプターを省略し、transports: [new StdioTransport()] を指定して NestFactory.createMicroservice(AppModule, { strategy: mcp }) を使用し、ログを無効にしてください(stdout はプロトコル専用です)。
ドキュメント
- Strategy API への移行 -
McpModule.forRoot(options)からMcpStrategy+@McpControllerへの移行 - プロトコルのリビジョンと2つの世代への対応 - 1 つのエンドポイントから2025 年世代のプロトコルと
2026-07-28を提供 - ツールガイド - NestJS のメソッドを MCP ツールとして定義し、公開する
- ツールの検出と登録 - ツールの自動検出と手動登録
- 動的機能ガイド - 実行時にツール、リソース、プロンプトをプログラムで登録
- リソースガイド - 静的および動的なコンテンツを提供
- リソーステンプレートガイド - パラメーター化されたリソースを作成
- プロンプトガイド - 再利用可能なプロンプトテンプレートを作成
- 組み込み認可サーバー - 組み込み OAuth で MCP サーバーを保護
- 外部認可サーバー - 外部認可サーバー(Keycloak、Auth0 など)で MCP サーバーを保護
- サーバーの例 - MCP サーバーの例(Streamable HTTP、HTTP、STDIO)と Fastify のサポート
例
examples ディレクトリには、すべての機能の動作する例が含まれています。
詳細は examples/README.md を参照してください。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。