MCP Registry & Tester について
MCP Lab は、開発者が HTTP ベースの MCP サーバーを登録・テストするためのダッシュボードです。ツールの手動実行と LLM チャット実行に対応し、OAuth とカスタムヘッダーも扱えます。
主な機能
- 01HTTP MCP サーバーの登録と管理
- 02ツールと入力スキーマの確認
- 03生成フォームまたは JSON でのツールテスト
- 04LLM チャット経由のツール実行
- 05OAuth とカスタムヘッダーへの対応
- 06コンテキスト負荷とトークン使用量の確認
活用シーン
- 01連携前に MCP サーバーのツールを確認
- 02ツールを手動実行して結果を確認
- 03LLM チャットのワークフローでツールを試行
MCP 対応
Streamable HTTP で HTTP MCP サーバーに接続し、ツールの一覧取得と手動または LLM による呼び出しを行います。Dynamic Client Registration 対応サーバーの OAuth 認証とカスタムリクエストヘッダーをサポートします。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
このサーバーのパッケージやリモートエンドポイントはまだ取得できていません。プロジェクトの README の手順に従ってください。
ツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
MCP Lab

MCP Lab は、HTTP ベースの Model Context Protocol(MCP)サーバーを登録したり、ツールを手動でテストしたり、ガイド付きチャットを通じて LLM にツールを呼び出させたりできる Next.js 15 ダッシュボードです。各ユーザーはメールでサインインし、自分専用のレジストリを管理できます。また、AI チャットのワークフローを動かすためのプロバイダー API キーを保存できます。
ライブ版にアクセス:MCP Lab
主な機能
- 機能の確認:利用可能なツールを表示し、詳細な説明を読み、各ツールの JSON 入力スキーマを分析できます。
- OAuth 統合:OAuth 認証が必要な MCP サーバーへの接続を標準でサポートしています(Dynamic Client Registration が必要です。サーバーが RFC 7591 をサポートしている必要があります)。
- カスタムヘッダー:MCP サーバーへのリクエストに使用するカスタムヘッダー(API キーや認証トークンなど)を定義して挿入できます。
- 2 つの操作モード:生成されたフォームから MCP ツールを手動で操作するか、LLM に操作を任せることができます。
- コンテキストの把握:おおよそのコンテキストオーバーヘッドを確認し、接続された各 MCP サーバーのトークン使用量を監視できます。
デプロイアーキテクチャ

このアプリケーションは、SST を使って AWS にデプロイされており、OpenNext を利用して Next.js をサーバーレス環境に適応させています。OpenNext は Next.js のビルド出力を、AWS Lambda やその他のサーバーレスプラットフォームと互換性のある形式に変換します。
OpenNext のデプロイ構成について詳しくは、アーキテクチャのドキュメントを参照してください。
- コンピューティング:AWS Lambda 上で実行されるため、無制限にスケールでき、アイドル時のコストはかかりません。
- CDN:AWS CloudFront が静的アセットを配信し、エッジでコンテンツをキャッシュして低レイテンシを実現します。
- ストレージ:ユーザーデータと設定は、マネージド PostgreSQL データベースに保存されます。
- セキュリティ:環境変数とシークレットは、SST のシークレット管理を通じて安全に管理されます。
トランスポートのサポート
現在、ランタイムで登録できるのは http トランスポート(StreamableHTTPClientTransport)のみです。データベースの列挙型には stdio と sse も含まれていますが、追加のトランスポートが提供されるまでは、UI の「トランスポートタイプ」セレクターを意図的に HTTP のみに制限しています。別のタイプを保存しようとすると、McpConnectionManager に対応する実装がないため、バックエンドで拒否されます。
はじめに
前提条件
- Node.js 18 以降
- ローカルで設定済みの AWS 認証情報(またはプロファイルを使用)
- PostgreSQL データベース URL(ローカルまたはリモート)
セットアップ手順
- クローンしてインストール
git clone <repo-url> cd mcp-tester npm install - シークレットを設定
SST を使って必要なシークレットを初期化します:
npx sst secret set DATABASE_URL "postgresql://user:pass@host:5432/mcp_registry" npx sst secret set NEXTAUTH_SECRET "your-random-secret" npx sst secret set EMAIL_API_KEY "your-email-provider-api-key" npx sst secret set EMAIL_FROM "[email protected]" npx sst secret set ENCRYPTION_KEY "your-32-char-encryption-key" - マイグレーションを適用
npm run db:migrate - 開発サーバーを起動
これによりローカル開発環境が起動し、AWS サンドボックスにリンクされます。npx sst dev - ダッシュボードを開く
http://localhost:3000を開き、マジックリンクをリクエストします。メールを確認すると、/dashboard/mcpにリダイレクトされます。
便利なスクリプト
npm run build– Next.js の本番ビルドnpm run db:studio– 設定済みのデータベースに対して Drizzle Studio を起動npm run lint– Next.js のリント処理
主なワークフロー
1. サインインと API キー
/auth/loginにアクセスし、マジックリンクをリクエストします(Nodemailer がEMAIL_SERVER経由で送信します)。- サインイン後、
/dashboard/credentialsを開いてプロバイダーキーを保存します。現在、providersに列挙されているのは OpenAI(openai)と Anthropic(anthropic)のみです。 - キーは PostgreSQL のアクセス制御によって保存時に暗号化されます。
src/services/key-service.tsのサーバーアクションを通じて、キーを読み取り、更新、削除できるのは所有ユーザーだけです。
2. MCP サーバーの登録または編集
/dashboard/mcpには現在のユーザーのサーバーのみが一覧表示され、登録/編集/削除のアクションボタンが表示されます。/dashboard/registerでは、名前、説明、URL、HTTP ヘッダーを指定できます(現時点では、トランスポートタイプは HTTP に固定されます)。/dashboard/edit/[id]では同じフォームを再利用し、/api/mcp-servers/[id]経由でレコードを読み込みます。- レコードは API レイヤーでユーザー ID ごとに分離されているため、細工したリクエストであっても、他のユーザーのサーバーにはアクセスできません。
3. 手動でのツールテスト
- サーバーの Interact をクリックして、
/dashboard/mcp/[id]を読み込みます。 - Connect to MCP Server をクリックします。このページは
/api/mcp-connectを呼び出し、さらにMcpConnectionManager.connectを使ってツールを一覧表示します。 - ツールを選択すると、説明、入力スキーマ、自動生成されたフォームが表示されます。スキーマがない場合は、生の JSON テキストエリアに切り替えることもできます。
- 実行するたびに
/api/mcp-call-toolが呼び出され、結果またはエラーが Recent Calls リストに記録されます。ワンクリックでコピーできるボタンもあります。 - More info を展開するとヘッダーの上書きを編集できます。トークンを一時的に差し替えても、永続的に保存されません。
4. AI チャットランナー
- 接続後、操作モードを Chat に切り替えると、MCP Lab のチャットサイドバーに選択したサーバーのツールが表示されます。
- API キーを持っている LLM プロバイダーとモデルの組み合わせを選択します(モデルは
src/lib/llm.tsで定義されています)。 - メッセージは
/api/chat経由でストリーミングされます。1 回のリクエストにつき、ツールの連鎖は 5 ステップまでに制限されます(stepCountIs(5))。ツール定義は、保存済みのサーバーヘッダーを使ってMcpConnectionManager.callToolを呼び出します。 - チャット UI にはアシスタントとユーザーのすべてのメッセージが表示されます。また、応答の処理中は送信を無効にして、ツールが重複して実行されるのを防ぎます。
5. OAuth 接続フロー
- MCP サーバーが認証(401 応答)を必要とし、Dynamic Client Registration(RFC 7591)に対応している場合、システムは PKCE を使用した OAuth 2.0 Authorization Code フローを開始します。
- アプリケーションを認可するため、プロバイダーのログインページにリダイレクトされます。
- 認可に成功すると、ダッシュボード(
/api/auth/mcp/callback)にリダイレクトされ、アクセストークンが安全に暗号化されて保存されます。 - ダッシュボードは自動的に再接続し(
auto_connect=true)、以降のすべてのリクエストで保存済みのトークンを使用します。
API ルート
GET/POST /api/mcp-servers– 認証済みユーザーの MCP サーバーを一覧表示または作成します。GET/PUT/DELETE /api/mcp-servers/[id]– 単一のサーバーを取得、更新、または削除します(ユーザーごとに認可を適用)。POST /api/mcp-connect– MCP SDK 経由でサーバーに接続し、ツールのメタデータを返します。POST /api/mcp-call-tool– JSON 引数を指定して特定のツールを実行し、生の MCP 結果を返します。GET /api/api-keys– チャット設定 UI に、保存されているプロバイダーキーを公開します。POST /api/chat– 選択した LLM からの応答をストリーミングし、モデルが MCP ツールを呼び出せるようにします。api/auth/[...nextauth]– NextAuth がセッション管理とメール確認リンクを処理します。
技術スタック
- フロントエンド:Next.js 15 + React 19、App Router、Server Components、Tailwind 4(PostCSS 経由)+ shadcn/ui。
- 認証:マジックリンクを使った NextAuth、Drizzle アダプター、デプロイ用 SST シークレット。
- データベース:PostgreSQL 15、Drizzle ORM、Drizzle Kit マイグレーション。
- MCP:
@modelcontextprotocol/sdkの Streamable HTTP クライアント、手動操作とチャットのツール機能。 - LLM SDK:
ai(Vercel AI SDK)、@ai-sdk/openaiおよび@ai-sdk/anthropicのプロバイダー。 - 開発ツール:ESLint 9、TypeScript 5、Turbopack を利用した
next dev。
トラブルシューティング
- メールログイン –
EMAIL_SERVERが有効な Nodemailer 接続文字列であり、localhost が認証ホストとして許可されていること(AUTH_TRUST_HOST/NEXTAUTH_URL)を確認してください。 - データベースエラー –
DATABASE_URLで Postgres に接続でき、マイグレーションが実行されていることを確認してください。Drizzle のエラーには通常、不足しているテーブルが記載されています。 - MCP 接続の失敗 – リモートエンドポイントが Streamable HTTP(
@modelcontextprotocol/sdkサーバートランスポート)に対応していること、および必要な認証ヘッダーが設定されていることを確認してください。CORS ではOPTIONS、POST、GETを許可する必要があります。 - チャットに「API key not found」と表示される –
/dashboard/credentialsで対応するプロバイダーキーを追加してください。チャットエンドポイントは、キーがない場合にモデルの呼び出しを拒否します。 - ツール呼び出しの検証 – スキーマは
@rjsf/validator-ajv8で検証されます。不正な JSON やスキーマ違反は、詳細なエラーとともに「Recent Calls」リストに表示されます。
ロードマップ
- 操作 UI で、ツールと並べて MCP リソースを表示します。
- 追加の LLM プロバイダーと、ツールごとのキー選択に対応します。
- OAuth フローで、事前登録済みの client_id と secret に対応します。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。