原文(日本語訳)
キャッシュされた接続Promiseが解決されない場合にMCPサーバーの再接続がハングする問題を修正しました。
原文(英語)
Fixed MCP server reconnection hanging when cached connection promise never resolves
概要
MCPサーバーへの再接続時に、キャッシュされた接続Promiseが永久に解決されず、Claude Codeが応答しなくなる(ハングする)問題が修正されました。この問題は、MCPサーバーが一時的に利用できなくなった後に再接続しようとした際や、ネットワーク問題で接続が中断された場合に発生していました。v2.1.9では、適切なタイムアウト処理とエラーハンドリングが追加され、接続が失敗した場合でもClaude Codeがフリーズせずに適切にエラーを報告するようになりました。
問題の詳細
発生していた症状
- MCPサーバーへの接続が切れた後、再接続時にClaude Codeが応答しなくなる
- ローディング表示が永久に続く
- Ctrl+Cでもキャンセルできない場合がある
- MCPサーバーを使用しているツールが全く動作しなくなる
発生シナリオ
ネットワークの一時的な切断
- Wi-Fiの再接続時
- VPN接続の切り替え時
- モバイル接続とWi-Fi間の切り替え時
MCPサーバーの再起動
- サーバープロセスがクラッシュした後
- 設定変更後にサーバーを再起動した場合
- サーバーのアップデート時
タイムアウト後の再接続
- 長時間アイドル後にMCPサーバーが接続を切断した場合
- サーバー側のタイムアウト設定による切断
根本原因
Claude Codeは効率化のため、MCPサーバーへの接続をキャッシュしていました。接続が失敗した場合、このキャッシュされたPromiseが永久に「保留中」状態のまま残り、再接続試行時に新しい接続を作成せずに古いPromiseを待ち続けていました。
修正内容
v2.1.9での改善点:
- タイムアウト処理の追加: 接続が一定時間内に確立されない場合、自動的に失敗として処理
- キャッシュの適切な無効化: 失敗した接続Promiseはキャッシュから削除され、再試行時に新しい接続を作成
- エラー報告の改善: 接続失敗時に明確なエラーメッセージを表示
- リトライロジックの強化: 自動的に再接続を試み、ユーザーに状況を通知
影響を受けていたシナリオ
リモートMCPサーバーの使用
HTTPまたはSSE経由でリモートMCPサーバーに接続している場合に影響がありました。
bash
# 以前は再接続時にハングする可能性があった
claude mcp add --transport http github https://api.githubcopilot.com/mcp/不安定なネットワーク環境
カフェやコワーキングスペースなど、ネットワークが不安定な環境での使用時に問題が発生していました。
開発中のMCPサーバー
開発中のMCPサーバーを頻繁に再起動する場合に影響がありました。
bash
# サーバー開発時の典型的なワークフロー
# 1. MCPサーバーのコードを変更
# 2. サーバーを再起動
# 3. Claude Codeで動作確認
# ← 以前はここでハングする可能性があった対処方法(v2.1.9以前)
v2.1.9より前のバージョンでこの問題が発生した場合:
- Claude Codeを再起動: Ctrl+Cで終了し、
claudeを再実行 - MCPサーバーの状態確認:
/mcpコマンドでサーバー状態を確認 - 接続のリセット: 必要に応じてMCPサーバーを削除して再追加
注意点
- この修正により、MCPサーバー接続の信頼性が大幅に向上しました
- MCPサーバーのタイムアウトは
MCP_TIMEOUT環境変数で設定可能(デフォルト値が使用されます) - ネットワークが不安定な環境でも、適切にエラーが報告されるようになりました
- 既存のMCPサーバー設定に変更は不要です