Cursor、Claude、ChatGPT 向けの MCP OAuth リダイレクト URI: Casdoor での MCP クライアントの登録
すべての MCP クライアントは、OAuth で保護された MCP サーバーにサインインする際に独自のリダイレクト URI を送信します。Cursor デスクトップは http://localhost:8787/callback を使用します(2026年中盤以前のリリースでは cursor://anysphere.cursor-mcp/oauth/callback を使用していました)。Cursor Web および Cursor Cloud Agents は https://www.cursor.com/agents/mcp/oauth/callback を使用します。claude.ai、Claude Desktop コネクタ、Claude モバイル、Cowork は https://claude.ai/api/mcp/auth_callback を使用します。また、ChatGPT は https://chatgpt.com/connector_platform_oauth_redirect または接続ごとの https://chatgpt.com/connector/oauth/<callback-id> を使用します。Casdoor で動的クライアント登録を有効にする場合、これらのいずれも入力する必要はありません。クライアントは自ら登録するか、Casdoor にクライアント ID メタデータドキュメントを提供します。これらを Redirect URLs に追加するのは、クライアント用に Casdoor アプリケーションを手動で作成する場合のみです。
クライアント別リダイレクト URI
| クライアント | リダイレクト URI | Casdoor からクライアント ID を取得する方法 | 備考 |
|---|---|---|---|
| Cursor デスクトップ(現行版) | http://localhost:8787/callback | DCR、または mcp.json 内の auth.CLIENT_ID | ポート 8787 に固定 |
| Cursor Web および Cloud Agents | https://www.cursor.com/agents/mcp/oauth/callback | DCR、または auth.CLIENT_ID | DCR を使用する場合、デスクトップアプリがこの URI と localhost の URI を登録します |
| Cursor デスクトップ(旧バージョン) | cursor://anysphere.cursor-mcp/oauth/callback | DCR、または auth.CLIENT_ID | Cursor は 2026年7月にループバック URI をデフォルトに変更しました |
| claude.ai、Claude Desktop コネクタ、Claude モバイル、Cowork | https://claude.ai/api/mcp/auth_callback | CIMD、次に DCR、またはカスタムコネクタダイアログに入力されたクライアント ID | リクエストは Anthropic のサーバーによって行われます |
| Claude Code | http://localhost:<port>/callback および http://127.0.0.1:<port>/callback | CIMD | ポートはセッションごとに変わります |
mcp-remote を介した Claude Desktop | http://localhost:<port>/oauth/callback | DCR | ポートはサーバー URL から導出されます |
| ChatGPT | https://chatgpt.com/connector_platform_oauth_redirect、または https://chatgpt.com/connector/oauth/<callback-id> | CIMD、DCR、または事前定義されたクライアント | ChatGPT から正確な値をコピーしてください |
これらの値は、2026年11月2日時点のベンダーのドキュメントに基づいています(References を参照)。クライアントにより変更される場合があります。サインインが失敗した場合は、ブラウザのアドレスバーにある認可リクエストの redirect_uri パラメーターを確認し、Casdoor に設定されている値と比較してください。
この表は、2つのセットアップに適用されます。1つ目は /api/mcp にある Casdoor 組み込みの MCP サーバー、2つ目は Casdoor を認可サーバーとして使用している ご自身の MCP サーバーです。どちらの場合も、クライアントは保護リソースメタデータ (RFC 9728) を通じて Casdoor を検出し、クライアント ID を取得します。
オプション 1: クライアントによる自己登録を許可する
Casdoor は /api/oauth/register で動的クライアント登録 (RFC 7591) と、クライアント ID メタデータドキュメント (CIMD) をサポートしています。CIMD では、client_id がクライアントのリダイレクト URI をリストした JSON ドキュメントへの HTTPS URL です。組織設定にある Enable dynamic client registration スイッチで両方を制御できます。デフォルトではオフになっており、built-in を含むすべての組織に適用されます。
built-in に対してスイッチをオンにすると、ディスカバリードキュメントにはクライアントが探す内容が表示されます:
curl -s https://your-casdoor.com/.well-known/openid-configuration | jq '{
registration_endpoint,
client_id_metadata_document_supported,
code_challenge_methods_supported,
token_endpoint_auth_methods_supported,
authorization_response_iss_parameter_supported
}'
{
"registration_endpoint": "https://your-casdoor.com/api/oauth/register",
"client_id_metadata_document_supported": true,
"code_challenge_methods_supported": ["S256"],
"token_endpoint_auth_methods_supported": ["client_secret_basic", "client_secret_post", "private_key_jwt", "none"],
"authorization_response_iss_parameter_supported": true
}
各クライアントはその後、方法を選択します:
- Claude は、メタデータに
client_id_metadata_document_supported: trueとtoken_endpoint_auth_methods_supportedの両方にnoneが含まれている場合のみ CIMD を使用します。スイッチをオンにすると Casdoor は両方をサポートするため、Claude はドキュメント URL で自身を識別し、Casdoor はcimd_...という名前のアプリケーションを作成します。それ以外の場合、Claude は DCR にフォールバックします。 - ChatGPT は CIMD を優先し、
client_idとしてhttps://chatgpt.com/oauth/client.json(またはコールバックごとの変種)を使用しますが、CIMD が利用できない場合は DCR を使用します。 - Cursor はシークレットなしの公開クライアントとして DCR を通じて登録します。Cursor のドキュメントには CIMD への言及はありません。
mcp-remoteは DCR を通じて登録します。
リダイレクト URI は登録リクエストまたはメタデータドキュメントから取得されるため、入力する必要はありません。登録されたクライアントは制限付きロールの下で実行され、そのトークンは管理 API を呼び出すことができません。完全なルールと、クライアントが配置される組織については、Dynamic client registration を参照してください。
オプション 2: クライアント用にアプリケーションを作成する
登録をオフのままにする場合、個別に取り消せるようにクライアントごとに 1 つのアプリケーションを作成してください:
- Casdoor 管理コンソールで Identity > Applications に移動し、例えば
cursor-mcpなどのアプリケーションを追加します。 - 表からクライアントのリダイレクト URI を Redirect URLs に追加します。Cursor の場合は、異なるインストールで異なるものが送信されるため、3 つすべてを追加してください。
- Category を
Agentに設定します。スコープとグラントタイプについては、Set up Casdoor for your MCP server を参照してください。 - Client ID をクライアントに渡します。
これらのクライアントにとって、クライアントシークレットはオプションです。リクエストが PKCE を使用した場合、Casdoor はシークレットなしでの認可コード交換を受け入れます。また、Cursor、Claude、ChatGPT はすべて S256 を用いた PKCE を使用します。もしクライアントがシークレットを送信する場合、それは正しいものである必要があります。
クライアント ID の指定先:
-
Cursor:
~/.cursor/mcp.jsonまたは.cursor/mcp.json内のauthオブジェクト。静的なCLIENT_IDを使用する場合、Cursor デスクトップアプリは localhost のリダイレクト URI のみを送信します。{
"mcpServers": {
"casdoor": {
"url": "https://your-casdoor.com/api/mcp",
"auth": {
"CLIENT_ID": "${env:CASDOOR_MCP_CLIENT_ID}",
"scopes": ["application:read", "user:read"]
}
}
}
} -
Claude: カスタムコネクタダイアログ内の OAuth クライアント ID フィールド。
https://claude.ai/api/mcp/auth_callbackを登録します。 -
ChatGPT: ChatGPT は事前定義された OAuth クライアントでも動作します。どの形式が使用されるかは認可サーバーによって異なるため、ChatGPT 内の MCP サーバー管理ページからリダイレクト URI をコピーしてください。
ステップバイステップガイド: Cursor, Claude Desktop, ChatGPT。
Casdoor によるリダイレクト URI のマッチング方法
Casdoor はリクエストの redirect_uri を Redirect URLs の各エントリと比較します:
- スキーム、ホスト、パスは一致する必要があります。クエリ文字列は比較されません。
- ループバックホストを除き、ポートは一致する必要があります。両方の URI が同じループバックホスト (
localhost,127.0.0.1,::1) を使用する場合、ネイティブアプリ向けに RFC 8252 が要求するように、Casdoor はポートを無視します。localhostと127.0.0.1は異なるホストであるため、Claude Code にはhttp://localhost/callbackとhttp://127.0.0.1/callbackの両方が必要です。 - 登録済みホストのサブドメイン上のリダイレクト URI も一致するため、
https://example.com/cbはhttps://app.example.com/cbを受け入れます。可能な限り最も具体的なホストを登録してください。 cursor://などのカスタムスキームも同じルールで一致します。javascript:,data:,vbscript:URI は常に拒否されます。
ループバックポートは無視されるため、セッション間でローカルポートが変更されても、mcp-remote や Claude Code の登録は機能し続けます。
claude_desktop_config.json の場所
MCP ドキュメントにはこれらのパスが記載されています。Claude Desktop では、Settings > Developer > Edit Config でファイルを開き、存在しない場合は作成します。
| Operating system | Path |
|---|---|
| macOS | ~/Library/Application Support/Claude/claude_desktop_config.json |
| Windows | %APPDATA%\Claude\claude_desktop_config.json |
| Linux | ~/.config/Claude/claude_desktop_config.json |
Claude Desktop はリモート MCP サーバーに 2 通りの方法で接続でき、それぞれ異なるリダイレクト URI を使用します:
-
コネクタとして: Claude のコネクタ設定で追加します。OAuth フローは Anthropic のサーバーが実行し、リダイレクト URI は
https://claude.ai/api/mcp/auth_callbackとなるため、Casdoor はインターネットから到達可能である必要があります。 -
claude_desktop_config.jsonを介して:mcp-remoteをローカルブリッジとして使用します。OAuth フローはコンピューター上で実行され、リダイレクト URI はhttp://localhost:<port>/oauth/callbackとなります:{
"mcpServers": {
"casdoor": {
"command": "npx",
"args": ["mcp-remote", "https://your-casdoor.com/api/mcp"]
}
}
}
ファイルを編集した後、Claude Desktop を完全に終了し、再起動してください。
ホスト型クライアントには公開された Casdoor が必要
ChatGPT と Claude コネクタは、あなたのコンピュータではなくベンダーのサーバーから MCP サーバーと Casdoor を呼び出します。Casdoor は有効な証明書を持つ公開 HTTPS で到達可能である必要があります。IP でフィルタリングする場合、Anthropic のリクエストは 160.79.104.0/21 から来ます。Cursor デスクトップ、Claude Code、mcp-remote はフローをローカルで実行するため、ネットワーク上の Casdoor で十分です。
ホスト型クライアントが確認するもう 2 つのことですが、これらは Casdoor によってすでに処理されています:
- レスポンス内の Issuer (RFC 9207): ChatGPT は、正しい
issを含まない認可レスポンスを拒否し、安定したリダイレクト URI は RFC 9207 の要件を満たす認可サーバーでのみ使用します。Casdoor はメタデータでサポートを広告し、リダイレクトにissを追加します。 - リソースインジケーター (RFC 8707): ChatGPT は、認可およびトークンリクエストで MCP サーバー URL とともに
resourceを送信します。Casdoor はその値をアクセストークンのaudクレームに設定し、MCP サーバー側でこれを検証する必要があります。検出フローについては、MCP 認証を参照してください。
www.casdoor.com に関連する記事: AI エージェントのための OAuth および MCP 用の認可サーバー。
参考文献
- Cursor: Model Context Protocol (MCP)、セクション "Static OAuth for remote servers"
- Cursor フォーラム: OAuth リダイレクト URI が cursor:// から http://localhost に変更されました
- Anthropic: コネクタの認証
- Model Context Protocol: ローカル MCP サーバーへの接続
- OpenAI: ユーザーの認証
mcp-remote: README- Casdoor: 動的クライアント登録、MCP サーバー用 Casdoor のセットアップ