Claude Code の SKILL から Codex CLI を呼び出すとき、あなたは「MCP 経由」と「SKILL/BASH(codex exec)」のどちらを選んでいますか? 筆者は最初「MCP のほうが正確そう」という先入観で使い始めました。しかし実際には処理が重く、何が起きているか見えないブラックボックス感に悩み、SKILL/BASH に切り替えた経験があります。この記事では、両者を実際に使って感じた違いと、使い分けの指針をお伝えします。
関連記事: 生成AI活用の記事一覧 / IT技術の記事一覧
はじめに — Claude Desktop の SKILL から Codex を呼び出す選択肢
Claude Desktop の SKILL 機能を使うと、codex exec などのコマンドを呼び出してAIエージェントに作業を委ねることができます。そのとき「Codex の呼び出し方」として、大きく2つの選択肢があります。
- MCP 経由: Model Context Protocol サーバーとして Codex を接続し、JSON-RPC でやり取りする
- SKILL/BASH: SKILL の中で
codex execコマンドを直接実行する
「MCP のほうが正確そう」という先入観
MCP(Model Context Protocol)はAnthropicが提唱した標準的なプロトコルです。そのため「構造化された通信ができて正確なはず」「セッション管理もしっかりしているはず」という印象を持ちやすいです。筆者も最初はそう考えて、MCP 経由で Codex を呼び出すことを選びました。出典: developers.openai.com

まず MCP を試した — 期待と現実のギャップ
期待していたこと:構造化・セッション管理・正確な出力
MCP を使えば、Codex との通信が JSON-RPC 2.0 ベースの構造化メッセージになります。そのため、以下のようなメリットを期待していました。
- リクエスト/レスポンスが明確に定義されていて信頼性が高い
- セッション管理ができて長期の処理も安心
- ツール呼び出しの結果が構造化されて扱いやすい
現実:処理が重く、ブラックボックスで不安
実際に使ってみると、期待とはかなり違いました。まず処理が非常に重く、数分〜数十分待たされることがありました。さらに困ったのは「今何をしているのか全くわからない」点です。MCP 経由では Codex の処理状況がリアルタイムで見えず、ただひたすら待つしかありません。
この「ブラックボックス感」は想像以上にストレスでした。処理が止まっているのか、進んでいるのか、失敗しているのか、判断できないのです。出典: morphllm.com
GitHub Issue が示す根本原因(#15567, #15320)
この問題は個人的な環境の問題ではなく、Codex の既知の問題です。GitHub のリポジトリには類似の問題が複数報告されています。ツール呼び出しのストリーミングが未実装であったり、TUI(ターミナル UI)への反映が不完全だったりするケースが確認されています。出典: github.com/openai/codex
つまり、MCP 経由で Codex を使う際の「見えない問題」は、現時点では構造的な課題であり、すぐには解決しないということです。
MCP が本当に得意な用途は CRUD 操作
MCP の設計思想:JSON-RPC 2.0 ベースの即レスポンス前提
MCP がうまく機能するケースも理解しておく必要があります。MCP は JSON-RPC 2.0 をベースにした同期型のリクエスト/レスポンスプロトコルです。そのため、すぐにレスポンスが返ってくる処理と相性がよいです。
agnost.ai の記事によると、”The original MCP design assumed tools return results quickly.”(日本語訳: MCPの元々の設計は、ツールが結果を素早く返すことを前提にしていた)とされています。出典: agnost.ai
得意領域と苦手領域
具体的な得意・苦手をまとめると以下のとおりです。
- 得意: Google カレンダーへの予定登録・取得、データベースのレコード取得、Slack メッセージの読み込みなど「即レスポンスが返る CRUD 操作」
- 苦手: コード生成・テスト実行・リファクタリングなど「長時間かかる AI タスク」
Claude Skills と MCP の技術的な比較によると、MCP サーバーはコンテキストを大量に消費するという課題もあります。たとえば5つのサーバーで58ツールを使うと、会話を始める前からすでに約55,000トークンを消費してしまいます。出典: IntuitionLabs
Anthropic 公式も Tasks プリミティブを実験的追加(2025年11月)
こうした課題を受けて、Anthropic は 2025年11月の MCP 仕様アップデートで「Tasks プリミティブ」を実験的に追加しました。これは「call-now, fetch-later」パターンと呼ばれる非同期処理の仕組みで、長時間処理への対応を目指すものです。出典: WorkOS
タスクは working、input_required、completed、failed、cancelled などの状態を持ち、クライアントが後から結果を取得できるようになっています。ただし、2026年3月現在はまだ実験的な機能です。出典: DEV Community
ArminRonacher の批判と Cloudflare の事例
Flask の作者として知られる Armin Ronacher 氏は、MCP について「MCP よりコード生成のほうが効率的」と批判しています。また Cloudflare の事例では、2,500 エンドポイントを MCP にすると 244,000 トークンを消費するのに対し、コード生成なら 1,000 トークンで済むという試算も示されています。
つまり、MCP は「すべての用途に最適」ではなく、用途に応じた使い分けが重要だということです。出典: morphllm.com

SKILL/BASH(codex exec)に切り替えた
リアルタイムで見える安心感
MCP の代わりに SKILL/BASH で codex exec を使ってみると、体験が大きく変わりました。Codex の出力がリアルタイムでターミナルに流れてくるので、「今ここを処理しているんだ」とひと目でわかります。
この「可視性」は思ったよりも大きな安心感をもたらしてくれます。処理が長引いても「ちゃんと動いている」とわかるので、不安になって強制終了してしまうことが減りました。また問題が起きたときも、エラーメッセージをすぐに見られるので対処しやすいです。
Skills は Claude Code、Claude.ai、API のどこでも同じように動作します。つまり一度書いたスキルを複数の環境で再利用でき、MCP サーバーのような大量のトークン消費も発生しません。出典: claude.com
既知のバグと注意点(#15536, #15524, #15527)
ただし、SKILL/BASH にも既知のバグがあります。使う前に把握しておくと良いでしょう。
- #15536: 処理が失敗してもexit code 0を返すケースがある(成功と誤認しやすい)
- #15524: read-only サンドボックスでも書き込みが通ってしまうことがある
- #15527: ネスト実行時に親の
THREAD_IDを汚染するケースがある
これらのバグは実際に問題になることもあります。特に exit code の問題は、エラーを見落とす原因になりかねません。出典: github.com/openai/codex
次のセクションで紹介する codex exec --json モードを使うと、この問題を回避しやすくなります。
MCP vs SKILL/BASH 比較表
ここまでの内容をまとめた比較表です。
| 観点 | MCP | SKILL/BASH |
|---|---|---|
| 進捗の見え方 | 見えない(ストリーミング未実装) | リアルタイムで確認できる |
| 処理の重さ | 重い(待ち時間が長い) | 軽い(即時実行) |
| 向いている用途 | CRUD・データ取得・API連携 | AIコード生成・長時間タスク |
| 安定性 | セッションが不安定なことがある | 中程度(既知バグあり) |
| コンテキスト消費 | 多い(サーバー設定で数万トークン) | 少ない(スキルは必要時のみ読み込み) |
| 将来性 | 高い(Tasks 対応で改善中) | 低め(app-server 移行中) |
現時点では、Codex CLI を使った AI タスク実行には SKILL/BASH のほうが実用的です。しかし MCP も着実に改善されているため、将来的な展望も踏まえて選択することが重要です。出典: builder.io
発展 Tips:SKILL 内で codex exec –json を使う
JSONL フォーマットで何が変わるか
通常の codex exec の出力はテキストですが、--json オプションを付けると JSONL(JSON Lines)フォーマットで出力されます。これにより、処理の成功・失敗をプログラムで確実に判定できるようになります。
JSONL の各行には処理のフェーズと状態が含まれます。そのため、「どの段階で何が起きたか」を正確に把握できます。
実際の JSONL サンプルと解説
実際の出力例を見てみましょう。
{"type":"thread.started","thread_id":"67e55044-..."}
{"type":"turn.started"}
{"type":"item.started","item":{"id":"item_0","type":"command_execution","command":"sh -c 'ls'","status":"in_progress"}}
{"type":"item.completed","item":{"id":"item_0","type":"command_execution","exit_code":0,"status":"completed"}}
{"type":"item.completed","item":{"id":"item_1","type":"agent_message","text":"\u5b8c\u4e86\u3057\u307e\u3057\u305f"}}
{"type":"turn.completed","usage":{"input_tokens":1200,"output_tokens":345}}
各行の意味は以下のとおりです。
thread.started: セッションが開始されたturn.started: 1回の処理ターンが開始されたitem.started/item.completed: 個々のコマンドや応答の開始・完了turn.completed: 処理ターンが完了し、トークン使用量も確認できる
exit code 問題への対処法
先ほど紹介したバグ #15536(失敗しても exit code 0 を返す)は、--json モードで対処できます。具体的には、出力の turn.failed イベントや各 item の exit_code フィールドを確認することで、失敗を確実に検知できます。
# 失敗時の出力例
{"type":"turn.failed","error":{"message":"Command failed with exit code 1"}}
SKILL のスクリプト内で JSONL をパースして turn.failed を検知する処理を入れることで、エラーを見落とすリスクを大幅に下げられます。
あわせて読みたいおすすめ書籍
AIエージェントの仕組みや実装をより深く理解したい方には、以下の書籍がおすすめです。LangChainやLangGraphを使った実践的な構築手法から、開発・運用のノウハウまでカバーしています。
まとめ・使い分け指針
今すぐ動かすなら SKILL/BASH
Claude Code から Codex CLI を呼び出す場合、現時点では SKILL/BASH(codex exec)が最も実用的な選択肢です。処理の進捗がリアルタイムで見え、軽快に動作します。また、コンテキストの消費も少なく済みます。
MCP は CRUD 操作とデータ取得に
MCP が真価を発揮するのは、すぐにレスポンスが返る操作です。具体的には以下のような用途に向いています。
- Google カレンダーへの予定の作成・取得
- データベースのレコード検索・更新
- Slack のメッセージ読み込み・送信
- 外部 API からのデータ取得
こうした CRUD 操作は MCP の設計思想に合っており、安定して動作します。
将来的には MCP の Tasks 対応に期待
MCP の Tasks プリミティブ(2025年11月実験追加)が安定すれば、長時間の AI タスクにも MCP が使えるようになります。その時点では使い分けの判断も変わってくるでしょう。
まとめると、使い分けの指針は次のとおりです。
- 今すぐ Codex で AI タスクを動かすなら → SKILL/BASH(
codex exec) - カレンダー・DB・Slack などの CRUD 操作なら → MCP
- エラーハンドリングを確実にしたいなら →
codex exec --json - 長時間タスクへの MCP 対応は → Tasks プリミティブの安定化を待つ
Claude Code の AI エージェント連携はまだ進化の途中です。ツールの特性を理解したうえで、用途に合った方法を選んでいきましょう。
関連記事: 生成AI関連記事の一覧
引用・出典
- agnost.ai: Long Running Tasks in MCP: The Call-Now, Fetch-Later Pattern That Changes Everything
- WorkOS: MCP 2025-11-25 is here: async Tasks, better OAuth, extensions, and a smoother agentic future
- morphllm.com: Claude Code Skills vs MCP vs Plugins: Complete Guide 2026
- claude.com: Skills explained: How Skills compares to prompts, Projects, MCP, and subagents
- DEV Community: MCP Gets Tasks: A Game-Changer for Long-Running AI Operations
- builder.io: Codex vs Claude Code: which is the better AI coding agent?
- IntuitionLabs: Claude Skills vs. MCP: A Technical Comparison for AI Workflows
- github.com/openai/codex: Codex escapes its sandbox · Issue #8667
- github.com/openai/codex: Return non-zero exit code on SIGINT in exec mode · Issue #4721
- developers.openai.com: Model Context Protocol – Codex | OpenAI Developers

コメント