🧐

MCP使わなくてもCLIで十分じゃない?? Claude Codeのコンテキスト戦略

に公開

1. 導入 — GitHub MCPを消した日

Claude Codeを初めてセットアップしたとき、GitHub MCPを入れた。「GitHubの操作を自然言語でできるなら便利そう」と思ったからだ。

ただ、入れたきり何も考えずに放置していた。起動するたびになぜかfailedと表示されるのを横目に、特に困ることもなくそのまま使い続けていた。

あるとき気づいた。自分がClaude CodeにGitHubの操作をさせるとき、いつも gh コマンドを使っている。PRの作成も、issueの確認も、全部CLIだ。GitHub MCPの出番が一度もない。

「あれ、これ要るのか?」

しかもMCPはツール定義がコンテキストウィンドウに常駐する。使ってないのにトークンを食っている。だったらCLIでいいんじゃないか。

消してみた。何も困らなかった。

そこからシンプルな疑問が湧いた。じゃあ、どういうときにMCPを使えばいいんだろう? CLIとどう使い分けるのが正解なのか。調べてみたら、同じことを考えている人が結構いた。

2. MCPの仕組みとコスト

MCPを使うと、Claude Codeに外部ツールを接続できる。GitHub、Slack、データベースなど、さまざまなサービスを自然言語で操作できるようになる。便利だ。

ただし、コストがある。MCPサーバーを接続すると、そのツール定義(どんなツールがあるか、どんなパラメータを受け取るかの情報)がコンテキストウィンドウに常駐する。ツールを実際に使っていなくても、定義だけでトークンを消費し続ける。いわば、使わないメニュー表をずっとテーブルに広げているようなものだ。

これがどれくらいのコストかというと、たとえばGitHub MCPのフルセットは93ツールで約55,000トークンを消費する[1]。Claude Codeのコンテキストウィンドウはデフォルトで200Kトークン(Opus 4.6ではBetaで最大1Mトークン)だから、デフォルト設定ならGitHub MCPだけで全体の約27%を占めることになる。1Mコンテキストでも5.5%だ。小さく見えるかもしれないが、MCPサーバーは普通ひとつでは済まない。便利そうだからとあれもこれもと入れていくと、肝心の作業に使えるコンテキストがどんどん狭くなる。

一方で、同じGitHubの操作を gh CLIで行うと、消費はコマンドの入出力分だけ。スキーマの常駐コストはゼロだ。あるベンチマークでは、MCPで約145,000トークンかかった処理がCLIでは約4,150トークンで済んだという報告もある[2]約35倍の差だ。

3. CLIが強い理由

モデルがすでに知っている

CLIの最大の強みは、モデルがすでに使い方を知っていることだ。gh, git, docker, kubectl といったツールは、学習データに大量の使用例が含まれている。スキーマ定義を渡す必要がなく、トークンコストはゼロ[3]。「PRを作って」と言えば、Claude Codeは gh pr create を自分で組み立てる。

Unix哲学との相性

CLIはパイプでコマンドを繋げられる。gh pr list | grep "draft" のように、小さなコマンドを組み合わせて複雑な操作を表現できる。この composability はLLMにとって自然だ。MCPでは一つの構造化されたAPIコールで完結させる必要があるが、CLIなら段階的に組み立てられる[3:1]

Claude Code自身がCLIを推奨している

Claude Codeの公式ドキュメントでも、GitHubとの連携には gh CLIの使用が案内されている[4]。issueの作成、PRのオープン、コメントの読み取りなど、GitHub操作は gh コマンドで完結する設計だ。

Skills / CLAUDE.md でガイドできる

「CLIだとモデルに使い方を教えられないのでは?」という心配があるかもしれない。しかしClaude Codeには、Skills(再利用可能な指示セット)やCLAUDE.md(プロジェクトごとの設定ファイル)という仕組みがある。ここにCLIツールの使い方やワークフローを定義しておけば、MCPなしでも十分にガイドできる。

自分の場合、Google Workspace CLIの gog コマンドの使い方をSkillとして定義している。MCPサーバーを入れなくても、gog gmail listgog cal today といったコマンドをClaude Codeが適切に使ってくれる。

枯れた技術の安心感

CLIツールは長い歴史がある。ドキュメントは豊富で、エラーが出てもStack Overflowですぐ解決策が見つかる。MCPサーバーはまだ新しいプロトコルで、接続が不安定だったりfailedになることも珍しくない(自分のGitHub MCPがまさにそうだった)。

4. それでもMCPが活きるケース

ここまでCLIの優位性を書いてきたが、MCPがダメだと言いたいわけではない。CLIでは辛い場面が確実にある。

認証が複雑なサービス

OAuthフローが必要なAPIを、毎回Bashでトークン取得から組み立てるのは現実的ではない。MCPサーバーは認証を内部で処理してくれるので、こういったサービスとの接続には素直にMCPを使う方がいい。

CLIが存在しないサービス

そもそもCLIが用意されていないサービスもある。たとえば自分が使っているContext7(ライブラリのドキュメントを検索できるMCPサーバー)は、同等のCLIツールが存在しない。Figma連携も同様だ。CLIがないなら、MCPを使うしかない。

構造化レスポンスが欲しいとき

MCPはJSON Schemaでレスポンスの型を定義できる。CLIの出力はテキストなので、モデルがパースする必要がある。複雑なデータ構造を正確に扱いたい場面では、MCPの構造化レスポンスに分がある。

Tool Searchという改善

MCPのコンテキストコスト問題に対して、Anthropicも手を打っている。Tool Searchという機能は、全ツールの定義を常駐させる代わりに、必要なツールだけを動的にロードする仕組みだ。これにより約85%のトークン削減が報告されている[5]。MCPツールの定義がコンテキストの10%を超えると自動で有効になる。

MCPのコスト問題は徐々に改善されつつある。ただ、CLIで済む場面にわざわざMCPを使う理由にはならない。

5. 自分の使い分けルール

個人的な結論として、Skills + CLIで大抵のことはどうにかなる

Claude CodeにはSkillsやCLAUDE.mdといった仕組みがあって、CLIツールの使い方をそこに定義しておけば、MCPと同等のガイドができる。しかもコンテキストコストは圧倒的に低い。MCPがなくても、ちゃんと動く。

実際に自分の環境はこうなっている。

ツール 方式 理由
GitHub CLI (gh) CLIで全操作できる。MCP不要
Git CLI (git) 言うまでもなく
Google Workspace CLI (gog) + Skills Skillに使い方を定義してガイド
ドキュメント検索 MCP (Context7) 同等のCLIが存在しない
Figma連携 MCP CLIでの操作が現実的でない

表を見てもらえばわかるが、MCPを使っているのはCLIが存在しないサービスだけだ。Figmaのようにそもそもコマンドラインで操作する世界ではないものや、Context7のようにCLIの代替がないもの。逆に言えば、それ以外は全部Skills + CLIで回っている。

GitHub MCPを消したことがこの記事のきっかけだったが、消した後に困ったことは一度もない。むしろ、failedの表示が消えてすっきりした。

MCPを入れる前に、まずそのサービスにCLIがあるか確認してみてほしい。あるなら、Skillsに使い方を書いてCLIで使う方がいい。MCPは「CLIがない」ときの選択肢だと思っている。

使っていないMCPサーバーが failed のまま残っていたら、一度消してみるといいかもしれない。たぶん、困らない。

脚注
  1. Why CLI Tools Are Beating MCP for AI Agents ↩︎

  2. 同上。Microsoft Intuneのコンプライアンスチェック(50デバイス処理)での比較。 ↩︎

  3. Why CLI Tools Beat MCP for AI Coding Assistants ↩︎ ↩︎

  4. Claude Code GitHub Actions - Claude Code Docs ↩︎

  5. What is MCP Tool Search? ↩︎

Discussion