Claude CodeにMCPサーバーを登録して「よし、サブエージェントにも使わせよう」と思ったら、あっさり使えなかった。同じ罠にハマりそうな人のために、原因と回避策をまとめておく。
やろうとしたこと
GA4とSearch ConsoleのデータをMCPサーバー経由で取得する仕組みを作っていた。~/.claude/.mcp.json にサーバーを登録済みで、メインセッションではちゃんと ga4_run_report や search_console_query が呼べる状態だった。
「複数クライアントのデータを並行して取りたい」と思い、Task toolでサブエージェントを生成してMCPツールを呼ばせることにした。
Task tool → サブエージェント生成 → 「search_console_list_sitesを呼んで」
ハマったポイント:サブエージェントはMCPに繋がらない
サブエージェントは search_console_list_sites が見つからないとして処理を止めた。いろいろ調べると、構造的な理由があった。
- MCPサーバーはメインセッションのプロセスに接続されている
- Task toolで生成されるサブエージェントは、独立した別プロセスとして動く
- そのため、メインセッションが持つMCPサーバーの接続をサブエージェントは引き継げない
つまり ~/.claude/.mcp.json に何を登録していても、Task toolのサブエージェントからはMCPツールは一切見えない。
回避策:Pythonで直接APIを叩く
MCPサーバーが「何をやっているか」を考えると、回避策は自然と見えてくる。MCPサーバーはAPIへの認証済みアクセスを中継しているだけなので、同じことをPythonスクリプトで直接やればいい。
# MCPを使わずPythonで直接GA4 APIを呼ぶ
from google.analytics.data_v1beta import BetaAnalyticsDataClient
from google.oauth2 import service_account
creds = service_account.Credentials.from_service_account_file(
'path/to/key.json',
scopes=['https://www.googleapis.com/auth/analytics.readonly']
)
client = BetaAnalyticsDataClient(credentials=creds)
# 以降は通常のAPIコールと同じ
サブエージェントにこのPythonスクリプトを実行させれば、MCPを介さずに同じデータが取れる。
整理:どこでMCPを使うか
| 実行場所 | MCPツール | 向いている使い方 |
|---|---|---|
| メインセッション(直接会話) | ✅ 使える | インタラクティブなデータ確認・試行 |
| Task toolのサブエージェント | ❌ 使えない | — |
| Bashツールでのスクリプト実行 | 不要 | バッチ処理・複数クライアント対応 |
MCPはメインセッションでの「インタラクティブな試行」に向いていて、「バッチ処理」や「並列実行」はPython直接呼び出しで対応する、という使い分けが実用的だと思う。
まとめ
- Claude CodeのMCPツールはTask toolのサブエージェントからは使えない(プロセス分離が原因)
- 回避策はMCPサーバーと同じAPIをPythonで直接呼び出すこと
- MCPはメインセッション専用、バッチ・並列はPythonスクリプトで、と使い分けると迷わない
「MCPで登録したのにサブエージェントで使えない」と詰まっている人は、同じ構造的な理由のはずなので、ぜひPython直接呼び出しを試してほしい。

コメント