🤖

openai/codex でのプロジェクト固有MCPを設定する

に公開

gpt-5-codex を試すのに codex を調べています。

注意。2 つの手段を見つけましたが、過渡期っぽい無理矢理な方法です。

動機

claude code はプロジェクトごとに mcp 設定を独立させることができましたが、 現状の codex はグローバルに MCP を設定する方法しかありません。

例えばコード解析ツールの lsmcp や serena は常に起動したいわけではなく、プロジェクト固有の MCP プロセスとしたいです。

https://github.com/mizchi/lsmcp

ドキュメントにもないので、直接 codex 本体のコードを読んで設定する方法を探しました。

https://github.com/openai/codex

(一応、lsmcp/serena どちらもカレントディレクトリを基準にコードを解析するので、常に起動するだけで動くには動きます)

手段 1 CODEX_HOME=$PWD/.codex

CODEX_HOME= の環境変数の指定で、読み込みディレクトリを変更できます。

直接指定することで、プロジェクト固有の MCP 設定をロードできます。

.codex/config.toml を次のように設定します。

model = "gpt-5-codex"

[mcp_servers.playwright]
command = "npx"
args = ["-y", "@playwright/mcp"]

この状態で起動

CODEX_HOME=$PWD/.codex codex

難点として、.codex/ は認証情報等も書き込まれるので、これをコミットするわけにはいきません。

$ ls ~/.codex/
auth.json    history.jsonl          log       version.json
config.toml  internal_storage.json  sessions

.gitignore!/.codex/config.toml を書いてもここに何を書くかは openai の気分次第なので、いずれ事故りそうです。

なので、これはあくまで内部のデバッグ手段として、普段遣いには次の方法が安全そうです。

手段 2 --config='...'

実装を見る限り、 codex には --config='key=val' で直接 TOML をロードする方法が備わっています。

これを使って mcp_servers= だけ上書きすればいいと考えました。

# codex mcp list で確認
$ codex -c 'mcp_servers={"playwright"={"command"="npx",args=["-y", "@playwright/mcp@latest"]}}' mcp list
Name        Command  Args                       Env
playwright  npx      -y @playwright/mcp@latest  -

# この設定で起動
$ codex -c 'mcp_servers={"playwright"={"command"="npx",args=["-y", "@playwright/mcp@latest"]}}'

▌ https://example.com を playwright-mcp で開いて

tool running...
playwright.browser_navigate({"url":"https://example.com"})

手元に .mcp.json を配置しておいて、動的にロードするなら

$ codex -c "mcp_servers=$(jq .mcpServers .mcp.json -cM | sed 's/\":/\"=/g')" mcp list

これを bash/zsh のエイリアスにしておく

# ~/.bashrc
alias codex-mcp='codex -c "mcp_servers=$(jq .mcpServers .mcp.json -cM | sed 's/\":/\"=/g')"'

.mcp.json が存在するという強い過程があり、 また sed で無理やり JSON => TOML にしてる点に注意

参考(というかほぼそのまま)

https://github.com/openai/codex/issues/2554

追記 for serena

JSON => TOML の変換が雑すぎて、 serena では動かなかったので(使う人が多い気がするので)これだけ修正する。

https://https=// になってしまっていた。

# sed なし
codex -c 'mcp_servers.serena={command="uvx",args=["--from", "git+https://github.com/oraios/serena", "serena", "start-mcp-server", "--context", "codex", "--enable-web-dashboard=false"]}'

# .zshrc
alias codex-serena='codex -c "mcp_servers.serena={command=\"uvx\",args=[\"--from\", \"git+https://github.com/oraios/serena\", \"serena\", \"start-mcp-server\", \"--context\", \"codex\", \"--enable-web-dashboard=false\"]}"'

おわり

というわけで、どう考えてもあとから別の手段で不要になりそうな TIPS でした。

Discussion