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_id | string | はい | CAS が取得した Credential を保存する active な Vault |
mcp_server_url | string | はい | OAuth metadata discovery と後続の Credential 照合に使用する MCP server URL |
client_id | string | いいえ | 事前登録済みの OAuth client ID。省略すると、authorization server が registration endpoint を公開している場合に CAS が dynamic client registration を使用します |
client_secret | string | いいえ | 指定した client_id の secret。confidential client の場合は、この 2 つのフィールドを一緒に指定します |
protocol、scope、redirect_uri はリクエストフィールドではありません。CAS はサーバー metadata から OAuth endpoint と scope を検出し、常にサービス側で設定された callback URL を使用します。
リクエスト例
レスポンス例
HTTP 200 OK
| フィールド | 型 | 説明 |
|---|---|---|
authorization_url | string | ブラウザで開くプロバイダー URL |
state | string | 不透明で短期間有効な OAuth state。popup callback の関連付けにのみ使用します |
callback_origin | string | ブラウザ callback message の送信元として想定される origin |
認可を完了する
- ブラウザウィンドウで
authorization_urlを開きます。 - ユーザーが OAuth プロバイダーでアクセスを承認します。
- プロバイダーが CAS の callback URL にリダイレクトします。callback URL はサービス側で設定され、このリクエストでは上書きできません。
- CAS が一度限りの state を検証して消費し、code を token と交換して、
vault_idにmcp_oauthCredential を作成します。 - Callback ページが opener に
oauth_callbackmessage を送信します。Vault の Credential を一覧表示して、新しい Credential ID を取得することもできます。シークレット値は返されません。
S256 が必要です。client_id が指定されず、プロバイダーが registration endpoint を公開している場合、CAS は public OAuth client を動的に登録します。
ブラウザリダイレクトのショートカット
GET /api/v1/cloud/oauth/authorize は query parameter として vault_id、mcp_server_url、client_id を受け取り、同じフローを開始して HTTP redirect でプロバイダーへ移動します。client secret が必要な場合は POST /oauth/start を使用し、シークレットを URL に含めないでください。
エラー
| HTTP | Type | トリガー条件 |
|---|---|---|
| 400 | invalid_request_error | 必須フィールドの欠落、Vault が非 active、metadata discovery または dynamic registration の失敗、あるいはプロバイダーが必須の PKCE/token authentication 動作をサポートしていない |
| 401 | authentication_error | PAT または SAT が欠落、無効、あるいは期限切れ |
| 404 | not_found_error | Vault が存在しない、またはアクセスできない |
| 409 | conflict_error | Vault が非 active、または callback による保存時に同じ MCP URL の active Credential がすでに存在する |