古いAngularのプロジェクトで@angular/cli mcpを利用する (codex / claude)
7月にリリースされた20.1.0の @angular/cliには、
AI Agentを利用してコーディングのベストプラクティスを提供しやすくするため、
MCPサーバー機能が実装されました❗️
今回、
自身のプロジェクト(Angular v16)のAngularパッケージアップデートをCodexに任せようと考え、
「この際にせっかくだから最近リリースされたangular-cli MCPを有効化して対応しようかな」
と思い至り、次のようにmcpを追加しました。 (https://angular.jp/ai/mcp この辺を参考に)
$ codex mcp add angular-cli -- npx -y @angular/cli@latest mcp
ところが、プロジェクト内でcodexを立ち上げると……。
■ MCP client for `angular-cli` faild to start: request timed out
うまく動かないではありませんか! ギョエー!
色々苦戦しつつ、Angular日本ユーザー回のDiscordでlacoさんと相談しつつ、
Codexと壁打ちすることで腹落ち&解決したので、本記事にまとめます!
TL;DR
- ローカルに古い CLI (v16 系など) が存在すると、 Codex の MCP 設定で
@angular/cli@latest mcpを呼び出してもタイムアウトする -
~/.codex/config.tomlでバージョンを固定しつつNG_DISABLE_VERSION_CHECK=1を渡すと、Codex でも安定して Angular CLI v20 の MCP サーバーを起動できた -
NG_DISABLE_VERSION_CHECKは MCP プロセス専用に設定されるため、通常のngコマンドには影響しない- ただし MCP から書き込み系ツールを使う場合は CLI とプロジェクトのバージョン差に注意
背景
Angular 公式から MCP 対応が発表されたので、Codex (CLI 版 ChatGPT) に @angular/cli の MCP サーバーを登録してみたところ request timed out で毎回失敗。
Laco さん(Angular チーム)のスクリーンショットを見る限り普通に動いていそうなのに、自分の環境だけ立ち上がらない。
2025-10-06T02:34:50Z ERROR MCP client for `angular-cli` failed to start: request timed out
環境
- Codex CLI 0.44.0
- プロジェクトの Angular CLI: 16.1.4 (devDependencies)
- Node.js v22.13.1
- MCP サーバー設定は
~/.codex/config.tomlで管理
何が起きていたのか
Codex のログを眺めると、MCP 起動時に以下のコマンドが実行されていた。
program: "npx"
args: ["-y", "@angular/cli", "mcp"]
env: Some({"CI": "1", "NG_FORCE_TTY": "0"})
startup_timeout: 10s
ポイントは バージョン指定が無い @angular/cli を npx で呼んでいること。
Angular CLI の init.js には以下の挙動がある。
-
npxで落ちてきたグローバル CLI (ここでは v20.3.4) がまず実行される。 - その直後に
process.cwd()(作業ディレクトリ) を見に行き、ローカルにnode_modules/@angular/cliが存在すればそちらに処理を委譲する。 - 手元のプロジェクトは v16.1.4 なので、
mcpコマンドが存在せずUnknown command. Did you mean add?で即終了。
その結果、Codex は 10 秒待っても MCP サーバーからのハンドシェイクが来ない → タイムアウト、という流れだった。
解決策
1. ~/.codex/config.toml でバージョンを固定する
[mcp_servers.angular-cli]
command = "npx"
args = ["-y", "@angular/cli@20.3.4", "mcp"]
2. NG_DISABLE_VERSION_CHECK を設定する
[mcp_servers.angular-cli.env]
NG_DISABLE_VERSION_CHECK = "1"
これで init.js の「ローカル CLI を優先する」分岐がスキップされ、npx で取得した v20.3.4 がそのまま MCP サーバーに仕上がります。
3. Codex を再起動
設定ファイルを編集しただけでは反映されないので、Ctrl + C で Codex を落として再起動します。
ログに以下が出ていれば成功。
new_stdio_client ... args: ["-y", "@angular/cli@20.3.4", "mcp"] env: Some({"NG_DISABLE_VERSION_CHECK": "1"})
aggregated 67 tools from 4 servers
副作用は?
NG_DISABLE_VERSION_CHECK を MCP プロセスに渡すと、CLI v20 が Angular v16 プロジェクトを操作することになります。
読み取り系ツール(ベストプラクティスのドキュメント取得やプロジェクト一覧)なら問題ないですが、
将来的に書き換え系ツール (例: zoneless migration) が動く場合は互換性に注意したほうが良さそうです。
まとめ・所感
- Codex の MCP 設定で Angular CLI を呼ぶときは バージョン指定 が必須
-
NG_DISABLE_VERSION_CHECK=1を環境変数で渡すと、ローカル v16 へのフォールバックを防げる - 頑張って設定したけど、古いバージョンのAngularプロジェクトではそもそも恩恵すくなさそう😹
付録: 設定例
最終的に動いた ~/.codex/config.toml の抜粋。
[mcp_servers.angular-cli]
command = "npx"
args = ["-y", "@angular/cli@20.3.4", "mcp"]
[mcp_servers.angular-cli.env]
NG_DISABLE_VERSION_CHECK = "1"
備考 Codexの不要だった提案
Codexと壁打ち中に次のような提案を受けていましたが、結果としていずれも不要でした。
~/.npm/_npx を消す
npx のキャッシュに古いものが残っている場合は rm -rf ~/.npm/_npx してから再試行すると確実。 みたいなことを何度か言われていましたが、キャッシュが悪さするみたいな挙動はなさそうでした。
環境変数 NG_FORCE_TTY と CI
angular-cli mcpは、環境がTTYかどうかで出力を変える実装になっているようです。
「これが悪さをしてmcpサーバーとしての動きが行われないのではないか?」という仮説をもとに、
NG_FORCE_TTY=1やCI=1を設定して起動することで回避できるのではないか? と試行錯誤していましたが、最終的にこれらの設定は不要でした。
Discussion