View a markdown version of this page

MCP プロトコル契約 - Amazon Bedrock AgentCore

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

MCP プロトコル契約

エージェントがツールとエージェントサーバーを呼び出すことができるように、モデルコンテキストプロトコル (MCP) を実装するための要件を理解します。

コード例については、AgentCore ランタイムで MCP サーバーをデプロイする」を参照してください。

プロトコル実装要件

MCP サーバーは、以下の特定のプロトコル要件を実装する必要があります。

  • トランスポート: Streamable-http トランスポートが必要です。デフォルトでは、ステートレスモード () stateless_http=True を使用して、 AWSのセッション管理とロードバランシングとの互換性を確保します。

  • セッション管理: プラットフォームはセッション分離のMcp-Session-Idヘッダーを自動的に追加します。ステートレスモードでは、プラットフォームで生成されたMcp-Session-Idヘッダーを拒否しないように、サーバーはステートレスオペレーションをサポートする必要があります。

ヒント

Amazon Bedrock AgentCore は、誘発 (マルチターンユーザーインタラクション) stateless_http=False やサンプリング (LLM 生成コンテンツ) などの機能を有効にするステートフル MCP サーバー () もサポートしています。MCP プロトコルバージョン 2025-11-25以前では、サーバーがオープンセッションでこれらのリクエストを配信するため、誘発とサンプリングにはステートフルモードが必要です。バージョン 2026-07-28以降では、誘発とサンプリングはマルチラウンドトリップリクエスト (MRTR) パターンを使用します。これはステートフルモードを必要としません。MRTR の詳細については、Model Context Protocol ドキュメントの「マルチラウンドトリップリクエスト」を参照してください。

ステートフルモードは、複数のリクエストにわたって MCP セッション内で状態を保持します。ステートレス MCP サーバーは、データベースなど、アプリケーションが管理するバッキングストアに状態を保持します。明示的な状態ハンドルを使用して、その状態を参照します。サーバーはツールの結果に状態識別子を返し、クライアントは後でキーを に呼び出すときにそれをストアに返します。明示的な状態ハンドルの詳細については、Model Context Protocol ドキュメントの「明示的な状態ハンドル」を参照してください。ステートフル MCP サーバーの詳細については、「ステートフル MCP サーバー機能」を参照してください。

MCP セッション管理と microVM の維持

Model Context Protocol (MCP) は、 Mcp-Session-Idヘッダーを使用してセッション状態とルートリクエストを管理します。MCP の仕様については、「MCP Streamable HTTP Transport」を参照してください。

MicroVM の永続性: Amazon Bedrock AgentCore は Mcp-Session-Idヘッダーを使用して、リクエストを同じ microVM インスタンスにルーティングします。クライアントは、レスポンスでMcp-Session-Id返された をキャプチャし、以降のすべてのリクエストに含めて、セッションのアフィニティを確保する必要があります。一貫したセッション ID がないと、各リクエストが新しいmicroVM にルーティングされ、コールドスタートによるレイテンシーが増加する可能性があります。

ステートレス MCP ( stateless_http=True ):

  • プラットフォームは を生成Mcp-Session-Idし、それを MCP サーバーへのリクエストに含めます。

  • MCP サーバーは、プラットフォームが提供するセッション ID を受け入れる必要があります (拒否しないでください)。

  • プラットフォームは、レスポンスで同じ をクライアントMcp-Session-Idに返します。

  • クライアントは、microVM アフィニティの後続のすべてのリクエストにこのセッション ID を含める必要があります。

ステートフル MCP ( stateless_http=False ):

  • クライアントは、 Mcp-Session-Idヘッダーなしで初期化リクエストを送信します。

  • プラットフォームはレスポンスMcp-Session-Idで を返します。

  • クライアントは、セッション状態とmicroVM アフィニティの両方の後続のすべてのリクエストMcp-Session-Idにこれを含める必要があります。

ステートフル MCP セッション管理の詳細については、「MCP セッション管理仕様」を参照してください。

注記

どちらのモードでも、Amazon Bedrock AgentCore は常にクライアントに Mcp-Session-Idヘッダーを返します。最適なパフォーマンスを得るには、常にこのヘッダーをキャプチャして再利用してください。

コンテナの要件

MCP サーバーは、以下の仕様を満たすコンテナ化されたアプリケーションとしてデプロイする必要があります。

  • ホスト: 0.0.0.0

  • ポート : 8000 - MCP サーバー通信の標準ポート (HTTP プロトコルとは異なります)

  • プラットフォーム : ARM64 コンテナ - AWS Amazon Bedrock AgentCore ランタイム環境との互換性のために必要です

パスの要件

/mcp - POST

目的

MCP RPC メッセージを受信し、エージェントのツール機能を通じて処理します。標準の MCP RPC メッセージを使用して InvokeAgentRuntime API ペイロードを完全にパススルーします。

レスポンスの形式

JSON-RPC ベースのリクエスト/レスポンス形式。 application/jsonと の両方をレスポンスコンテンツタイプtext/event-streamとしてサポート

ユースケース

/mcp エンドポイントには、いくつかの重要な目的があります。

  • ツールの呼び出しと管理

  • エージェント機能検出

  • リソースのアクセスと操作

  • マルチステップエージェントワークフロー

エラー処理

MCP サーバーは、標準の JSON-RPC 2.0 エラーレスポンスとしてエラーを返します。ほとんどのエラーは、MCP 仕様の要求に従って、HTTP 200 ステータスコードを持つ JSON-RPC error オブジェクトで実行されます。認証、認可、プロトコルレベルのリクエストエラーのみが、200 以外の HTTP ステータスコードを使用します。次の表は、各ランタイム例外を JSON-RPC エラーコード、HTTP ステータスコード、およびメッセージにマッピングしています。一部の例外は JSON-RPC エラーコードを共有しますが、異なるメッセージを返すため、別々の行としてリストされます。

JSON-RPC エラーコード ランタイム例外 HTTP エラーコード エラーメッセージ

-32001

UnauthorizedException

401

認証エラー - 無効な認証情報

-32002

AccessDeniedException

403

認可エラー - アクセス許可が不十分

-32003

ThrottlingException

200

レート制限を超えました - リクエストが多すぎます

-32003

ServiceQuotaExceededException

200

レート制限を超えました - リクエストが多すぎます

-32004

ResourceNotFoundException

200

リソースが見つかりません - リクエストされたリソースは存在しません

-32005

ConflictException

200

リソースの競合 - リソースが既に存在します

-32005

RetryableConflictException

200

セッションオペレーションが進行中です。再試行してください

-32006

ValidationException

200

検証エラー - 無効なリクエストデータ

-32010

RuntimeClientError

200

ツール実行エラー - 詳細については、CloudWatch ログを確認してください

-32011

McpRequestUnacceptableException

406

Accept Header エラー - MCP プロトコルには Accept ヘッダーが必要です: application/json、text/event-stream

-32603

その他の例外

200

内部エラー - サーバーエラー

ConflictException と RetryableConflictExceptionはどちらも JSON-RPC エラーコード -32005 (HTTP 200) を使用しますが、メッセージによって区別されます。サービスがそのセッションをプロビジョニングまたは破棄している間に 2 番目のオペレーションがセッションをターゲットにすると、サービスは RetryableConflictException (Session operation in progress, please retry) を返します。MCP は JSON-RPC 本文のエラーで HTTP 200 を返すため、発信者はレスポンス本文を検査し、短いエクスポネンシャルバックオフで再試行する必要があります。MCP クライアントはそれを自動再試行しません。

エラー応答のサンプル:

{ "jsonrpc": "2.0", "id": "req-001", "error": { "code": -32005, "message": "Session operation in progress, please retry" } }

OAuth 認証レスポンス

OAuth 設定のエージェントは、RFC 6749 (OAuth 2.0) 認証標準に従います。認証がない場合、サービスは WWW-Authenticate ヘッダー (RFC 7235 ごと) を含む 401 Unauthorized レスポンスを返します。これにより、クライアントは GetRuntimeProtectedResourceMetadata API を通じて認可サーバーエンドポイントを検出できます。

401 Unauthorized

認可ヘッダーが欠落しているか空の場合に返されます。

レスポンスには WWW-Authenticate ヘッダーが含まれます。

WWW-Authenticate: Bearer resource_metadata="https://bedrock-agentcore.{region}.amazonaws.com/runtimes/{ESCAPED_ARN}/invocations/.well-known/oauth-protected-resource?qualifier={QUALIFIER}"
注記

SigV4-configuredのエージェントはACCESS_DENIEDエラーで HTTP 403 を返し、WWW-Authenticateヘッダーは含まれません。