Skip to content

原文(日本語に翻訳)

MCP並行呼び出しのタイムアウトハンドリングの問題を修正しました。あるツール呼び出しへのメッセージが、別の呼び出しのウォッチドッグタイマーをサイレントに解除してしまう問題でした。

原文(英語)

Fixed MCP concurrent-call timeout handling where a message for one tool call could silently disarm another call's watchdog

概要

複数のMCPツールを並行して呼び出す際に、あるツール呼び出しへの応答メッセージが誤って別のツール呼び出しのウォッチドッグタイマーをリセットしてしまうバグが修正されました。これにより、本来タイムアウトすべきツール呼び出しが無期限に待ち続けるケースがあり、セッションがハングしたように見える問題が発生していました。この修正により、各MCP呼び出しが独立したタイムアウト管理を持つようになります。

基本的な使い方

この修正はMCPの内部動作に関するものであり、ユーザーが特別な設定をする必要はありません。複数のMCPツールを同時に使用する場合に自動的に恩恵を受けます。

javascript
// MCPツールを複数並行して使用する例(Claude Codeが内部で処理)
// 例えば以下のような並行ツール呼び出し:
// - データベース検索ツール(応答が遅い場合あり)
// - ファイルシステムツール(即座に応答)
// - APIコールツール(ネットワーク遅延あり)

// 修正前: データベース検索の応答がAPIコールのタイマーをリセットする場合があった
// 修正後: 各ツール呼び出しが独自のタイムアウトタイマーを保持する

実践例

複数のMCPツールを並行使用するシナリオ

# ユーザーの指示例
「GitHubのIssue一覧を取得して、同時にデータベースから関連するプロジェクト情報も検索してください」

# 内部動作(修正後):
# 1. GitHub MCPツール呼び出し開始 → タイムアウトタイマーA開始
# 2. データベースMCPツール呼び出し開始 → タイムアウトタイマーB開始
# 3. データベースから応答 → タイマーBをリセット(タイマーAには影響なし)
# 4. GitHubから応答 → タイマーAをリセット
# → 両方のツールが独立して正しくタイムアウト管理される

ハングしていたセッションの症状と改善

# 修正前の問題のあるシナリオ:
# 1. ツールA(遅い)とツールB(速い)を並行呼び出し
# 2. ツールBが応答 → 誤ってツールAのタイマーをリセット
# 3. ツールAが実際には失敗しているのに、タイムアウトが発生しない
# 4. セッションが無期限に待ち続ける(ハングに見える)

# 修正後:
# 各ツール呼び出しのタイマーは独立して動作
# ツールAが設定時間内に応答しなければ、適切にタイムアウト処理される

MCPの設定確認

json
// ~/.claude/settings.json での MCP設定例
{
  "mcpServers": {
    "github": {
      "command": "npx",
      "args": ["-y", "@modelcontextprotocol/server-github"],
      "env": {
        "GITHUB_PERSONAL_ACCESS_TOKEN": "your-token"
      }
    },
    "filesystem": {
      "command": "npx",
      "args": ["-y", "@modelcontextprotocol/server-filesystem", "/path/to/dir"]
    }
  }
}

タイムアウトが関係するシナリオの確認

bash
# MCPサーバーが応答しない場合のデバッグ
# Claude Codeのデバッグログを有効化
export CLAUDE_CODE_DEBUG=1
claude

# ログでMCPタイムアウトに関する情報を確認できる
# 修正後は各ツール呼び出しが独立してタイムアウトする

注意点

  • この修正はMCPツールを複数同時に使用する場合にのみ影響します
  • 単一のMCPツール呼び出しには影響しません
  • タイムアウト値自体の変更はありません。タイマーの管理ロジックが修正されました
  • MCPツールが実際に遅い場合(大量データ処理など)は、引き続き適切な時間がかかります
  • この修正により、以前ハングしていたセッションが適切にエラー処理されるようになります

関連情報