Codex で MCP サーバーの一部のツールだけ許可する enabled_tools と、タイムアウト・承認の設定
Codex の config.toml で MCP サーバーごとに使えるツールを enabled_tools / disabled_tools で絞り、startup_timeout_sec と tool_timeout_sec で待ち時間を調整し、承認モードを設定する方法を解説します。
MCP サーバーを追加すると、そのサーバーが公開するツールが全部 Codex から使えるようになります。ブラウザ操作のサーバーで「スクリーンショットは撮ってほしいがフォーム送信はさせたくない」のように、一部だけを許可したい場面はよくあります。
結論として、[mcp_servers.<id>] の enabled_tools と disabled_tools でツールを絞り、default_tools_approval_mode や tools.<tool>.approval_mode で実行前の承認を要求できます。起動やツール実行の待ち時間は startup_timeout_sec と tool_timeout_sec で調整します。
KEY POINT
この記事で分かること
- ツールの許可リスト / 拒否リストの書き方
- 起動タイムアウトとツール実行タイムアウトの既定値と変え方
- 承認モードと、出力トークンの上限
ツールを絞る
公式ドキュメントの例です。HTTP サーバーに対して、使えるツールを open と screenshot に絞り、さらに screenshot を拒否リストに入れています。
[mcp_servers.chrome_devtools]
url = "http://localhost:3000/mcp"
enabled_tools = ["open", "screenshot"]
disabled_tools = ["screenshot"]
default_tools_approval_mode = "prompt"
startup_timeout_sec = 20
tool_timeout_sec = 45
| キー | 意味 |
|---|---|
enabled_tools | 使えるツール名の許可リスト |
disabled_tools | 使わせないツール名の拒否リスト |
enabled | false にすると設定を残したままサーバーを無効化 |
required | true にすると、サーバーが初期化できないとき Codex の起動が失敗する |
ツール名はサーバーが公開している名前をそのまま書きます。名前は codex mcp list などで確認できます。
用語解説
stdio サーバーと HTTP サーバー: command と args でプロセスを起動するのが stdio サーバー、url で接続するのが HTTP(streamable)サーバーです。ツールの絞り込みやタイムアウトの設定はどちらにも共通です。
タイムアウトを調整する
| キー | 既定 | 意味 |
|---|---|---|
startup_timeout_sec | 10 秒 | サーバーの起動を待つ時間。startup_timeout_ms でミリ秒指定も可 |
tool_timeout_sec | 60 秒 | ツール 1 回の実行を待つ時間 |
npx で毎回パッケージを取得するサーバーや、初回にブラウザを立ち上げるサーバーは 10 秒で間に合わないことがあります。起動に失敗して黙ってスキップされるのが困る場合は、required = true にして明示的に失敗させるのが確実です。
任意のサーバー(required でないもの)を待つ猶予は、グローバルの mcp_optional_startup_grace_ms(既定 1000 ミリ秒)で決まります。
承認と出力の上限
サーバー全体の承認モードは default_tools_approval_mode で決めます。値は auto / prompt / writes / approve です。個別のツールには [mcp_servers.<id>.tools.<tool>] で上書きできます。
[mcp_servers.docs]
command = "npx"
args = ["-y", "some-docs-mcp"]
enabled_tools = ["search", "summarize"]
default_tools_approval_mode = "auto"
[mcp_servers.docs.tools.summarize]
approval_mode = "prompt"
output_token_limit = 30000
output_token_limit はそのツールの出力に割り当てるトークンの上限で、検索結果のように長くなりがちなツールの出力がコンテキストを圧迫するのを防ぎます。すべてのツール出力に共通の上限を付けるなら、トップレベルの tool_output_token_limit を使います。
環境変数は env と env_vars で最小限に
stdio サーバーに渡す環境変数は [mcp_servers.<id>.env] で値を書くか、env_vars = ["LOCAL_TOKEN"] のように「転送を許可する変数名」を並べます。HTTP サーバーの認証は bearer_token_env_var で環境変数名を指定します。トークンの値そのものを config.toml に書かないでください。
MCP サーバーの追加手順そのものは Codex CLI に MCP サーバーを設定する を、承認ポリシーとの関係は親記事の config.toml でモデル・推論の深さ・プロファイルを切り替える を参照してください。どのサーバーを入れるかの候補は おすすめの MCP サーバー にまとめています。
まとめ
enabled_tools/disabled_toolsでサーバーごとに使えるツールを絞れる- 起動は
startup_timeout_sec(既定 10 秒)、実行はtool_timeout_sec(既定 60 秒)。起動できないと困るサーバーはrequired = true default_tools_approval_modeとtools.<tool>.approval_modeで実行前の承認を要求できるoutput_token_limitでツールごとの出力トークンを制限できる- トークンは
bearer_token_env_varやenv_varsで環境変数から渡し、値を直接書かない
よくある質問
- enabled_tools と disabled_tools を両方書いたらどうなりますか?
- 公式の例では両方を同時に書いており、enabled_tools で許可した中から disabled_tools のものが除かれる形になっています。片方だけで済むなら片方にする方が読みやすいです。
- MCP サーバーの起動が遅くてスキップされます。
- startup_timeout_sec(既定 10 秒)を伸ばしてください。必須のサーバーなら required = true にすると、起動できないとき Codex 自体が起動に失敗するので気づけます。
- 特定のツールだけ毎回確認してほしいです。
- [mcp_servers.<id>.tools.<tool>] の approval_mode で個別に設定できます。サーバー全体なら default_tools_approval_mode です。
参考にした一次情報
この記事は公式ドキュメントを基に AI が下書きを作成し、運営者が内容を確認して公開しています。誤りを見つけた場合は お問い合わせからお知らせください。