MCP with OAuth について
MCP 仕様に沿って OAuth2 で MCP サーバーを保護する方法を示す Spring のサンプルです。トークン認証を検討する開発者向けに、クライアントクレデンシャルとブラウザー経由の PKCE 認可フローを扱います。
主な機能
- 01OAuth2 で保護された MCP サーバー
- 02クライアントクレデンシャルのトークンフロー
- 03PKCE によるブラウザー認可
- 04アクセストークン発行エンドポイント
活用シーン
- 01トークンベースの MCP サーバーアクセスをテスト
- 02クライアントクレデンシャル認可を検証
- 03ブラウザー経由の PKCE 認可を試行
MCP 対応
OAuth2 で保護された MCP サーバーの実装例です。MCP クライアントは発行されたアクセストークンで接続し、MCP Inspector でテストできます。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
ツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
OAuth を使用する MCP
このサンプルでは、MCP 仕様に従って、OAuth2 を使用して MCP サーバーを保護する方法を紹介します。
はじめに
次のコマンドでプロジェクトを実行します。
./mvnw spring-boot:run
クライアントクレデンシャル
/oauth2/token エンドポイントを呼び出してトークンを取得します。
curl -XPOST "http://localhost:8080/oauth2/token" \
--data grant_type=client_credentials \
--user "mcp-client:secret"
# And copy-paste the access token
# Or use JQ:
curl -XPOST "http://localhost:8080/oauth2/token" \
--data grant_type=client_credentials \
--user "mcp-client:secret" | jq -r ".access_token"
ブラウザーフローを使用した認可コード(PKCE)
まず認可エンドポイントを呼び出して認可コードを取得します。
python3 pkce_generator.py
次に、/oauth2/token エンドポイントを呼び出してアクセストークンを取得します。
python3 token_request.py
MCP Inspector の使用
前の手順で生成したトークンを保存し、MCP Inspector を起動します。
npx @modelcontextprotocol/[email protected]
MCP Inspector にトークンを貼り付けます。「Connect」をクリックすれば完了です!
トークンの有効期間は 15 分です。
実装時の考慮事項
依存関係
Spring で MCP サーバーの OAuth2 サポートを追加するには、次のものが必要です。
- Spring Security(セキュリティの基盤)
- Spring Authorization Server(トークンの発行)
- Spring Security: OAuth2 Resource Server( トークンを使用した認証)
Spring Authorization Server はリアクティブスタックをサポートしていないため、トークンの発行は Servlet でのみ動作します。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。