Claude Codeで「The model's tool call could not be parsed」が頻発する問題の原因分析と対策

Claude Codeで「The model's tool call could not be parsed」が頻発する問題の原因分析と対策

こんにちは!Qualitegプロダクト開発部です。

Claude Code(CLI)を使った開発中に、次のようなエラーが繰り返し表示されて作業が止まる現象に遭遇しました。

● The model's tool call could not be parsed (retry also failed).

リトライしても直らず、/clear で会話をリセットしても、しばらく作業を続けるとまた同じエラーが出るという状況です。本記事では、実際のセッションログ(jsonl)を解析して特定した原因と、その対策について共有します。

結論から書くと、これは利用者側の設定ミスやコンテキスト枯渇が原因ではなく、

Opus 4.7(1Mコンテキスト)+ extended thinking の組み合わせで発生する、モデル応答側のストリーミングバグ

でした。

現象

エラーが発生した環境は以下のとおりです。

  • Claude Code 2.1.148
  • モデル: Opus 4.7(1M context)
  • プラン: Claude Max
  • セッションの状態: Messages 371.7k / 1M tokens(使用率 約37%、空き58.5%)
  • MCPサーバ: chrome-devtools のみ接続(2.3k tokens)
  • CLAUDE.md: 22.7k tokens
  • auto-compactは未発動

エラーは特定のツール呼び出しに紐づかず、Bash・Edit・MCP(chrome-devtools)など、どの直後でも発生しました。リトライしても同じエラーが返り、最終的に「retry also failed」として停止します。

最初は「会話が長すぎるのでは」「MCPツールが肥大化しているのでは」と疑いましたが、/context を確認すると空き容量が58.5%もあり、その仮説は成立しません。

セッションログから判明した正確な原因

決定的な手がかりは、Claude Code がセッションを保存している jsonl ファイルにありました。

保存場所はOSごとに異なります。

Windows

%USERPROFILE%\.claude\projects\<プロジェクト名>\<session-id>.jsonl

macOS / Linux

~/.claude/projects/<プロジェクト名>/<session-id>.jsonl

<プロジェクト名> の部分は、作業ディレクトリのパスを区切り文字で変換した形式(例: C--Users-foo-projects-myapp) のようにドライブレターやスラッシュが - に置換された名前)になっています。lsdir で該当ディレクトリを確認すれば、最近触ったセッションがファイル名で並んでいます。

このファイルを開き、parseエラーが起きた直前のassistantメッセージを確認すると、以下のような構造になっていました。

このファイルを開き、parseエラーが起きた直前のassistantメッセージを確認すると、以下のような構造になっていました。

{
  "message": {
    "model": "claude-opus-4-7",
    "role": "assistant",
    "content": [
      {
        "type": "thinking",
        "thinking": "",
        "signature": "..."
      }
    ],
    "stop_reason": "tool_use",
    "stop_sequence": null
  }
}

ここに3つの異常が同時に発生しています。

1. content配列が thinking ブロック1つしか含まれていない

通常であれば、thinking のあとに text ブロックや tool_use ブロックが続くはずです。しかしこのレスポンスには thinking だけしか入っていません。

2. thinking の中身が空文字列

"thinking": "" となっており、推論内容そのものが空です。signature フィールドは正しく付いているため、Anthropic API のサーバ側では「thinkingブロックを生成した」ことになっていますが、中身は空です。

3. stop_reason が tool_use なのに tool_use ブロックが存在しない

これが最も致命的です。stop_reason: "tool_use" はモデルが「ツールを呼ぶために停止した」ことを意味するシグナルですが、肝心の tool_use ブロックが content に含まれていません。

Claude Code のparserは「stop_reason が tool_use なら、content に tool_use ブロックがあるはず」という前提でレスポンスを処理します。しかし実際にはそのブロックが存在しないため、The model's tool call could not be parsed というエラーになり、リトライしても同じ壊れた応答が返ってくるため retry also failed となります。

つまり、Claude Code のクライアント側のバグではなく、Anthropic API(モデル)から返ってくるストリーミング応答そのものが不正だったわけです。

関連するAnthropic公式issue

このパターンは、anthropics/claude-code リポジトリの Issue #24662 で報告されている現象とほぼ一致します。同issueでは「ストリーミング中にthinkingブロック間に空のテキスト/thinkingブロックが挿入され、APIに再送できなくなる」事例が報告されています。

また、Mediumの記事「How I Stopped Getting Stream Idle Timeout Errors in Claude Code」(2026年4月)では、Opus 4.7のリリース以降、stream系のエラーが急増しており、4月中旬以降のissueでは Opus 4.7と1M contextバリアントを明示的にトリガーとして名指ししているものが複数あると報告されています。Anthropic側もこれを認識しており、Changelogにはstream-handling周りの修正が継続的に入っています。

原因の整理

事象を整理すると、原因は以下の組み合わせに集約されます。

要因 寄与度
Opus 4.7 の応答ストリーミングのバグ 核心
extended thinking が default で xhigh(thinking-heavy)
1M context バリアント
長期セッション(cache_read 39万トークン超)

特に強調したいのは、コンテキスト使用率や MCP の数は本件の主要因ではなかったという点です。/context で58%空いていてもエラーが発生していたのは、これが入力側の容量問題ではなく、出力側(モデル応答)の構造的なバグだからです。

Opus 4.7 はリリース時にデフォルト effort が xhigh に設定されており、thinkingブロックを多用する設計になっています。1M contextバリアントと組み合わさると、長い入力に対して thinking を吐く際にストリームが崩れやすくなる傾向があるようです。

対策

実際に有効だった対策と、その根拠を順に書きます。

1. effort を下げて thinking を抑える

/effort medium

または low

Opus 4.7 のデフォルトは xhigh です。thinking-heavy な応答ほど、今回のような「空thinkingブロックでstop_reasonがtool_use」のような崩れ方が起きやすくなります。effort を下げることで thinkingの依存度を減らすのが、根本に近い対症療法です。

2. 1M context バリアントを無効化する

set CLAUDE_CODE_DISABLE_1M_CONTEXT=1
claude

公式ドキュメントにも記載のある環境変数です。1M context バリアント特有の出力崩れがあることがGitHub issueで複数報告されているため、これを切ることで再現条件のひとつを潰せます。標準の200kコンテキストの Opus 4.7 に戻ります。

3. 壊れたセッションは resume せず捨てる

このバグの厄介な点は、一度jsonlに壊れたassistantメッセージが書き込まれると、--resume--continue で再開するたびに同じ壊れたメッセージが履歴として再送されることです。Claude Code 側の自動リトライも、サーバ側の応答が同じなら結果も同じです。

exit
claude            # resume/continue は使わない

作業の継続性が必要であれば、CLAUDE.md か履歴ファイル(例: history/HANDOVER.md)に状態をスナップショットしておき、新規セッションで再開する運用にします。

4. Claude Code を最新版に更新する

claude update

2.1.148 → 2.1.150 にはstream-handling周りの修正が継続的に入っています。Anthropic公式もこの種のバグを認識しており、修正版がコンスタントに出荷されているため、なるべく最新を保つのが望ましいです。

5. Anthropicに /bug で報告する

これはAnthropic側のモデル/ストリーミングのバグなので、報告する価値が一番高い対策です。

/bug

session ID と request_id を添えて報告すれば、Anthropic側は該当リクエストのモデル応答を直接調査できます。クライアント設定の問題ではないため、ユーザー側でできる根本対策には限界があり、最終的にはAnthropicの修正を待つしかありません。

効かなかった/効果が薄かった対策

ついでに、最初に試したが効果が薄かった対策も書いておきます。

  • /clear で会話履歴をリセット: 一時的に止まるが、また数ターンで再発。原因がセッション履歴ではなくモデル応答そのものなので根本対策にならない。
  • MCPサーバを切る: 元々2.3k tokensしか使っていなかったので寄与が小さかった。MCPが肥大化している環境では有効。
  • /compact: コンテキスト使用率が低いため意味なし。

まとめ

「The model's tool call could not be parsed (retry also failed)」は、見た目こそ「ツール呼び出しのパースに失敗」ですが、実態はモデル側のレスポンスが構造的に壊れて返ってくる現象でした。

jsonl を確認すると、

  • content に thinkingブロックしかない
  • thinkingが空文字
  • stop_reason: "tool_use" なのに tool_use ブロックが無い

という3点セットが揃っており、これがparserから見ると修復不能です。

今回特定できた現実的な対策は、

  1. /effort medium で thinking を抑える
  2. CLAUDE_CODE_DISABLE_1M_CONTEXT=1 で 1M context を切る
  3. 壊れたセッションは resume せず捨てる
  4. Claude Code を最新版に更新
  5. /bug で Anthropic に報告

の5つです。コンテキストが空いているのにこのエラーが頻発する場合、利用者側を疑うよりも先に、Claude Code のセッションログ(Windowsなら %USERPROFILE%\.claude\projects\、macOS/Linux なら ~/.claude/projects/)配下の jsonl を覗いてみることをおすすめします。アシスタント側の応答が空thinkingブロックになっていれば、本記事のケースと同じ症状です。

最後に補足ですが、この種のバグは Opus 4.7 のリリース以降に増えたもので、Anthropicも認識して継続的に修正を出している状況です。

長期的にはモデル/CLIのアップデートで解消が見込まれます。それまでは effort 設定と1M contextの扱いを調整して、なるべくバグを踏まない運用にするのが現実解になりそうです。

今回もお読みいただきありがとうございました。

何がお役に立てましたら幸いです

それでは、次回またお会いしましょう!

Read more

Mythos(ミュトス)レベルのオープンモデルはいつ出るのか

Mythos(ミュトス)レベルのオープンモデルはいつ出るのか

こんにちは! 本日は、ここ最近のAI業界で一番ざわついている話題、「Claude Mythos(ミュトス)」とその周辺について書きます。 発表から1ヶ月半が経って、ホワイトハウスの反対、日本のメガバンクの動き、AISIの追加評価、Anthropicの方針転換と、状況がかなり動いてきました。ここで一度、「で、結局オープンソースで同じものが使えるようになるのはいつなの?」という素朴な問いに、数字で答えてみます。 2026年4月7日、AnthropicはClaude Mythos Previewを発表しました。 サイバーセキュリティ能力で人類トップ層に到達したとされる、フロンティアモデルです。 Anthropicは"gated research preview"として、Project Glasswingのローンチパートナー(AWS、Apple、Cisco、CrowdStrike、Google、JPMorganChase、Microsoft、NVIDIAなど)に加え、重要ソフトウェアインフラを担う40超の追加組織に限定して提供しており、一般公開はしていません(Anthropic公式)

By Qualiteg 研究部, Qualiteg コンサルティング
AIエージェントを"事業に載せる"ために【第3回】AI導入を止めないために、実務で先に設計すべきこと

AIエージェントを"事業に載せる"ために【第3回】AI導入を止めないために、実務で先に設計すべきこと

— AI導入を"事業に載せる"ために、いま設計すべきこと(全3回) こんにちは!Qualitegコンサルティングチームです。 今回の「AI導入を“事業に載せる”ために、いま設計すべきこと」シリーズも、いよいよ第3回です。 第1回では、実際のAI導入事故を通じて、AIエージェントのリスクが単なる技術不良ではなく、権限や運用設計の不在から生まれることを見てきました。第2回では、事故が起きたときに責任をどこに置くのか、法務・契約・組織の観点から責任分解の難しさを整理しました。 では、AI導入を止めずに前に進めるためには、実務として何を先に設計しておくべきなのでしょうか。 本記事では、品質保証の転換、人間レビューの限界、海外で進む保険市場の変化も踏まえながら、AIエージェント導入前に設計すべき5つの領域と、経営として先に答えるべき3つの問いを整理します。 1. 品質保証の転換:「AIは自信を持って間違える」を前提にする 従来のソフトウェアの品質保証は、少なくとも同じ入力に対して同じ結果を期待しやすく、仕様・テスト・再現性を軸に品質を確認する考え方に立っていました。 ISACA

By Qualiteg コンサルティング
主要LLMプロバイダーのAPI料金表 — Claude / GPT / Gemini/Grok 【2026年5月13日時点】

主要LLMプロバイダーのAPI料金表 — Claude / GPT / Gemini/Grok 【2026年5月13日時点】

こんにちは、 今回は、主要LLMプロバイダー( Claude / GPT /Gemini/Grok)のAPI料金表  をまとめてみました。(2026年5月13日時点) プロバイダ別 料金一覧 まずは各社の現行ラインナップを縦に並べた一覧をご紹介します。価格はすべて per 1M tokens、円表記は 1ドル=160円換算です。 Anthropic(Claude) モデル Status Context Input Output Cached Input Claude Opus 4.7 Fast Mode Beta(Opus専用) 1M $30.00<br>(¥4,800) $150.00<br>

By Qualiteg プロダクト開発部
コーディングエージェントの現状と未来への展望 【第3回】"書くAI"から"指揮するAI"へ──2026年の開発現場で起きている変化

コーディングエージェントの現状と未来への展望 【第3回】"書くAI"から"指揮するAI"へ──2026年の開発現場で起きている変化

こんにちは! コーディングエージェントシリーズ、ついに最終回です! 2026年に入り、Claude Code、Cursor 3、GitHub Copilot Coding Agentはいずれも、単なるコード補完やチャット型支援を超え、複数エージェントを使った開発ワークフローへ進化しつつあります。本稿では、AIコーディングエージェントの最新動向を、Claude CodeのAuto Memory / Subagents、Cursor 3のAgents Window、GitHub CopilotのCoding Agent、そしてSWE-benchの読み方まで含めて整理します。 第1回では、2025年12月時点で百花繚乱状態にあったAIコーディングエージェントの全体像を俯瞰し、商用からOSSまで20以上のツールを「CLIベース」「IDE統合型」「AI特化IDE型」「自律型」の4つのカテゴリに整理しました。 第2回では、Claude Code・Codex CLI・Aiderを詳細比較したうえで、現在のコーディングエージェントが共通して抱える構造的課題——コンテキストウィンドウの限界、セッ

By Qualiteg コンサルティング