概要
AWSのCognitoとBedrock AgentCore Gatewayを使うと、リモートMCPサーバーを構築できます。このMCPをChatGPTから認証ありで接続しようとしてみましたが、エラーが出て接続できませんでした。
この時に調べたことをまとめます。
2026/9時点の検証内容です。
最初に結論
- 接続できない直接の原因は、CognitoのOIDC Discovery Metadataに
code_challenge_methods_supportedが含まれていないこと - MCPの仕様では、クライアントが認可サーバーのメタデータを自動発見する際、この項目が存在しない場合は認可を続行してはならないと定められている。ChatGPTもこの仕様に準拠している
- 認可サーバーをCognitoからAuth0に変更したところ接続できた
構成
想定していた構成は次のとおりです。
- AgentCore GatewayでリモートMCPを公開する
- Cognito User Poolで認証する
- Cognitoが発行したJWTをAgentCore Gatewayで検証する
- ChatGPTからOAuthで接続する
AgentCore Gatewayの接続先は、Lambdaでも既存のMCP Serverでも何でもOKです。今回は、その手前にあるOAuth Discoveryのプロセスで問題が発生しました。
ChatGPTへのMCP追加時のエラー
ChatGPTでは自前のリモートMCPサーバーを「プラグイン>カスタムMCPサーバーを作成」から追加可能です。ただ、AgentCore Gatewayで構築したMCPを追加しようとしたところ以下のエラーが発生しました。
OAuth authorization server metadata must advertise PKCE support
with code_challenge_methods_supported containing S256.
上記は2026/9時点で取得したスクリーンショットです。2026/10にはこのエラーも表示されず、ただ登録できない挙動になっていました。開発者ツール上は同じエラーが出ていることが確認できました。
CognitoのDiscovery Metadataに欲しいフィールドが無い
調べてみると、AWS re:Postに以下の投稿がありました。
「CognitoのOpenID Connect Configurationからcode_challenge_methods_supportedが欠落している」という趣旨です。
これを理解するために、MCPの認可フローをおさらいします。
MCPにおける認可フロー
MCPのHTTP認可はOAuth 2.1をベースにしています。そのうえで、クライアントが接続先の認可サーバーやエンドポイントをメタデータから自動で発見する仕組みが定められています。大まかな流れは以下の通りです。
- MCPクライアントが、トークンなしでMCPサーバーにリクエストする
- AgentCore Gatewayで構築したMCPサーバーはトークンなしのリクエストに
401 Unauthorizedを返し、WWW-AuthenticateヘッダーでProtected Resource MetadataのURLを返却する - クライアントはProtected Resource Metadataを取得し、
authorization_serversから認可サーバーを特定する - クライアントは認可サーバーのメタデータを取得する。RFC 8414の
/.well-known/oauth-authorization-serverまたは、OIDC Discoveryの/.well-known/openid-configurationを参照する - メタデータからPKCE対応を確認する (今回はここで失敗)
- PKCE付きで認可リクエストを送り、トークンを取得する(クライアント登録は複数方法があるので割愛)
- アクセストークンを付けてMCPサーバーにリクエストする
4のステップについて、Cognitoでも /.well-known/openid-configurationから接続に必要なメタデータを取得できます。構築したユーザープールに対して、curlで以下のリクエストを行うと確認できます。
curl -s \
"https://cognito-idp.${AWS_REGION}.amazonaws.com/${USER_POOL_ID}/.well-known/openid-configuration"
# 実行結果
{
"authorization_endpoint": "https://xxx.auth.ap-northeast-1.amazoncognito.com/oauth2/authorize",
"end_session_endpoint": "https://xxx.auth.ap-northeast-1.amazoncognito.com/logout",
"id_token_signing_alg_values_supported": [
"RS256"
],
...(略)...
ただし、5のステップではMCPのHTTP認可仕様(2025-11-25版)で、以下が定められています。
- MCPクライアントはPKCEを実装し、技術的に可能な場合は
S256を使用しなければならない - MCPクライアントは、認可を開始する前に、Authorization Server MetadataまたはOIDC Discovery MetadataからPKCE対応を確認しなければならない
-
code_challenge_methods_supportedが存在しない場合、クライアントは認可を続行してはならない
つまり、認可サーバーのメタデータに以下の項目が必要です。
"code_challenge_methods_supported": ["S256"]
しかし、Cognitoの /.well-known/openid-configurationから取得できるメタデータにはこの項目がありません。そのため、ChatGPTから見ると「メタデータ上でPKCE対応を確認できない認可サーバー」となり、接続が拒否されたというわけです。
curl -s \
"https://cognito-idp.${AWS_REGION}.amazonaws.com/${USER_POOL_ID}/.well-known/openid-configuration" \
| jq '.code_challenge_methods_supported'
# 実行結果
null
回避策
以下の方法が考えられます。私が試した範囲では、1の方法で回避できました。
1. Cognitoを使わない
元も子もないですが、別の認可サーバーを利用します。
Auth0を利用したところ、いくつかハマりどころはありましたが無事接続できました。(手順は長くなるので割愛)
2. クライアント側で認可サーバーを手動指定する
クライアントがOAuthクライアントや認可サーバーの情報を手動で設定できる場合、メタデータの自動発見を経由せずに接続できる場合があります。AWSのブログでは、Bedrock利用のClaude DesktopからCognito構成のAgentCore Gatewayに接続する手順が紹介されています。
ただ、2026/9に検証していた時点では、Claude (claude.aiのカスタムコネクタ) から接続しても、ChatGPT同様にエラーとなりました。Claude Desktopから利用した場合や、2026/10になり状況が変わったのか、その他手順が異なるのかまでは未検証です。
まとめ
ChatGPTなどMCP仕様に準拠したクライアントからOAuth認可付きのリモートMCPサーバーを使う場合、 code_challenge_methods_supported のメタデータを公開する認可サーバーを選ぶのが確実です。
なお、code_challenge_methods_supportedの存在確認は、MCPがクライアントに課している仕様です。CognitoはOAuth 2.0/OIDCの認可サーバーとして提供されており、MCP仕様への準拠を表明しているわけではありません。また、この項目はRFC 8414上は任意です。つまり、CognitoがMCPの要件を満たしていないというだけです。
ただ、AgentCore GatewayはMCP向けのサービスであり、その認可の連携先としてCognitoがUIでも推奨されています。加えて、RFC 9700でもメタデータでのPKCE対応の公開が推奨されています。こうした点を考えると、Cognitoにもメタデータへのcode_challenge_methods_supportedの追加に対応してほしいところです。

