For the complete documentation index, see llms.txt. Markdown versions of documentation pages are available by appending .md to the page URL.
メインナビゲーション
Theme

ボールト

MCP 接続やサンドボックスからのリクエストに使うシークレットを保存します。

ボールトには、エージェントの指示や設定とは別に認証情報を保存できます。vault_ids でボールトをセッションに関連付けると、そのセッションで認証情報を使用できます。

リクエストの送信元に応じて、認証情報の種類を選びます。

リクエスト 認証情報の種類 セッションでの認証情報の使い方
OpenAI からの MCP 接続 static_bearer または mcp_oauth OpenAI が、設定された MCP サーバーに接続する際の認証に使用します。
OpenAI がホストするサンドボックスからの API リクエスト environment_variable コードは、プレースホルダーが入った環境変数を使用します。送信先が許可されたホストであれば、ネットワークプロキシがプレースホルダーをシークレットに置き換えます。

たとえば、サンドボックスからボールトのシークレットを使って GitHub REST API を呼び出せます。サンドボックスからの API リクエストでのボールトのシークレットの使用の手順に従ってください。

ボールトや認証情報を取得しても、シークレットの値は返されません。その他の MCP 接続については、MCP の認証オプションを参照してください。

権限

権限を制限したアプリケーションキーには、次の権限を付与します。

  • api.vaults.read:ボールトと認証情報の一覧表示および取得
  • api.vaults.write:ボールトと認証情報の作成、更新、削除

MCP のシークレットを保存するボールトの作成と使用

API クライアント、MCP サーバーの URL(mcp_url)、そのサーバーのアクセストークン(access_token)を用意します。以下の例では GitHub のツールを使用します。

まず、ボールトを作成します。

ボールトの作成
const vault = await client.beta.agents.vaults.create({
  name: "GitHub credentials",
  metadata: {
    external_user_id: "user_123",
  },
});

ボールトの ID を vault_id として保存し、トークンを追加します。mcp_server_url で認証情報をそのサーバーに関連付けます。

Bearer トークンの保存
// Replace the illustrative IDs and URLs below with your own resource values.
const vaultId = "vault_123";
const mcpUrl = "https://api.githubcopilot.com/mcp/";
const accessToken = process.env.GITHUB_TOKEN;

const credential = await client.beta.agents.vaults.credentials.create(vaultId, {
  name: "GitHub access token",
  auth: {
    type: "static_bearer",
    mcp_server_url: mcpUrl,
    token: accessToken,
  },
});

後で更新できるように、認証情報の ID を credential_id として保存します。

セッションを作成するときに、保存したボールトの ID を vault_ids に指定します。MCP の設定には同じサーバー URL を指定してください。

セッションへのボールトの関連付け
// Replace the illustrative IDs and URLs below with your own resource values.
const mcpUrl = "https://api.githubcopilot.com/mcp/";
const vaultId = "vault_123";

const session = await client.beta.agents.sessions.create({
  agent: {
    model: "gpt-6-astra",
    tools: [
      {
        type: "mcp",
        server_label: "github",
        transport: {
          type: "http",
          server_url: mcpUrl,
        },
        allowed_tools: ["search_issues", "issue_read"],
        required: true,
        connection_origin: "service",
      },
    ],
  },
  environment: {
    type: "none",
  },
  input: "Find open bugs reported in the last week.",
  vault_ids: [vaultId],
});

Agents API は、サーバー URL に一致する認証情報を選択します。セッションに関連付けた認証情報のうち複数が一致する場合は、MCP ツールの credential_id で使用する認証情報を指定します。

サンドボックスからの API リクエストでのボールトのシークレットの使用

OpenAI がホストするサンドボックスからの API リクエストには、environment_variable 型の認証情報を使ってシークレットを渡します。サンドボックスでは、指定した名前の環境変数にプレースホルダーが入ります。実際のシークレットはサンドボックスの外部に保持されます。

この手順には openai_hosted 環境が必要です。セルフホスト環境や、アプリケーション側で実行する関数ツールには、この方法で認証情報を渡すことはできません。

API トークンの保存

上記の手順でボールトを作成します。次に、以下のフィールドを含む認証情報の作成リクエストを POST /v1/vaults/{vault_id}/credentials に送信します。

フィールド GitHub API トークンを使用する場合の値
name GitHub API token
auth.type environment_variable
auth.secret_name GITHUB_TOKEN
auth.secret_value アプリケーションでシークレットを格納した環境変数から読み取ったトークン。
auth.networking.type limited
auth.networking.allowed_hosts ["api.github.com"]

secret_name は、サンドボックス内のコードが読み取る環境変数の名前です。secret_value は実際の認証情報です。この値をプロンプト、ソースファイル、ログに含めないでください。

allowed_hosts には正確なホスト名を指定し、スキーム、パス、ポート、ワイルドカードは含めないでください。プロキシがシークレットを渡すのは、ポート 443 または 8443 を使用する HTTPS の送信先に限られます。

ホスト型セッションへのボールトの関連付け

agent とともに以下のフィールドを指定してセッションを作成します。vault_123 は、API が返したボールトの ID に置き換えてください。

{
  "vault_ids": ["vault_123"],
  "environment": {
    "type": "openai_hosted",
    "network": {
      "access": "restricted",
      "allowed_domains": ["api.github.com"]
    }
  }
}

2 つのホストリストは、それぞれ異なる権限を制御します。allowed_domains はサンドボックスからホストへの接続を許可します。認証情報の allowed_hosts は、プロキシがそのホストにシークレットを渡すことを許可します。

ネットワークアクセスを制限する場合は、認証情報の使用を許可したすべてのホストを allowed_domains に含めてください。環境変数型の認証情報を使用するセッションでは、network.access を disabled に設定しないでください。

セッションに関連付ける環境変数型の認証情報には、それぞれ異なる secret_name を指定する必要があります。environment.env で同じ名前を定義しないでください。

サンドボックスからの API の呼び出し

エージェントにメッセージを送信し、サンドボックスで次のコマンドを実行するように依頼します。

curl https://api.github.com/user \
  -H "Authorization: Bearer $GITHUB_TOKEN"

このコマンドは GITHUB_TOKEN からプレースホルダーを読み取ります。プロキシは、プレースホルダーを実際のトークンに置き換えてから api.github.com にリクエストを送信します。リクエストが成功すると、認証された GitHub ユーザーのアカウント情報が JSON で返されます。サンドボックス内で環境変数の値を出力しても、表示されるのはプレースホルダーだけです。

HTTPS リクエストのヘッダーには、プレースホルダーを変更せずに渡してください。リクエストへの署名など、ローカルでの処理に必要なシークレットは、プレースホルダーから取得できません。そのような処理では認証情報をアプリケーション側で保持し、関数ツールを通じて処理を呼び出せるようにしてください。

OAuth 認証情報の使用

プロバイダーの認可と同意のフローはアプリケーション側で処理します。このフローで取得した認可グラントは、auth.type: "mcp_oauth" を指定して保存します。アクセストークンの有効期限がわかっている場合は、expires_at に RFC 3339 形式のタイムスタンプで指定します。

以下の例では、プロバイダーの OAuth フローで取得した値を使用します。Agents API がトークンを更新できるようにするには、refresh を含めます。

OAuth 認可グラントの保存
// Replace the illustrative expiry with your access token's actual expiry.
// Replace the illustrative IDs and URLs below with your own resource values.
const vaultId = "vault_123";
const mcpUrl = "https://mcp.example.com/mcp";
const accessToken = process.env.OAUTH_ACCESS_TOKEN;
const expiresAt = "2030-01-01T00:00:00Z";
const tokenEndpoint = "https://auth.example.com/oauth/token";
const clientId = "example-client-id";
const refreshToken = process.env.OAUTH_REFRESH_TOKEN;

const credential = await client.beta.agents.vaults.credentials.create(vaultId, {
  name: "Example MCP OAuth credential",
  auth: {
    type: "mcp_oauth",
    mcp_server_url: mcpUrl,
    access_token: accessToken,
    expires_at: expiresAt,
    refresh: {
      token_endpoint: tokenEndpoint,
      client_id: clientId,
      refresh_token: refreshToken,
      token_endpoint_auth: {
        type: "none",
      },
    },
  },
});

トークンエンドポイントでは、プロバイダーが要求する認証方式を使用してください。この例では none を使用しています。client_secret_basic と client_secret_post にも対応しています。各フィールドについては、認証情報の作成に関するリファレンスを参照してください。

期限切れのトークンを更新できない場合は、代わりに有効なトークンを指定してください。トークンの有効期限が切れても、認証情報やそのボールトは削除されません。

認証情報のローテーションと削除

認証情報を更新すると、ID や認証方式を変更せずにシークレットを差し替えられます。MCP の認証情報では、サーバー URL も変わりません。OAuth の場合は、保存した vault_id と credential_id に加え、新しいトークンとその有効期限を指定します。

OAuth トークンのローテーション
// Replace the illustrative expiry with your access token's actual expiry.
// Replace the illustrative IDs and URLs below with your own resource values.
const credentialId = "cred_123";
const vaultId = "vault_123";
const accessToken = process.env.OAUTH_ACCESS_TOKEN;
const expiresAt = "2030-01-01T00:00:00Z";

const credential = await client.beta.agents.vaults.credentials.update(
  credentialId,
  {
    vault_id: vaultId,
    ...{
      auth: {
        type: "mcp_oauth",
        access_token: accessToken,
        expires_at: expiresAt,
      },
    },
  }
);

新しいトークンに有効期限がある場合は、expires_at を含めてください。有効期限を指定せずに新しいアクセストークンを渡すと、保存されていた有効期限は消去されます。明示的に null を指定した場合も同様です。

環境変数型の認証情報の場合は、auth.type: "environment_variable" と新しい auth.secret_value を POST /v1/vaults/{vault_id}/credentials/{credential_id} に送信します。差し替えた認証情報を使用するには、新しいセッションを作成してください。ボールトを更新しても、既存のサンドボックスに設定済みの認証情報は変わりません。

secret_name または networking を変更するには、新しい認証情報を作成してください。

認証情報が不要になったら、その認証情報を削除してください。ボールトを削除すると、ボールトとそこに保存されているすべての認証情報が削除されます。

保存した認証情報を削除しても、プロバイダーが発行した元のトークンは失効せず、実行中のセッションも停止しません。プロバイダー側でのトークンの失効処理とセッションのキャンセルは、アプリケーション側で行います。