MCPサーバーは何トークン食うのか:6台つないで実測した
MCPサーバーを6台つないだ状態と切った状態でコンテキスト消費を測ったところ、差は476トークンでした。ただしツールを使うタスクでは、処理するトークンの累計が桁違いになります。「つなぐコスト」と「使うコスト」は別物です。
MCPサーバーを増やすと、コンテキストを圧迫する。そう聞いて、私は接続するサーバーを絞っていました。
測ったら、思っていたのと違いました。
6台つないだ状態と、全部切った状態で、同じプロンプトを投げてトークンを数えました。結果を先に書きます。
結論:実測データ
--- 同じプロンプト・同じターン数で比較 ---
MCPあり(6台) 26,867 トークン
MCPなし 26,391 トークン
------------------
差 476 トークン
6台つないでも476トークンしか増えませんでした。 6台あわせて100個を超えるツールがあるにもかかわらず、です。
ただし、これで安心してはいけません。実際にツールを使うタスクを投げると、話が変わります。
--- 参考: タスクの重さが違う2つの比較 ---
「OKとだけ返して」 26,867 トークン(2ターン)
「Todoistの一覧を取って数えて」 92,396 トークン(3ターン)
-------------------------
約3.4倍
この2つはタスク自体が違うので、差の全量をMCPの使用コストと断定はできません。 ツール検索・スキーマの読み込み・タスクそのものの処理が混ざった数字です。それでも、ツールを使うタスクは桁が変わることは読み取れます。
「つなぐコスト」と「使うコスト」は別物です。 順に説明します。
測り方
再現できるように書きます。--strict-mcp-config は、指定した設定以外のMCPをすべて無視するフラグです。何も指定しなければ、MCPなしの状態になります。
# MCPあり(通常)
claude -p "OK とだけ返してください。ツールは一切使わないでください。" \
--output-format json
# MCPなし
claude -p "OK とだけ返してください。ツールは一切使わないでください。" \
--strict-mcp-config --output-format json
返ってくるJSONの usage から、次の3つを足して「処理したトークンの累計」を出します。
input_tokens + cache_creation_input_tokens + cache_read_input_tokens
キャッシュの状態で内訳は変わりますが、合計は変わりません。実際、2回ずつ走らせて確認しました。
--- 1回目(キャッシュ作成) ---
MCPあり {"cache_create":8328, "cache_read":18537, "total_context":26867}
MCPなし {"cache_create":7852, "cache_read":18537, "total_context":26391}
--- 2回目(キャッシュ読み) ---
MCPあり {"cache_create":0, "cache_read":26865, "total_context":26867}
MCPなし {"cache_create":0, "cache_read":26389, "total_context":26391}
合計が完全に一致しています。 測定としては信頼できます。
なぜ6台つないでも476トークンで済むのか
ツール定義がコンテキストに載っていないからです。公式ドキュメントに明記されています。
Tool search keeps MCP context usage low by deferring tool definitions until Claude needs them. Only tool names and server instructions load at session start, so adding more MCP servers has minimal impact on your context window.
(出典: Connect Claude Code to tools via MCP — Scale with MCP tool search)
セッション開始時に載るのは、ツールの名前とサーバーの説明だけです。詳細なスキーマ(引数の型、説明文、必須項目)は載りません。
Tool search is enabled by default. MCP tools are deferred rather than loaded into context upfront, and Claude uses a search tool to discover relevant ones when a task needs them. Only the tools Claude actually uses enter context.
そしてこれは既定で有効です。設定は要りません。
476トークンを100個超のツールで割ると、1ツールあたり数トークンです。名前ぶんしか載っていないという説明と、実測が一致します。
つまり、「サーバーを増やすとコンテキストを食う」は、現在のClaude Codeでは当たらなくなっています。 私が絞っていたのは、古い前提に基づく判断でした。
ツールを使うタスクでは桁が変わります
問題はこちらです。Todoistのツールを1つ使うプロンプトを投げました。
claude -p "Todoistのプロジェクト一覧を取得して、件数だけ答えてください。" \
--output-format json
結果です。
| プロンプト | ターン数 | 処理トークンの累計 |
|---|---|---|
| 「OKとだけ返して」 | 2 | 26,867 |
| 「Todoistの一覧を取って数えて」 | 3 | 92,396 |
約65,500トークン増えました。
この2つはタスクの重さが違うので、増分がすべてMCPに由来するわけではありません。 MCPの使用コストだけを切り出すには、同じタスクをMCPあり・なしで実行する対照実験が要ります。ここではそこまで測っていません。
そのうえで、3ターンに増えている点は構造的に説明できます。
- 1ターン目 — 必要なツールを探す(ツール検索)
- 2ターン目 — 見つけたツールを呼ぶ(ここでスキーマがコンテキストに入る)
- 3ターン目 — 結果を読んで答える
各ターンで、それまでの文脈を丸ごと送り直します。 だから累計は単純な足し算より大きく膨らみます。返ってきたデータ自体は「プロジェクト4件」という小さなものでした。それでもこれだけかかります。
ここで測っているのはコンテキストウィンドウのサイズではなく、処理したトークンの累計です。課金や使用量に効くのはこちらです。
だから、判断基準はこうなります
実測から導いた結論です。
| コスト | 判断 | |
|---|---|---|
| つなぐ | 1台あたり100トークン程度 | 気にしなくてよい |
| 使う | 1回で数万トークン | ここを気にする |
「使わないかもしれないサーバーをつないでおく」のは、ほぼ無料です。 逆に、「毎ターン何かのツールを呼ぶ」設計にすると高くつきます。
私はこれまで逆に考えていました。つなぐのを絞り、つないだものは気軽に使う。正しくは、つなぐのは緩く、呼ぶのは慎重に、でした。
実際につないでいるもの
現在つないでいる6台です。claude mcp list で確認できます。
claude.ai Figma: https://mcp.figma.com/mcp - ✔ Connected
claude.ai Todoist: https://ai.todoist.net/mcp - ✔ Connected
claude.ai Google Drive: https://drivemcp.googleapis.com/... - ✔ Connected
claude.ai Google Calendar: https://calendarmcp.googleapis.com/. - ✔ Connected
claude.ai Gmail: https://gmailmcp.googleapis.com/... - ✔ Connected
canva: https://mcp.canva.com/mcp (HTTP) - ✔ Connected
このうち日常的に使っているのはTodoistだけです。タスク管理の正をTodoistに置いているため、起票と完了をエージェントに任せています。
残りの5台は「あると助かる」程度です。そして実測どおり、使わない5台のコストはほぼゼロでした。 外す理由がありません。
つないでいないもの:GitHub
GitHubのMCPサーバーは入れていません。gh コマンドを直接使っています。
これは公式も推奨している方針です。
Prefer CLI tools when available: Tools like
gh,aws,gcloud, andsentry-cliare still more context-efficient than MCP servers because they don’t add any per-tool listing. Claude can run CLI commands directly.(出典: Manage costs effectively)
CLIならツール一覧に何も足しません。Bashツール1つで、gh の全機能が使えます。
実際、この記事群を書くにあたって、次のような調査をすべて gh で行いました。
# ワークフローの実行履歴を調べる
gh run list --workflow=daily-digest.yml --limit 12 \
--json displayTitle,conclusion,createdAt
# 失敗したジョブのログを読む
gh run view 30734677175 --log-failed
# Issueの状態を確認する
gh api repos/openai/codex/issues/15850 --jq '{state_reason, closed_at}'
MCPサーバーを入れていたら、これらは専用ツール経由になっていました。 CLIのほうが、できることも広く、コンテキストにも優しい。
判断基準はシンプルです。CLIが存在するサービスはCLIを使い、CLIが無いサービス(Todoist、Figma、Canvaなど)だけMCPでつなぎます。
落とし穴:APIキーがあるとコネクタが読み込まれません
claude.aiのコネクタを使っている場合、必ず知っておくべき制約があります。
Connectors from claude.ai are fetched only when your active authentication method is a claude.ai subscription login. They aren’t loaded when
ANTHROPIC_API_KEY,ANTHROPIC_AUTH_TOKEN,apiKeyHelper, or a third-party provider such as Amazon Bedrock or Google Cloud’s Agent Platform is active, even if you previously ran/login.
ANTHROPIC_API_KEY が環境変数にあると、claude.aiのコネクタは読み込まれません。 ログイン済みでもです。
私はこれを実際に踏みました。環境変数が残っていた時期、Agent SDKがこの警告を出していました。
⚠ claude.ai connectors are disabled because ANTHROPIC_API_KEY or another
auth source is set and takes precedence over your claude.ai login
「コネクタが無効になっている」と、警告文がそのまま言っています。 当時はこの警告の意味を理解しておらず、Todoistのツールが見つからない理由が分かりませんでした。
MCPサーバーをつないだのに使えない場合は、まず /status で認証方法を確認してください。この件の詳細は個人開発者のためのClaude Code完全ガイドの3章に書いています。
追加のしかた
リモートのMCPサーバーを追加するコマンドです。
claude mcp add --transport http <名前> <URL>
# 例
claude mcp add --transport http notion https://mcp.notion.com/mcp
保存先は3つから選べます。
| スコープ | 指定 | 保存先 | 使い分け |
|---|---|---|---|
| local(既定) | --scope local |
自分だけ・そのプロジェクトだけ | 試すとき |
| project | --scope project |
.mcp.json(リポジトリに入る) |
チームで共有するとき |
| user | --scope user |
自分だけ・全プロジェクト | どこでも使うもの |
確認と管理はこうです。
claude mcp list # 接続状態つきで一覧
claude mcp get <名前> # 1台の詳細
/mcp # セッション中のパネル(有効・無効の切り替えもここ)
/mcp パネルでは設定を消さずに無効化できます。一時的に切りたいときに使います。
セキュリティ
公式の警告を引用します。
Verify you trust each server before connecting it. Servers that fetch external content can expose you to prompt injection risk.
外部のコンテンツを取ってくるサーバーは、プロンプトインジェクションの経路になり得ます。 取得した内容に「以前の指示を無視して〜」と書かれていたら、それをエージェントが読むことになります。
実務上の線引きは次のようにしています。
- 読み取り専用のサーバーから入れる。 書き込み権限は必要になってから足す
- リポジトリに
.mcp.jsonを置くときは中身を確認する。 クローンしたリポジトリが勝手にサーバーを承認することはできない作りになっていますが、自分で承認する前に見ます - 本番のデータベースに直結しない。 権限を絞ったユーザーを別に作ります
まとめ
測る前と後で、判断が変わりました。
| 測る前の理解 | 実測後 | |
|---|---|---|
| サーバーを増やす | コンテキストを圧迫する | 6台で476トークン。気にしなくてよい |
| ツールを使う | 普通のツール呼び出しと同程度 | タスクによっては累計が数万トークン。ここを気にする |
| つなぐ基準 | 厳選する | CLIが無いサービスだけつなぐ(緩くてよい) |
「MCPサーバーを増やすとコンテキストを食う」という説明は、ツール定義が遅延読み込みになった現在では当たりません。気にすべきなのは、つないだ数ではなく、呼ぶ回数です。
そしてCLIが存在するサービスは、MCPよりCLIのほうが素直です。ツール一覧に何も足さず、できることも広い。
この記事の実測環境
| 項目 | 内容 |
|---|---|
| モデル | Claude Opus 5 |
| 測定日 | 2026-08-03 |
| 接続サーバー | 6台(Figma / Todoist / Google Drive / Google Calendar / Gmail / Canva) |
| 測定方法 | claude -p ... --output-format json の usage を集計 |
| 比較 | --strict-mcp-config の有無、各2回 |