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の扱いを調整して、なるべくバグを踏まない運用にするのが現実解になりそうです。

Qualiteg 技術コンサルティング

あなたの Claude Code、もっと活躍してくれます。

AIエージェント前提の開発に、まだ決まった「正解」はありません。私たちは自社の開発で Claude Code を使い倒し、「効くやり方」と「ハマりどころ」を体系化してきました。

何十年もソフトウェアエンジニアリングの第一線に立ってきた当社のエンジニアが本気で取り組んだ、その実戦知見を、まとめてお渡しします。

Claude Code 活用支援を見る →

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

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

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

Read more

Claude Fable 5はこれからどうなる? 経緯・コスト・今後の見通しをファクトベースで整理する

Claude Fable 5はこれからどうなる? 経緯・コスト・今後の見通しをファクトベースで整理する

こんにちは! 2026年7月2日(日本時間)、日本からもClaude Fable 5が再び利用できるようになりました。 2026年6月に大きな注目を集めて登場し、わずか3日で米政府の指令により停止、そして7月1日(米国時間)に復活したAnthropicの最上位モデル「Claude Fable 5」。 復活と同時に 「サブスクで使えるのは7月7日まで」 という条件が付いたことで、利用者の間ではコストへの懸念の声も見られます。 本記事では、憶測と事実を切り分けながら、 (1)これまでの経緯、 (2)確定している料金体系、 (3)実際のコスト試算、 (4)今後の見通し、 の4点を整理します。確定情報(ファクト)と筆者の推測は明確に区別して書きます。 ※本記事の日付は、特記のない限りAnthropicの発表に基づく米国時間を基準としています。 なお当ブログでは、Fable 5 / Mythos 5についてリリース直後の技術解説、米政府指令による停止が示した可用性リスクの考察、Fable 5の安全分類器がClaude Code上で実際にどう振る舞ったかの体験記を公開してきました。

By Qualiteg コンサルティング
モデルを「壊さずに」ドメインを広げる ― XLM-RoBERTa 継続学習の設計ノート

モデルを「壊さずに」ドメインを広げる ― XLM-RoBERTa 継続学習の設計ノート

こんにちは、Qualiteg研究部です。 今日は「すでに完成している強いモデルを、壊さずに広げる」という、地味だけど実務でとても大事なテーマを取り上げたいと思います。 機械学習に取り組んでいると、 「一度しっかり仕上げたモデルを、新しい用途やデータに合わせてもう少し広げたい」 そんな場面はよく出てきます。 今回ご紹介するNER(固有表現抽出)のシーンに限らず、いろいろなタスクで共通する悩みではないでしょうか。 ところが、ここで素朴に追加学習をかけると、せっかくの強みがあっさり崩れてしまう。 私たちは、PII(個人特定情報や要配慮情報)を検出・マスキングするエンジン(PII-FI)を構築する際、実際にそれを経験しました。 Precision(適合率)が 0.83 から 0.17 まで転げ落ちる、なんてことも本当に起きるんです。 PII検出では、ドメイン(分野)ごとに検出したいPII型の種類や求められる精度が異なる場合があります。そこで1つのエンジンといっても、対応ドメインを広げていくたびに(そのドメインに適応させるための)追加学習が求められることがあります。 本稿は、そう

By Qualiteg 研究部
Claude Codeで出てくる「court」って何? “XML露出” 現象とツール呼び出し未実行事故の対策

Claude Codeで出てくる「court」って何? “XML露出” 現象とツール呼び出し未実行事故の対策

こんにちは! Qualitegプロダクト開発部です。 Claude Code を使っていると、ツール呼び出しの XML(<invoke> や <parameter>)が画面にそのまま表示されたり、実際にはコマンドや PR 作成が実行されていないのに「完了しました」と報告されたりして、動作がおかしくなることがあります。 そして、その呼び水となる文字列 court や course や count が出現します 本稿では、 この現象(本稿では「XML露出」と呼びます)を実ログから解説し、検知と対策をまとめました。 ● ● ●  claude-code — bash➜ ~/qualiteg-project claude> プロジェクト配下のストレージ使用量を調査します。court<invoke name="Bash">

By Qualiteg プロダクト開発部
AIが攻撃と防御の両方を変える――セキュリティ市場2026と次の10年

AIが攻撃と防御の両方を変える――セキュリティ市場2026と次の10年

ここ数年で、サイバーセキュリティをめぐる議論の前提は大きく変わりました。かつての中心は「いかに侵入を防ぐか」でしたが、いまは攻撃側も防御側も、ともにAIを使い始めています。攻撃が機械の速度で自動化・大規模化する一方、防御も人手だけでは追いつかない領域に入りつつあります。本記事では、公開されている市場データをもとに、AI時代のセキュリティ市場を「どこが伸び、どこが重なり、どこに注意すべきか」という観点から整理します。 「AIとセキュリティ」には三つの市場がある 最初に、用語を整理しておきます。「AIセキュリティ」とひとくくりにすると分かりにくいのですが、実際には少なくとも三つの異なるテーマが同時に進んでいます。 この三つの違いは、「誰がAIを使うのか」と「何を守るのか」で考えると分かりやすくなります。 第一は、防御側がAIを使う「AIで守る」領域です。 攻撃者がAIを使っているかどうかにかかわらず、企業やセキュリティ事業者がAIを利用して、サイバー攻撃やインシデントを検知・分析・阻止します。大量のログやアラートの分析、脅威の優先順位付け、異常の検知、初動対応の支援などは、すでに

By Qualiteg コンサルティング, Qualiteg AIセキュリティチーム