Claude CodeのMCP呼び出しが固まらなくなった——2026年7月アップデートで変わった3つのこと

Claude CodeのMCP呼び出しが固まらなくなった——2026年7月アップデートで変わった3つのこと

Claude Codeで長時間かかるMCPツール呼び出しが入力欄ごと固まる問題、2026年7月アップデート(v2.1.212〜v2.1.214)で自動バックグラウンド化された。仕組みを一次情報から検証し、EndConversationツール・権限チェック強化の実務影響まで解説する。

エンジニアのゆとです。

MCPサーバーを4つ、5つと繋いで作業してると、たまに嫌な瞬間がある。GitHub MCPで大きめのリポジトリを検索したり、データベースMCPで重いクエリを投げたりした直後、入力欄が完全に固まる。カーソルは点滅してるけど、次の指示を打とうとしても反応しない。処理中なのか死んでいるのか判断がつかないまま、ただ待つしかなくなる。

これ、僕だけの体験じゃない。GitHubのIssueを見ると、同じ不満がずっと前から積み上がっていた。

github.com

2026年3月に立てられたこのIssueには、こう書いてある。「MCPツールを呼ぶと、その呼び出しが完了するまで会話全体がブロックされる。数分〜数時間かかる処理だと、セッションがまるごと使い物にならなくなる」。提案者は、Bashツールにはとっくにrun_in_backgroundがあるのに、MCPツール呼び出しには同等の仕組みがないのはおかしい、と指摘していた。

もっと重いケースも報告されている。

github.com

こちらはMCPサーバー側が再起動して応答が返ってこなくなったケース。Ctrl+Cも効かず、Escも効かず、復旧手段はプロセスをkillして再起動するしかない、という報告だった。

7月のアップデートで、この状況がだいぶ変わった。ここでは公式のリリースノートを一次情報として、何がどう変わったのかを正確に整理する。


なぜ固まるのか——Bashにあった仕組みが、MCPにはなかった

まず前提を揃えておく。Claude Codeが「固まる」原因はひとつじゃない。コンテキストが肥大化して自己中毒を起こすタイプのフリーズについては、以前別の記事で実測データつきで解剖した。

Claude Codeが突然バグる本当の理由を、実測データで特定した

今回扱うのはそれとは別の原因だ。コンテキストが健全でも、ツール呼び出し自体が長引くと会話の流れが止まる、という設計上の制約の話になる。

Bashツールは早い段階からrun_in_backgroundに対応していて、時間のかかるコマンドは裏に回してタスクIDだけ受け取り、作業を続けられた。一方でMCPツール呼び出しは、呼んだら結果が返るまでずっと待つ設計のままだった。理由は単純で、MCPプロトコル自体が同期的なリクエスト/レスポンス前提で作られているからだ。Claude Code側がそれをどう扱うかは実装の話であって、長らく「待つだけ」だった。

この制約は一気に直ったわけじゃなく、6月から7月にかけて段階的に手が入っている。

  • v2.1.187(2026年6月23日): 応答が来ないリモートMCP呼び出しが5分間ハングしたままになる問題を修正。今はタイムアウトしてエラーで返るようになった(CLAUDE_CODE_MCP_TOOL_IDLE_TIMEOUTで上書き可能)
  • v2.1.206(2026年7月10日): --mcp-config.mcp.jsonで個別サーバーに設定したrequest_timeout_msが無視され、新しいセッションだと強制的に60秒でタイムアウトしてしまうバグを修正

つまり「応答が来ないまま無限に固まる」問題はまず塞がれて、そのあとで「応答は来るけど時間がかかる呼び出しをどう扱うか」という本丸に着手した、という順番だ。


2026年7月アップデートで変わった3つのこと

1. MCP呼び出しの自動バックグラウンド化(v2.1.212、2026年7月17日)

公式の変更履歴にはこう書かれている。

MCP tool calls running longer than 2 minutes now move to the background automatically so the session stays usable; configure the threshold or disable with CLAUDE_CODE_MCP_AUTO_BACKGROUND_MS

日本語にすると、2分を超えて実行中のMCPツール呼び出しは自動的にバックグラウンドへ移動し、セッションは操作可能な状態を維持する、という内容だ。閾値は環境変数CLAUDE_CODE_MCP_AUTO_BACKGROUND_MSで変更でき、0を指定すれば無効化もできる。

同じ週のアップデートでは、実行中のツール呼び出しの表示行に経過時間のカウンターが付くようにもなった。2分経つ前の段階でも「止まっているのか処理中なのか分からない」不安がかなり減る変更だ。

2. EndConversationツール(v2.1.214、2026年7月18日)

こちらは直接MCPの話ではないけど、同じアップデートに含まれていたので触れておく。

Added the EndConversation tool: Claude can end sessions with highly abusive users or jailbreak attempts, as on claude.ai since 2025

claude.aiでは2025年から実装されていた「悪質なユーザーやジェイルブレイク試行に対してセッションを終了できる」仕組みが、Claude Codeにも入った。

普段ひとりでターミナルからClaude Codeを使ってる分には縁がない機能に見えるかもしれない。ただ、Claude Codeベースのツールをチームや顧客向けに公開してる人には無関係じゃない。エージェントを外部公開する構成を考えるときの安全弁がひとつ増えた、という理解でいいと思う。

anthropic.com

3. 権限チェックの強化(v2.1.214、2026年7月18日)

同じv2.1.214で、Bashの権限チェックまわりの修正がまとめて入った。細かいけど実務に効くものが多い。

  • 1万文字を超える長いコマンドは、これまで判定漏れで自動実行されるケースがあったが、必ず承認プロンプトを出すように変更
  • zshの変数展開や[[ ]]内の修飾子を含むコマンドを「無害なテキスト」と誤判定していたバグを修正し、正しく承認を求めるように変更
  • helpmanコマンドの一部が、実は危険なオプションやコマンド置換を含んでいても自動承認されていたバグを修正
  • Dockerのデーモンリダイレクト系フラグ(--url--connectionなど、Podmanのリモートモードも含む)を伴うコマンドに、新たに承認プロンプトが必要になった

要は「本当は危ないのに、パターンマッチの穴を突いて自動承認されていたコマンド」が塞がれた、という内容だ。--dangerously-skip-permissionsを使わずにauto-approveの範囲を信頼して運用している人ほど、地味に恩恵がある変更だと思う。


実際に検証してみた

一番気になるのは「本当にセッションは固まらなくなるのか」という点だと思う。手元で確かめた。

長時間かかるMCPツール呼び出し単体をちょうど2分超で切って観察するのは環境依存が大きいので、まずはClaude Codeのバックグラウンド実行そのものの挙動を確認した。Bashでnohup sleep 150(150秒=2分半のダミー処理)をバックグラウンド実行に投げてみると、呼び出しはほぼ即座に制御を返してきた。

Command running in background with ID: bdjypay3r.
Output is being written to: .../tasks/bdjypay3r.output.
You will be notified when it completes.

タスクIDを受け取った時点で、僕は次の作業(このアップデートの公式ドキュメントを読む作業)に普通に移れた。そして裏で走っていた処理が終わったタイミングで、通知が飛んできて完了を教えてくれた。待ってる間、入力欄が塞がることは一度もなかった。

MCP呼び出しの自動バックグラウンド化は、まさにこの仕組みをMCPツール呼び出しにも適用したものだ。GitHub Issue #31427の提案文がそのまま「Bashのバックグラウンド実行にMCP呼び出しを追いつかせる」という表現だったのは、実際に触ってみると納得できた。設計思想としては同じレールに乗っている。

体感として一番効くのは、DB検索やCI連携のような「終わるまでの時間が読めないMCP呼び出し」を投げるときだ。今までは「重い処理を投げる前に、他の作業を切り上げてから待つ」という運用をしていたけど、これからはその必要がなくなる。


これで「MCPが固まる問題」は解決したと言えるか

ここは正確に書いておきたい。今回の変更は「2分を超えて実行中の呼び出し」を裏に回す仕組みであって、応答が永遠に返ってこないケース(Issue #44006のようなMCPサーバー側のスタックしたセッション)を自動で検知して切ってくれるものではない。そのケースに効くのは、6月に入ったアイドルタイムアウト(CLAUDE_CODE_MCP_TOOL_IDLE_TIMEOUT)の方だ。

整理するとこうなる。

  • 応答が来ない・進んでいない呼び出し → アイドルタイムアウトで打ち切られる(v2.1.187〜)
  • 応答は来るが時間がかかる呼び出し → 2分でバックグラウンドに移動し、セッションは動き続ける(v2.1.212〜)

2つの修正が組み合わさって、ようやく「MCP呼び出しのせいでセッションが機能停止する」パターンの大半がカバーされた、という理解が正確だと思う。片方だけ知っていても半分しか安心できない。


FAQ

Claude CodeのMCP呼び出しがフリーズする問題は完全に解決しましたか?

「時間がかかるだけの正常な呼び出し」は2026年7月のv2.1.212で自動バックグラウンド化され、セッションが固まらなくなった。「応答が永遠に返ってこない」ケースは6月のv2.1.187で導入されたアイドルタイムアウトで打ち切られる。両方の修正が揃って初めて、MCP起因のフリーズはかなり解消されたと言える状態になった。

自動バックグラウンド化の「2分」という閾値は変更できますか?

できる。環境変数CLAUDE_CODE_MCP_AUTO_BACKGROUND_MSにミリ秒単位で値を指定すれば閾値を変更でき、0を指定すれば機能自体を無効化できる。

バックグラウンドに移動したMCP呼び出しの結果はどうやって確認しますか?

呼び出しがバックグラウンドに移動した時点でタスクIDが返ってくる。処理が完了すると通知が届き、結果が会話に反映される。Bashのrun_in_backgroundと同じ通知の仕組みを使っている。

EndConversationツールは個人開発者にも関係ありますか?

ターミナルで自分だけがClaude Codeを使う分にはほぼ関係ない。Claude Codeベースのエージェントを顧客やチーム向けに公開している、あるいはそうした構成を検討している人には関係がある機能で、悪質な入力やジェイルブレイク試行に対してセッションを終了できる仕組みだ。

今回の権限チェック強化で、これまで通っていたコマンドが急に承認を求められるようになりますか?

なる可能性がある。1万文字を超える長いコマンド、zshの変数展開を含むコマンド、一部のhelp/manコマンド、Dockerのデーモンリダイレクトフラグ付きコマンドは、これまで判定の穴で自動承認されていたのが、正しく承認プロンプトを出すように修正された。これらに該当する運用をしている場合、アップデート後に一度承認フローを見直しておくといい。

このアップデートを使うにはClaude Codeのバージョンをいくつにすればよいですか?

MCP自動バックグラウンド化はv2.1.212以降、EndConversationツールと権限チェック強化はv2.1.214以降で有効になっている。claude updateまたは/doctor(エイリアス/checkup)で現在のバージョンを確認できる。

Bashのバックグラウンド実行とMCPの自動バックグラウンド化は同じ仕組みですか?

設計思想は同じで、タスクIDを即座に返して作業を継続でき、完了時に通知が届く点も共通している。ただしBashのrun_in_backgroundは明示的に指定する必要があるのに対し、MCPの自動バックグラウンド化は2分という閾値を超えた場合に自動で発動する点が違う。


まとめ

2026年7月のアップデートで、MCPツール呼び出しが長引いてもセッションが固まらなくなった。2分を超えた呼び出しは自動的にバックグラウンドへ移動し、6月に入ったアイドルタイムアウトと合わせて、MCP起因のフリーズはかなりの部分がカバーされた。EndConversationツールと権限チェックの強化も同じ週に入っていて、地味だけど実務で効いてくる変更だ。

MCPサーバーを複数繋いで日常的に使っている人ほど恩恵が大きいアップデートだと思う。バージョンを更新していない人は、claude updateで上げておいて損はない。

MCPサーバーの選定自体で迷っている場合は、こちらもあわせてどうぞ。

Claude Code MCPおすすめ10選 2026——フリーランスエンジニアが本当に使っているサーバーと設定

Claude Code × データベースMCP完全ガイド — PostgreSQL / MySQL / SQLite / Supabase を横断接続する設計と実践

Claude Code × MCP で個人開発を自動化した実践構成と月額コストの話

Claude Code エラー復旧パターン集——タスク失敗から立ち直る7つのテクニック

Claude Codeのコンテキスト管理術 — /compact・/clear・CLAUDE.mdで1Mトークンを使い倒す

← 記事一覧に戻る