/ ディレクトリ / プレイグラウンド / MCP-Nest
● コミュニティ rekog-labs ⚡ 即起動

MCP-Nest

作者 rekog-labs · rekog-labs/MCP-Nest

既存のサービスをMCPサーバーに変換するNestJSモジュール — 普段使っているDI、ガード、バリデーションをそのままAIに公開できます。

MCP-Nestは、スタンドアロンのMCPではなく、あらゆるNestアプリケーションにMCP機能を追加するNestJSモジュールです。デコレーターを使ってツール、リソース、プロンプトを公開し、stdio/HTTP+SSE/Streamable HTTPトランスポートに対応。NestJSガードによる認証統合も可能です。バックエンドが既にNestで構築されていて、エージェントからの呼び出しを可能にしたい場合に最適です。

なぜ使うのか

主な機能

ライブデモ

実際の動作

nest.replay ▶ 準備完了
0/0

インストール

クライアントを選択

~/Library/Application Support/Claude/claude_desktop_config.json  · Windows: %APPDATA%\Claude\claude_desktop_config.json
{
  "mcpServers": {
    "nest": {
      "command": "npx",
      "args": [
        "-y",
        "MCP-Nest"
      ],
      "_inferred": true
    }
  }
}

Claude Desktop → Settings → Developer → Edit Config を開く。保存後、アプリを再起動。

~/.cursor/mcp.json · .cursor/mcp.json
{
  "mcpServers": {
    "nest": {
      "command": "npx",
      "args": [
        "-y",
        "MCP-Nest"
      ],
      "_inferred": true
    }
  }
}

Cursor は Claude Desktop と同じ mcpServers スキーマを使用。プロジェクト設定はグローバルより優先。

VS Code → Cline → MCP Servers → Edit
{
  "mcpServers": {
    "nest": {
      "command": "npx",
      "args": [
        "-y",
        "MCP-Nest"
      ],
      "_inferred": true
    }
  }
}

Cline サイドバーの MCP Servers アイコンをクリックし、"Edit Configuration" を選択。

~/.codeium/windsurf/mcp_config.json
{
  "mcpServers": {
    "nest": {
      "command": "npx",
      "args": [
        "-y",
        "MCP-Nest"
      ],
      "_inferred": true
    }
  }
}

Claude Desktop と同じ形式。Windsurf を再起動して反映。

~/.continue/config.json
{
  "mcpServers": [
    {
      "name": "nest",
      "command": "npx",
      "args": [
        "-y",
        "MCP-Nest"
      ]
    }
  ]
}

Continue はマップではなくサーバーオブジェクトの配列を使用。

~/.config/zed/settings.json
{
  "context_servers": {
    "nest": {
      "command": {
        "path": "npx",
        "args": [
          "-y",
          "MCP-Nest"
        ]
      }
    }
  }
}

context_servers に追加。保存時に Zed がホットリロード。

claude mcp add nest -- npx -y MCP-Nest

ワンライナー。claude mcp list で確認、claude mcp remove で削除。

ユースケース

実用的な使い方: MCP-Nest

既存のNestJSバックエンドをMCPとして公開する

👤 エージェントから内部APIを呼び出す必要があるNestJSチーム ⏱ ~45 min intermediate

使うタイミング: PythonやTS MCP SDKでサービスロジックを書き直したくない場合 — テスト済みのコードをそのまま再利用できます。

前提条件
  • NestJS 10以上のアプリ — 既存のプロジェクトを使用
  • @rekog/mcp-nestのインストール — npm i @rekog/mcp-nest
フロー
  1. モジュールを登録する
    app.module.tsにMcpModule.forRoot({name: 'acme', version: '1.0'})を追加してください。✓ コピーしました
    → アプリが起動し、/mcpエンドポイントが存在する
  2. サービスメソッドをツールとしてデコレートする
    TicketsServiceのsearchTicketsに@Tool({name:'search_tickets', description:'...'})とZodスキーマを付与してください。既存の認証ガードはそのまま適用されます。✓ コピーしました
    → Claudeのツールリストにツールが表示される
  3. 認証を接続する
    MCPコントローラーに既存のJwtAuthGuardを適用し、エージェントが有効なBearerトークンを必要とするようにしてください。✓ コピーしました
    → 未認証の呼び出しが401を返す

結果: エージェントが実際のバックエンドを利用します — 同じバリデーション、同じ認証、サービスの重複なし。

注意点
  • ユーザースコープとサービススコープのツールを混在させると認証が混乱する — MCPモジュールを2つに分割: ユーザーJWT用とサービストークン用

呼び出し中にユーザー入力を求めるインタラクティブなツールを構築する

👤 高度なエージェントフローを構築するNest開発者 ⏱ ~30 min advanced

使うタイミング: ツールが確認操作や、エージェントがデフォルトで保持すべきでないシークレットを必要とする場合。

フロー
  1. ツール内でElicitation APIを使用する
    delete_accountツールで、削除実行前にユーザー(エージェントではなく実際の人間)から型付きの確認を求めてください。✓ コピーしました
    → エージェントがチャット内でユーザーに確認を求め、確認後にのみ処理を続行する

結果: 不可逆な操作がエージェント経由であっても人間の入力によってゲートされます。

動的なNestデータをMCPリソースとして提供する

👤 エージェントに古いスナップショットではなく最新のデータを読ませたいチーム ⏱ ~35 min advanced

使うタイミング: エージェントがツール呼び出しではなくコンテキストとして、ライブステータス(ビルド、デプロイ、チケットキュー)を参照する必要がある場合。

フロー
  1. リソーステンプレートを宣言する
    @Resource('ticket://{id}')を作成し、IDでチケットJSONを返すようにしてください。✓ コピーしました
    → エージェントがticket://123を参照してライブコンテンツを取得できる
  2. 更新をサブスクライブする
    チケットが変更されたときに更新を発行し、サブスクライバーがポーリングなしで最新の状態を取得できるようにしてください。✓ コピーしました
    → サブスクライブ中のクライアントへのMCPプッシュ通知

結果: スナップショットではなくライブコンテキスト — エージェントがユーザーと同じ情報を参照できます。

組み合わせ

他のMCPと組み合わせて10倍の力を

nest + golf

PythonチームもTSチームも同じフレームワークファーストな方法でMCPを構築する

Python Golf MCPの機能をNestチームのMCP-Nestサーバーに移植して、開発体験を比較してください。✓ コピーしました
nest + mcptools

デプロイ前にCIでツールスキーマを検証する

CIでNest MCPを起動し、mcp toolsを実行して期待されるツールリストを検証してください。✓ コピーしました

ツール

このMCPが提供する機能

ツール入力呼び出すタイミングコスト
@Tool({...}) decorator method args validated via Zod schema 任意のNestサービスメソッドをMCPツールとしてマークする standard Nest method cost
@Resource({...}) decorator URI template params 動的/静的リソースを公開する standard Nest cost
@Prompt({...}) decorator prompt vars プロンプトをバージョン管理されたコードとして提供する 0

コストと制限

運用コスト

APIクォータ
利用するサービスに依存
呼び出しあたりのトークン
ツールの出力に依存
金額
無料、MITライセンス
ヒント
リストを返すツールにはレスポンスサイズのガードを追加してください — 無制限のチケットリストはトークン予算をすぐに使い果たします

セキュリティ

権限、シークレット、影響範囲

認証情報の保管: 標準のNest設定を使用。@nestjs/config + シークレットマネージャーを推奨
データ送信先: Nestサービスがアクセスする先すべて

トラブルシューティング

よくあるエラーと対処法

Tool not appearing in Claude — ツールがClaudeに表示されない

クラスがモジュールのプロバイダーに登録されていること、デコレーターのインポート元が古いコピーではなく@rekog/mcp-nestであることを確認してください

確認: curl http://localhost:3000/mcp tools/list
Zod validation errors at runtime — 実行時のZodバリデーションエラー

スキーマがエージェントの送信する実際の入力と一致していません — モデルが正しいフィールドを入力できるようdescriptionを詳細にしてください

SSE connection drops every 30s — SSE接続が30秒ごとに切断される

上流プロキシのタイムアウトが原因です。nginxのkeepaliveを60秒以上に設定するか、Streamable HTTPトランスポートに切り替えてください

代替案

MCP-Nest 他との比較

代替案代わりに使う場面トレードオフ
TS MCP SDK (official)NestJSを使用しておらず、素のSDKを使いたい場合DIなし、ガードなし、すべて自分で配線する必要がある
GolfPythonバックエンドの場合言語は異なるが、フレームワーク志向は同様
FastMCPPython環境で、Golfよりシンプルにしたい場合エンタープライズ向けツールが少ない

その他

リソース

📖 GitHub の公式 README を読む

🐙 オープンな issue を見る

🔍 400以上のMCPサーバーとSkillsを見る