概要
モデルとツール・コンテキストをつなぐプロトコル。サードパーティのドキュメントへのアクセスや、ブラウザ・Figma といった開発ツールとの連携に使う。ローカルの Codex クライアントは MCP サーバーに直接接続でき、ChatGPT web は plugin が供給するリモートの MCP ベースツールを使う。
仕様
対応する機能
ChatGPT desktop app / Codex CLI / IDE extension が MCP サーバーに対応し、同じ Codex ホストであれば MCP 設定を共有する。以下は Codex ホストに設定した MCP サーバーに対する対応範囲で、hosted な plugin ツールは異なる機能を持ちうる。
- STDIO サーバー(コマンドで起動するローカルプロセス): 環境変数に対応
- Streamable HTTP サーバー(アドレスでアクセス): Bearer token 認証、OAuth 認証、信頼された first-party サーバー向けの ChatGPT セッション認証
- Server instructions: 初期化時に返る MCP の
instructionsフィールドを読み、そのサーバーのツールと併せてサーバー全体の指針として使う- サーバー作者向けの指針として、
instructionsにはツール横断のワークフロー・制約・レートリミットを書き、先頭 512 文字だけで自己完結させることが推奨されている
- サーバー作者向けの指針として、
設定の場所
- MCP 設定は他の Codex 設定と同じ
config.tomlに入る。既定は~/.codex/config.toml .codex/config.tomlでプロジェクトにスコープすることもできる(trusted なプロジェクトのみ)- ChatGPT desktop app / Codex CLI / IDE extension はこの設定を共有するため、設定後はクライアントを切り替えても再設定は要らない
- ChatGPT web はローカルの Codex 設定ファイルを読まず、ローカルのコマンドメニューも公開しない。ChatGPT Work の Plugins から管理する
サーフェスごとの設定手順
| サーフェス | 手順 |
|---|---|
| ChatGPT desktop app | Settings > MCP servers > Add server で名前・STDIO または Streamable HTTP・コマンドまたは URL を入力し、保存して Restart。サーバー一覧に有効状態と OAuth 要否が出る。composer で /mcp を打つと接続中のサーバーを確認できる |
| Codex CLI | codex mcp add <server-name> --env VAR1=VALUE1 -- <stdio server-command>。codex mcp list で一覧、codex mcp --help で全コマンド、codex mcp login <server-name> で OAuth ログイン。TUI では /mcp |
| IDE extension | 歯車メニュー > MCP servers > Add server。保存して Restart extension |
| ChatGPT Work(web) | plugin をインストールして、そのバンドル connector とリモート MCP ツールを使う。ワークスペース管理者が利用可能な plugin とツールを制御できる |
STDIO サーバーの設定
| キー | 必須 | 説明 |
|---|---|---|
command | はい | サーバーを起動するコマンド |
args | いいえ | 渡す引数 |
env | いいえ | サーバーに設定する環境変数 |
env_vars | いいえ | 許可して転送する環境変数 |
cwd | いいえ | サーバーを起動する作業ディレクトリ |
experimental_environment | いいえ | remote にすると、利用可能なときリモート executor 環境で stdio サーバーを起動する |
env_varsはプレーンな変数名か、source を持つオブジェクトを含められる- 文字列エントリと
source = "local"は Codex のローカル環境から読む。source = "remote"はリモート executor 環境から読み、remote MCP stdio を必要とする
Streamable HTTP サーバーの設定
| キー | 必須 | 説明 |
|---|---|---|
url | はい | サーバーのアドレス |
auth | いいえ | 設定済みの bearer token と authorization ヘッダーの後に試す認証。oauth(既定)は保存済みの MCP OAuth 資格情報、chatgpt は信頼された first-party の ChatGPT オリジンに対して現在の ChatGPT セッションを使い、保存済み OAuth にフォールバックする |
bearer_token_env_var | いいえ | Authorization に載せる bearer token の環境変数名 |
http_headers | いいえ | ヘッダー名 → 静的な値 |
env_http_headers | いいえ | ヘッダー名 → 環境変数名(値は環境から取る) |
- 資格情報のソースがどれも解決しない場合、Codex は認証なしでサーバーに接続しうる。MCP OAuth ログインは
codex mcp login <server-name>で別途行う
共通のオプション
| キー | 既定 | 説明 |
|---|---|---|
startup_timeout_sec | 10 | サーバー起動のタイムアウト(秒) |
tool_timeout_sec | 60 | ツール実行のタイムアウト(秒) |
enabled | — | false で設定を消さずに無効化 |
required | — | true で、この有効なサーバーが初期化できないとき起動を失敗させる |
enabled_tools | — | ツールの allow list |
disabled_tools | — | ツールの deny list。enabled_tools の後に適用される |
default_tools_approval_mode | — | このサーバーのツールの既定の承認挙動。auto / prompt / writes / approve。writes は read-only とマークされていないツールで確認を求める |
tools.<tool>.approval_mode | — | ツール単位の上書き |
OAuth のコールバック
- OAuth プロバイダが固定のコールバックポートを要求する場合、トップレベルの
mcp_oauth_callback_portを設定する。未設定なら ephemeral ポートにバインドする - 特定のコールバック URL が必要な場合(リモート Devbox の ingress URL やカスタムパスなど)は
mcp_oauth_callback_urlを設定する。Codex はこれをベース URL として、サーバー固有のコールバック ID を末尾に付けてredirect_uriを作る。OAuth プロバイダには、ベースのホストやパスだけでなく、付加されるコールバック ID と設定したパス・クエリ・ポートを含む完全なredirect_uriを登録する - ローカルのコールバック URL(
localhostなど)はローカルインターフェースにバインドされ、非ローカルのコールバック URL は0.0.0.0にバインドされる - MCP サーバーが
scopes_supportedを宣言している場合、Codex は OAuth ログイン時にそのサーバー宣言のスコープを優先する。そうでなければconfig.tomlに設定したスコープにフォールバックする
plugin が提供する MCP サーバー
- インストール済みの plugin は plugin マニフェストで MCP サーバーをバンドルできる。それらは plugin から起動されるため、ユーザー設定で transport コマンドを設定することはできない
- ユーザー設定は
plugins.<plugin>.mcp_servers.<server>配下で on/off とツールポリシーを制御できる
Codex 自身を MCP サーバーとして動かす
codex mcp-server で起動し、他の MCP クライアントから接続する。tools/list に 2 つのツールが現れる。
codex — 指定したプロンプトと設定上書きで Codex セッションを実行する
| プロパティ | 型 | 説明 |
|---|---|---|
prompt(必須) | string | 会話を開始する最初のユーザープロンプト |
approval-policy | string | モデルが生成した shell コマンドの承認ポリシー: untrusted / on-request / never |
base-instructions | string | 既定の指示の代わりに使う指示 |
compact-prompt | string | 会話を compact するときに使うプロンプト |
config | object | $CODEX_HOME/config.toml を上書きする個別の設定 |
cwd | string | セッションの作業ディレクトリ。相対パスはサーバープロセスの現在のディレクトリから解決される |
developer-instructions | string | developer ロールのメッセージとして注入する指示 |
model | string | モデル名の上書き |
sandbox | string | read-only / workspace-write / danger-full-access |
codex-reply — スレッド ID とプロンプトでセッションを継続する
| プロパティ | 型 | 説明 |
|---|---|---|
prompt(必須) | string | 次のユーザープロンプト |
threadId(必須) | string | 継続するスレッドの ID |
conversationId | string | deprecated。threadId の互換エイリアス |
threadIdはtools/callレスポンスのstructuredContent.threadIdから取る。exec / patch の承認プロンプトのparamsにもthreadIdが含まれる- 最近の MCP クライアントは
structuredContentがあればそれだけを結果として報告することが多いが、Codex の MCP サーバーは古いクライアントのためにcontentも返す
設定
[mcp_servers.context7]command = "npx"args = ["-y", "@upstash/context7-mcp"]env_vars = ["LOCAL_TOKEN"]
[mcp_servers.context7.env]MY_ENV_VAR = "MY_ENV_VALUE"[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"] # enabled_tools の後に適用されるdefault_tools_approval_mode = "prompt"startup_timeout_sec = 20tool_timeout_sec = 45enabled = true
[mcp_servers.chrome_devtools.tools.open]approval_mode = "approve"# plugin がバンドルする MCP サーバーのポリシーだけを制御する[plugins."sample@test".mcp_servers.sample]enabled = truedefault_tools_approval_mode = "prompt"enabled_tools = ["read", "search"]mcp_oauth_callback_port = 5555mcp_oauth_callback_url = "https://devbox.example.internal/callback"codex mcp add context7 -- npx -y @upstash/context7-mcpcodex mcp listcodex mcp login <server-name>codex mcp-server関連
facts/codex/configuration-reference.mdfacts/codex/config-basics.mdfacts/codex/plugins.mdfacts/codex/cli-reference.mdfacts/codex/permissions.md