メインコンテンツにスキップ

Cursor、Claude、ChatGPT 向けの MCP OAuth リダイレクト URI: Casdoor での MCP クライアントの登録

· 1分読む
Yang Luo
Casdoor Maintainer

すべての 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​

クライアントリダイレクト URICasdoor からクライアント ID を取得する方法備考
Cursor デスクトップ(現行版)http://localhost:8787/callbackDCR、または mcp.json 内の auth.CLIENT_IDポート 8787 に固定
Cursor Web および Cloud Agentshttps://www.cursor.com/agents/mcp/oauth/callbackDCR、または auth.CLIENT_IDDCR を使用する場合、デスクトップアプリがこの URI と localhost の URI を登録します
Cursor デスクトップ(旧バージョン)cursor://anysphere.cursor-mcp/oauth/callbackDCR、または auth.CLIENT_IDCursor は 2026年7月にループバック URI をデフォルトに変更しました
claude.ai、Claude Desktop コネクタ、Claude モバイル、Coworkhttps://claude.ai/api/mcp/auth_callbackCIMD、次に DCR、またはカスタムコネクタダイアログに入力されたクライアント IDリクエストは Anthropic のサーバーによって行われます
Claude Codehttp://localhost:<port>/callback および http://127.0.0.1:<port>/callbackCIMDポートはセッションごとに変わります
mcp-remote を介した Claude Desktophttp://localhost:<port>/oauth/callbackDCRポートはサーバー URL から導出されます
ChatGPThttps://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 つのアプリケーションを作成してください:

  1. Casdoor 管理コンソールで Identity > Applications に移動し、例えば cursor-mcp などのアプリケーションを追加します。
  2. 表からクライアントのリダイレクト URI を Redirect URLs に追加します。Cursor の場合は、異なるインストールで異なるものが送信されるため、3 つすべてを追加してください。
  3. Category を Agent に設定します。スコープとグラントタイプについては、Set up Casdoor for your MCP server を参照してください。
  4. 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 systemPath
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 用の認可サーバー。

参考文献​