Skip to main content
Vaults

MCP OAuth の開始

OAuth 認可フローを開始し、取得した MCP Credential を Vault に保存します。

POST /api/v1/cloud/oauth/start MCP サーバーの OAuth 認可フローを開始します。CAS はサーバーの OAuth metadata を検出し、PKCE を準備して、プロバイダーの認可 URL を返します。プロバイダーから CAS callback にリダイレクトされると、CAS は authorization code を token と交換し、選択した Vault に mcp_oauth Credential を保存します。

ヘッダー

ヘッダー必須説明
AuthorizationはいBearer $QODER_ACCESS_TOKEN
Content-Typeはいapplication/json

リクエストボディ

フィールド必須説明
vault_idstringはいCAS が取得した Credential を保存する active な Vault
mcp_server_urlstringはいOAuth metadata discovery と後続の Credential 照合に使用する MCP server URL
client_idstringいいえ事前登録済みの OAuth client ID。省略すると、authorization server が registration endpoint を公開している場合に CAS が dynamic client registration を使用します
client_secretstringいいえ指定した client_id の secret。confidential client の場合は、この 2 つのフィールドを一緒に指定します
protocolscoperedirect_uri はリクエストフィールドではありません。CAS はサーバー metadata から OAuth endpoint と scope を検出し、常にサービス側で設定された callback URL を使用します。

リクエスト例

curl -X POST https://api.qoder.com/api/v1/cloud/oauth/start \
  -H "Authorization: Bearer $QODER_ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "vault_id": "vault_019e5cdb9c3f71c3b6505eba937a40b4",
    "mcp_server_url": "https://mcp.linear.app/mcp",
    "client_id": "",
    "client_secret": ""
  }'

レスポンス例

HTTP 200 OK
{
  "authorization_url": "https://auth.example.com/authorize?client_id=cloud-agent&code_challenge=...&code_challenge_method=S256&redirect_uri=...&response_type=code&state=...",
  "state": "65eec7b8e79aa61c249d971678cf9201",
  "callback_origin": "https://api.qoder.com"
}
フィールド説明
authorization_urlstringブラウザで開くプロバイダー URL
statestring不透明で短期間有効な OAuth state。popup callback の関連付けにのみ使用します
callback_originstringブラウザ callback message の送信元として想定される origin

認可を完了する

  1. ブラウザウィンドウで authorization_url を開きます。
  2. ユーザーが OAuth プロバイダーでアクセスを承認します。
  3. プロバイダーが CAS の callback URL にリダイレクトします。callback URL はサービス側で設定され、このリクエストでは上書きできません。
  4. CAS が一度限りの state を検証して消費し、code を token と交換して、vault_idmcp_oauth Credential を作成します。
  5. Callback ページが opener に oauth_callback message を送信します。Vault の Credential を一覧表示して、新しい Credential ID を取得することもできます。シークレット値は返されません。
このフローでは PKCE S256 が必要です。client_id が指定されず、プロバイダーが registration endpoint を公開している場合、CAS は public OAuth client を動的に登録します。

ブラウザリダイレクトのショートカット

GET /api/v1/cloud/oauth/authorize は query parameter として vault_idmcp_server_urlclient_id を受け取り、同じフローを開始して HTTP redirect でプロバイダーへ移動します。client secret が必要な場合は POST /oauth/start を使用し、シークレットを URL に含めないでください。

エラー

HTTPTypeトリガー条件
400invalid_request_error必須フィールドの欠落、Vault が非 active、metadata discovery または dynamic registration の失敗、あるいはプロバイダーが必須の PKCE/token authentication 動作をサポートしていない
401authentication_errorPAT または SAT が欠落、無効、あるいは期限切れ
404not_found_errorVault が存在しない、またはアクセスできない
409conflict_errorVault が非 active、または callback による保存時に同じ MCP URL の active Credential がすでに存在する
MCP OAuth の開始 - Qoder