NestJS MCP サーバーモジュール
**モデル コンテキスト プロトコル (MCP)**を使用して、NestJS アプリケーションから AI 用のツール、リソース、プロンプトを簡単に公開できる NestJS モジュールです。
@rekog/mcp-nestを使用すると、NestJS で使い慣れた方法でツール、リソース、プロンプトを定義し、依存性注入の機能をフルに活用して、既存のコードベースを利用して複雑なエンタープライズ対応の MCP サーバーを構築できます。
特徴
🚀 すべてのトランスポート タイプをサポート:
ストリーミング可能なHTTP
HTTP+SSE
標準入出力
🔍 自動
tool、resource、prompt検出と登録💯 Zodベースのツール呼び出し検証
📊 進捗通知
🔒 ガードベースの認証
🌐 MCP リソース (ツール、リソース、プロンプト) 内の HTTP リクエスト情報へのアクセス
インストール
クイックスタート
1. モジュールのインポート
2. ツールとリソースを定義する
完了です!
上記の例は、MCPツール内でHTTPRequestヘッダーにアクセスする方法を示しています。これは、ユーザーの識別、クライアント固有のロジックの追加など、様々なユースケースに役立ちます。その他の例については、認証テストをご覧ください。
STDIO のクイックスタート
主な違いは、モジュールをインポートするときにtransportオプションを指定する必要があることです。
残りは通常通り、ツール、リソース、プロンプトを定義できます。STDIOトランスポートを使用したスタンドアロンのNestJSアプリケーションの例を以下に示します。
次に、MCP サーバーを MCP Stdio クライアントと共に使用するか (例を参照)、プロジェクトをビルドした後に次の MCP クライアント構成で使用することができます。
APIエンドポイント
HTTP + SSE トランスポートは 2 つのエンドポイントを公開します。
GET /sse: SSE 接続エンドポイント (構成されている場合はガードによって保護されます)POST /messages: ツール実行エンドポイント (設定によりガードで保護されます)
ストリーミング可能な HTTP トランスポートは、次のエンドポイントを公開します。
POST /mcp: すべてのMCP操作(ツール実行、リソースアクセスなど)のメインエンドポイント。ステートフルモードでは、セッションの作成と維持を行います。GET /mcp: リアルタイム更新と進捗状況通知のための Server-Sent Events (SSE) ストリームを確立します。ステートフルモードでのみ利用可能です。DELETE /mcp: MCPセッションを終了します。ステートフルモードでのみ使用できます。
ヒント
グローバル プレフィックス付きのモジュールを使用することもできますが、次のようにしてそれらのエンドポイントを除外することをお勧めします。
認証
標準の NestJS Guards を使用して MCP エンドポイントを保護できます。
1. ガードを作成する
CanActivateインターフェースを実装します。ガードはリクエストの検証(JWTやAPIキーのチェックなど)を処理し、必要に応じてユーザー情報をリクエストオブジェクトに添付する必要があります。
特別なことは何もありません。詳細については、NestJS のドキュメントを確認してください。
2. ガードをつける
McpModule.forRoot設定にガードを渡してください。ガードは/sseと/messages両方のエンドポイントに適用されます。
以上です!残りはNestJS Guardsと同じです。
遊び場
playgroundディレクトリには、MCPと@rekog/mcp-nest機能を簡単にテストするためのサンプルが含まれています。詳細はplayground/README.mdを参照してください。
構成
McpModule.forRoot()メソッドは、サーバーの設定に使用するMcpOptionsオブジェクトを受け取ります。使用可能なオプションは以下のとおりです。
オプション | 説明 | デフォルト |
| 必須。MCP サーバーの名前。 | - |
| 必須。MCP サーバーのバージョン。 | - |
| オプションのMCPサーバー機能をアドバタイズします。 を参照してください。 |
|
| サーバーと対話する方法に関するクライアントへのオプションの指示。 |
|
| 有効にするトランスポート タイプを指定します。 |
|
| SSE 接続のエンドポイント パス (
トランスポートで使用)。 |
|
| メッセージを送信するためのエンドポイント パス (
トランスポートで使用されます)。 |
|
| MCP 操作の基本エンドポイント パス (
トランスポートで使用されます)。 |
|
| すべてのMCPエンドポイントのグローバルプレフィックス。既存のアプリケーションに統合する場合に便利です。 |
|
| 認証/承認のために MCP エンドポイントに適用する NestJS ガード配列。 |
|
| 生成された MCP コントローラーに適用する NestJS クラス デコレーターの配列。 |
|
|
トランスポートに固有の構成。 |
|
| 接続を維持するために定期的な SSE ping メッセージを有効にするかどうか。 |
|
| SSE ping メッセージを送信する間隔 (ミリ秒単位)。 |
|
|
トランスポートに固有の構成。 |
|
|
の場合、
エンドポイントは非ストリーミング リクエスト (
など) に対して JSON 応答を返すことができます。 |
|
|
モードで実行しているときに一意のセッション ID を生成する関数。statelessMode が
場合に必須です。 |
|
|
の場合、
トランスポートはステートレス(セッションなし)で動作します。
の場合、ステートフルで動作し、
が必要になります。 |
|
This server cannot be installed
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.
Server-Sent Events トランスポートを備えた MCP サーバーとしてサービスを公開し、クライアントによるツールの検出と実行を容易にする NestJS モジュール。
Related Resources
Related MCP Servers
- -security-license-qualityA demonstration server that implements the Model Context Protocol (MCP) SDK, providing tools and endpoints for server-sent events and message handling.Last updated -13111MIT License
- -security-license-qualityA 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 -24
- -security-license-qualityA TypeScript framework for building MCP servers with features for client sessions, authentication, image/audio content, and typed server events.Last updated -MIT License
- -security-license-qualityAn 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 -