日本語

Model Context Protocol

Model Context Protocol

Codex にサードパーティ製ツールとコンテキストへのアクセスを許可します

Model Context Protocol (MCP) は、モデルをツールやコンテキストに接続します。これを使用すると、 ChatGPT や Codex にサードパーティのドキュメントへのアクセスを許可したり、ブラウザーや Figma などの開発者ツールを操作させたりできます。

ChatGPT Web では、プラグインが提供するリモート MCP ベースのツールを使用できます。プラグインをインストールすると、Chat と Work で、同梱されているコネクターとリモート MCP ツールを使用できます。利用可能なツールを閲覧および管理するには、Plugins タブを開きます。ローカルの Codex クライアントは、MCP サーバーに直接接続し、その設定を共有することもできます。

ChatGPT デスクトップアプリ、Codex CLI、IDE 拡張機能は MCP servers をサポートし、同じ Codex ホストの MCP 設定を共有します。

以下の対応サーバー機能は、Codex ホストに設定された MCP servers に適用されます。ホストされているプラグインツールでは、利用できる機能が異なる場合があります。

対応している MCP 機能

  • STDIO サーバー: ローカルプロセスとして(コマンドによって起動されて)実行されるサーバーです。
    • 環境変数
  • Streamable HTTP サーバー: アドレスを指定してアクセスするサーバーです。
    • Bearer トークン認証
    • Client ID Metadata Documents (CIMD) と Dynamic Client Registration (DCR) を含む OAuth 認証
    • 信頼済みのファーストパーティサーバー向け ChatGPT セッション認証
  • サーバー指示: Codex は初期化時に返された MCP の instructions フィールドを読み取り、サーバーのツールとともにサーバー全体のガイダンスとして使用します。

Codex 用の MCP server を構築または保守する場合は、サーバー全体に適用されるツール横断ワークフロー、制約、レート制限を instructions に記述してください。Codex がサーバーの使用方法を判断する際に最も重要なガイダンスを利用できるよう、先頭の 512 文字だけで内容が完結するようにしてください。

Codex を MCP server に接続する

Codex は、ほかの Codex 設定とともに MCP 設定を config.toml に保存します。デフォルトでは ~/.codex/config.toml ですが、.codex/config.toml を使用して MCP servers をプロジェクト単位に限定することもできます(信頼済みプロジェクトのみ)。

ChatGPT デスクトップアプリ、Codex CLI、IDE 拡張機能はこの設定を共有します。 MCP servers を一度設定すれば、再設定せずにこれらのクライアントを切り替えられます。

ChatGPT デスクトップアプリで設定する

  1. Settings を開き、MCP servers を選択します。
  2. Add server を選択します。
  3. 名前を入力し、STDIO または Streamable HTTP を選択して、サーバーのコマンドまたは URL を指定します。
  4. サーバーを保存し、Restart を選択します。

サーバー一覧には、有効になっているサーバーと OAuth が必要なサーバーが表示されます。OAuth server へのサインインが必要な場合は、 Authenticate を選択します。コンポーザーで /mcp と入力すると、接続済みサーバーを確認できます。

config.toml で設定する

より細かく制御するには、~/.codex/config.toml またはプロジェクト単位の .codex/config.toml を編集します。対応しているすべての MCP オプションを検索できる一覧については、設定リファレンス を参照してください。

設定ファイル内の [mcp_servers.<server-name>] テーブルで各 MCP server を設定します。

STDIO servers

  • command(必須):サーバーを起動するコマンドです。
  • args(任意):サーバーに渡す引数です。
  • env(任意):サーバーに設定する環境変数です。
  • env_vars(任意):許可して転送する環境変数です。
  • cwd(任意):サーバーを起動する作業ディレクトリです。
  • experimental_environment(任意):リモート実行環境を利用できる場合に、その環境を介して stdio server を起動するには remote に設定します。

env_vars には、単純な変数名またはソースを指定したオブジェクトを含められます。

env_vars = ["LOCAL_TOKEN", { name = "REMOTE_TOKEN", source = "remote" }]

文字列の項目と source = "local" は、Codex のローカル環境から読み取られます。 source = "remote" はリモート実行環境から読み取られ、リモート MCP stdio が必要です。

Streamable HTTP servers

  • url(必須):サーバーのアドレスです。
  • auth(任意):設定済みの Bearer トークンと認証ヘッダーの後に試行する認証方式です。保存済みの MCP OAuth 認証情報には oauth(デフォルト)を使用します。信頼されたファーストパーティの ChatGPT オリジンで現在の ChatGPT セッションを使用し、保存済み OAuth をフォールバックにするには chatgpt を使用します。
  • bearer_token_env_var(任意):Authorization で送信する Bearer トークンの環境変数名です。
  • http_headers(任意):ヘッダー名から静的な値へのマップです。
  • env_http_headers(任意):ヘッダー名から環境変数名へのマップです(値は環境から取得されます)。
  • http_headers_helper(任意):ヘッダー名と文字列値で構成される JSON オブジェクト(例:{"X-Auth": "temporary-token"})を出力するローカルコマンドです。ローカル環境から接続する HTTP MCP server でのみサポートされ、stdio server やリモート実行環境経由の接続ではサポートされません。

Codex は接続中、ヘルパーが返したヘッダーをキャッシュします。同一オリジンへの POST が 401 または 403 を返すと、ヘッダーを一度更新し、ヘルパーが異なる値を返した場合にのみ再試行します。明示的な Bearer トークンと OAuth 認証情報は、ヘルパーが返す Authorization ヘッダーより優先されます。スコープ不足を示す OAuth の 403 レスポンスでは、ヘルパーは更新されません。

認証情報の取得元を解決できない場合、Codex は認証なしでサーバーに接続できます。MCP OAuth ログインを開始するには、別途 codex mcp login <server-name> を実行します。

その他の設定オプション

  • startup_timeout_sec(任意):サーバー起動のタイムアウト(秒)です。デフォルト:10
  • tool_timeout_sec(任意):サーバーがツールを実行する際のタイムアウト(秒)です。デフォルト:60
  • enabled(任意):サーバーを削除せずに無効化するには false に設定します。
  • required(任意):有効なサーバーを初期化できない場合に起動を失敗させるには true に設定します。
  • enabled_tools(任意):ツールの許可リストです。
  • disabled_tools(任意):ツールの拒否リストです(enabled_tools の後に適用されます)。
  • default_tools_approval_mode(任意):このサーバーのツールに対するデフォルトの承認動作です。対応する値は autopromptwritesapprove です。writes モードでは、読み取り専用としてマークされていないツールについて確認を求めます。
  • tools.<tool>.approval_mode(任意):ツール単位で承認動作を上書きします。
  • tools.<tool>.output_token_limit(任意):標準の 20% のシリアライズ用余裕を適用する前の、1 回のツール出力に対する正のトークン予算です。そのツールに対するモデルのデフォルトの出力切り詰め予算を上書きします。

最上位の mcp_optional_startup_grace_ms 設定は、初期ツールカタログの構築時に Codex がオプションの MCP server を待つ時間を制御します。デフォルトは 1000 ミリ秒です。各 MCP server の startup_timeout_sec まで待つには 0 に設定します。必須の MCP server では、引き続き個別の起動タイムアウトが使用されます。

OAuth クライアントの登録とコールバック

認可サーバーで事前登録済みの OAuth クライアントが必要な場合は、MCP サーバーを 追加するときに、そのクライアント ID を指定します。

codex mcp add example --url https://mcp.example.com --oauth-client-id my-client

Codex は、プロバイダーに登録する完全なコールバック URL を表示します。

OAuth callback URL: http://127.0.0.1/callback

Codex は、後でログインするときのために、クライアント ID とともにコールバックを config.toml に 保存します。

[mcp_servers.example]
url = "https://mcp.example.com"

[mcp_servers.example.oauth]
client_id = "my-client"
callback_url = "http://127.0.0.1/callback"

新しく追加された事前登録済みクライアントが固定のコールバックを使用するのは、 認可サーバーが authorization_response_iss_parameter_supported: true を通知し、メタデータの issuer を提供する場合に限られます。issuer のサポートが通知されていない場合、Codex は http://127.0.0.1/callback/XuuuHAzzHOni のようなサーバー固有のコールバック ID を追加します。保存済みのコールバックがない既存のクライアントは、 引き続きコールバック ID 固有のリダイレクトを使用します。

ログイン時に使用するコールバックは、OAuth 設定と 認可サーバーのメタデータによって決まります。

OAuth 設定 Issuer のサポート 使用されるコールバック
callback_url があり、client_id がない サポートあり 設定されたコールバックがクライアント登録に使用されます。
callback_url があり、client_id がない サポートなし 設定されたコールバックにサーバー固有のコールバック ID を追加したものが、クライアント登録に使用されます。
client_idcallback_url がある サポートあり 設定されたコールバックが再利用されます。認可レスポンスには、一致する iss が含まれている必要があります。
client_id があり、callback_url の末尾が正しいコールバック ID である サポートなし 設定されたコールバックが変更されずに再利用されます。
client_id があり、callback_url に正しいコールバック ID がない サポートなし 設定されたコールバックは無視されます。Codex は mcp_oauth_callback_url を使用します。未設定の場合は、http://127.0.0.1/callback にコールバック ID を追加して使用します。
client_id があり、設定済みの callback_url がない サポートの有無を問わない Codex は、グローバルまたはデフォルトのコールバックにサーバー固有のコールバック ID を追加して使用します。

フォールバックによって、保存されているコールバック URL が変更されることはありません。Codex は、パスとクエリ文字列を含む MCP サーバー URL からコールバック ID を生成します。自動ログインと 明示的なログインには、同じ選択ルールが適用されます。

カスタムのコールバックパスまたはリモートの Devbox ingress URL が必要な場合は、mcp_oauth_callback_url を設定します。新しく追加された事前登録済みクライアントでは、 プロバイダーが issuer の識別をサポートしている場合、この URL が変更されずに使用されます。それ以外の場合は、 設定された URL にサーバー固有のコールバック ID を追加して使用します。必ず、 codex mcp add に表示された正確なコールバックを登録してください。

ポートを指定していない http://127.0.0.1 コールバックの場合、Codex は表示および保存する URL から リスナーポートを省略し、認可時にアクティブなリスナーポートを 挿入します。この置換は、localhost、IPv6 ホスト、 HTTPS URL、またはすでにポートが含まれているコールバックには適用されません。認可サーバーは、 RFC 8252、セクション 7.3 に従い、可変のループバックポートを受け入れる必要があります。

固定のグローバルリスナーポートを選択するには mcp_oauth_callback_port を設定し、特定のサーバーのみで上書きするには mcp_servers.<server-name>.oauth.callback_port を設定します。 コールバック URL に明示的なポートを指定しても、リスナーは設定されません。直接接続する ループバックコールバックでは、ポートを指定しない http://127.0.0.1 を使用するか、コールバック URL とリスナーの両方に 同じポートを明示的に設定します。プロキシ経由のコールバックでは、 ローカルリスナーのポートとは異なる外部 URL のポートを意図的に使用できます。 ローカルのコールバック URL はローカルインターフェースにバインドされ、ローカルでないコールバック URL は 0.0.0.0 にバインドされます。

Codex は、認可コードを交換する前に、返された iss を検証します。 iss が一致しない場合、レスポンスは必ず拒否されます。issuer のサポートが通知されている場合、 iss がない場合も拒否されます。どちらの失敗時にも、コードの交換や 別のコールバックへのフォールバックは行われません。不正な形式のコールバック URL や、メタデータの issuer がないにもかかわらず issuer のサポートが通知されている場合も、 回復不能なエラーとなります。詳しくは、 ユーザーを認証するをご覧ください。

MCP server が scopes_supported を通知する場合、Codex は OAuth ログイン時にサーバーが通知したスコープを優先します。それ以外の場合、Codex は config.toml に設定されたスコープを使用します。

OAuth クライアント登録

Codex は OAuth Client ID Metadata Documents (CIMD) および Dynamic Client Registration (DCR) をサポートしています。デフォルトでは、認可サーバーが client_id_metadata_document_supported: true を公開し、 token_endpoint_auth_methods_supportednone が含まれ、コールバックがサポート対象の ループバック URL を使用する場合、Codex は CIMD を自動的に選択します。それ以外の場合は、利用可能であれば Codex は DCR を使用します。設定済みの OAuth クライアント ID が常に優先され、クライアント登録はスキップされます。

CIMD では、Codex は MCP サーバーごとに用意された ChatGPT ホストのメタデータドキュメントを 使用します。

https://chatgpt.com/oauth/codex/<callback_id>/client.json

Codex は MCP サーバーの URL から <callback_id> を導出し、 http://127.0.0.1:<port>/callback/<callback_id> のように、ループバックリダイレクト URI に含めます。メタデータドキュメントには、 対応するポートなしのループバック URI が登録されます。認可サーバーは、 RFC 8252 の要件に従ってホストとパスを厳密に照合しながら、ログイン時に選択された ポートを受け入れる必要があります。カスタムのコールバックホスト、パス、またはクエリパラメーターを使用するには、DCR または設定済みの OAuth client ID が必要です。

安定した共有 CIMD ドキュメントのサポートは現在開発中で、近日提供予定です。

https://chatgpt.com/oauth/codex/client.json

認可サーバーが authorization_response_iss_parameter_supported: true を通知し、そのメタデータで有効な issuer を提供し、認可レスポンスに一致する iss を含めている場合、Codex は共有 /callback パスを持つ安定版ドキュメントを使用します。 issuer に紐付けられたレスポンスを使用しないサーバーでは、引き続き コールバック固有のドキュメントが使用されます。

1 回の CLI ログインに使用する登録方式を選択するには、 --oauth-client-registration を使用します。

codex mcp login <server-name> --oauth-client-registration cimd
codex mcp login <server-name> --oauth-client-registration dcr

デフォルトは auto です。登録方式の選択は現在のログインにのみ適用され、 config.toml には保存されません。

config.toml の例

[mcp_servers.context7]
command = "npx"
args = ["-y", "@upstash/context7-mcp"]
env_vars = ["LOCAL_TOKEN"]

[mcp_servers.context7.env]
MY_ENV_VAR = "MY_ENV_VALUE"
# Optional MCP OAuth callback overrides (used by `codex mcp login`)
mcp_oauth_callback_port = 5555
mcp_oauth_callback_url = "https://devbox.example.internal/callback"
[mcp_servers.figma]
url = "https://mcp.figma.com/mcp"
bearer_token_env_var = "FIGMA_OAUTH_TOKEN"
http_headers = { "X-Figma-Region" = "us-east-1" }
[mcp_servers.chrome_devtools]
url = "http://localhost:3000/mcp"
enabled_tools = ["open", "screenshot"]
disabled_tools = ["screenshot"] # applied after enabled_tools
default_tools_approval_mode = "prompt"
startup_timeout_sec = 20
tool_timeout_sec = 45
enabled = true

[mcp_servers.chrome_devtools.tools.open]
approval_mode = "approve"
output_token_limit = 30000

プラグインが提供する MCP servers

インストール済みのプラグインは、そのプラグインマニフェストに MCP servers を含めることができます。これらのサーバーはプラグインから起動されるため、ユーザー設定ではトランスポートコマンドを指定しません。ただし、ユーザー設定の plugins.<plugin>.mcp_servers.<server> で有効/無効の状態やツールポリシーを制御できます。

[plugins."sample@test".mcp_servers.sample]
enabled = true
default_tools_approval_mode = "prompt"
enabled_tools = ["read", "search"]

[plugins."sample@test".mcp_servers.sample.tools.search]
approval_mode = "approve"

プラグインが提供する HTTP MCP サーバーでも、.mcp.json に OAuth 設定を宣言できます。 プラグインマニフェストでは、キャメルケースのフィールド名 clientIdcallbackUrlcallbackPort を使用します。

{
  "mcpServers": {
    "sample": {
      "type": "http",
      "url": "https://mcp.example.com/mcp",
      "oauth": {
        "clientId": "my-pre-registered-client",
        "callbackUrl": "http://127.0.0.1/callback/registered"
      }
    }
  }
}

プラグインが提供する MCP サーバーには、他の MCP サーバーと同じコールバック選択ルールが適用されます。プラグインが clientId を指定しており、そのプロバイダーが issuer に紐づけられたコールバックをサポートせず、callbackUrl にサーバー固有のコールバック ID がない場合、Codex はログイン時にその URL を無視し、mcp_oauth_callback_url を使用します。未設定の場合は、 http://127.0.0.1/callback にコールバック ID を追加して使用します。設定された callbackUrl は変更されません。

プラグインの oauth.callbackPort は、グローバルの mcp_oauth_callback_port を上書きします。どちらも設定されていない場合、Codex は一時ポートを選択します。 callbackUrl に含まれるポートによって、リスナーポートが選択されることはありません。固定ポートを使用する 直接接続のループバックコールバックでは、両方の値が一致するように設定します。

{
  "callbackUrl": "http://127.0.0.1:4321/callback/registered",
  "callbackPort": 4321
}

リモート ingress やその他のプロキシでは、プロキシが設定済みの リスナーに転送する場合、コールバック URL のポートとローカルリスナーのポートを意図的に異なる値にできます。

便利な MCP servers の例

MCP servers の一覧は増え続けています。よく使われるものをいくつか紹介します。

  • OpenAI Docs MCP:OpenAI の開発者向けドキュメントを検索して閲覧できます。
  • Context7:最新の開発者向けドキュメントに接続します。
  • Figma LocalRemote:Figma のデザインにアクセスします。
  • Playwright:Playwright を使用してブラウザーを操作・検査します。
  • Chrome Developer Tools:Chrome を操作・検査します。
  • Sentry:Sentry のログにアクセスします。
  • GitHubgit が対応していない GitHub 操作(pull request や issue など)を管理します。