Claude Codeのtool_use.name 200文字超エラーの原因と直し方
tool_use.nameが200文字を超えるAPI Error 400で会話が進まない原因と、claude updateで再開する手順をv2.1.281の前後の違いとあわせて扱います。
API Error: 400 ... tool_use.name: String should have at most 200 characters が出て、何を送っても同じエラーが返る。/compact も --resume も効かない。これは会話履歴に200文字を超えるツール名が残っているときに起きる状態で、対処は claude update で更新してから会話を再開することです。
このエラーは何を意味するか
Anthropic APIは、リクエストに含まれる過去のツール呼び出し(tool_useブロック)の name に、1〜200文字の制限を設けています。Messages APIのリファレンスでも、ToolUseBlockParam の name は minLength: 1, maxLength: 200 と定義されています。
モデルが存在しないほど長い名前でツールを呼ぶと、その呼び出しが履歴に残ります。履歴は毎回のリクエストで丸ごと送り直されるため、一度入った長い名前が以降のすべてのリクエストを拒否させます。
API Error: 400 ... tool_use.name: String should have at most 200 charactersこのエラーの前提になる数字
ツール名の上限
200文字
APIがリクエストで受け付ける長さ
挙動が変わるバージョン
v2.1.281
読み込み時に切り詰める修正が入った
v2.1.281の前後で何が変わったか
挙動は更新前後ではっきり分かれます。エラー一覧のページは、この境目をv2.1.281に置いています。
バージョンによる挙動の違い
v2.1.281より前
長い名前が履歴に残ったまま、APIがそれを再送するリクエストをすべて拒否します。/compact と --resume も同じ理由で失敗するため、エラーが繰り返され、会話が先に進みません。
v2.1.281以降
レスポンスを受け取った時点と、保存済みの会話を読み込む時点で、名前を200文字に切り詰めます。切り詰めた名前のツールは存在しないので、呼び出しは No such tool available というツールエラーになり、会話はそのまま続きます。
changelogのv2.1.281(2026年9月23日)にも、モデルが長すぎる名前でツールを呼んだ後に、会話がこのエラーで固まり続ける問題を直したという項目があります。
直し方: 更新してから会話を再開する
対処は1つで、claude update を実行してから会話を再開します。更新後のバージョンは、トランスクリプトを読み込むときに長すぎる名前を修復するため、固まっていた会話がもう一度動きます。
固まった会話を動かす手順
- 1
バージョンを確かめる
v2.1.281より前かどうかを見ます。
- 2
更新する
claude updateを実行します。 - 3
会話を再開する
固まっていた会話を
--resumeか/resumeで開き直します。
claude --version
claude update
claude --resume再開の方法は2通りあります。claude --continue は、いまのディレクトリで直近の会話をそのまま開きます。claude --resume は一覧から会話を選んで開きます。どちらも同じセッションIDのまま新しいメッセージを追記していくので、更新後に開き直した会話は、固まった会話の続きとして扱われます。--fork-session を付けたときだけ、履歴を新しいセッションIDにコピーして別の会話として分岐します。固まった元の会話を残したまま試したいときは、この分岐が選択肢になります。
会話の履歴はローカルのJSONLファイルとして ~/.claude/projects/ 以下に保存されます。履歴そのものは更新で失われず、読み込み時に修復されます。新しく会話を始める必要はありません。
--continue には対象外の会話があります。claude -p やAgent SDKで作られた会話と、最初のプロンプトが /loop だった会話は拾われません。非対話モードで固まった会話を直したいときは、--continue で出てこなくても慌てず、--resume にセッションIDを渡して指定します。
更新後に出る「No such tool available」の読み方
更新後は、問題の呼び出しが Error: No such tool available: <ツール名> という形で表示されることがあります。これはモデルが存在しないツールを呼んだ結果として返るツールエラーです。
このエラーは1回だけなら何もしなくて構いません。Claudeがエラーを読み、同じターンの中で続きをやり直すためです。
原因が分かるときは、ツール名のあとに理由の一文が付きます。たとえば Error: No such tool available: read. Tool names are case-sensitive: call Read instead. は、大文字小文字の違いで呼べなかった例です。この一文があれば、メッセージを読むだけで呼び直す先が分かります。
更新後のエラーの切り分け
- Qエラーは400のtool_use.nameですか?答えが別のエラーです。エラー一覧のページから該当の節を探します答えがはい
v2.1.281より前なら
claude updateを実行します。 - Q更新したのに同じ400が出ますか?答えが400は解消しています答えがはい
claude --versionで更新が反映されたか確かめます。 - QNo such tool availableが何度も出ますか?答えが1回だけなら対応は不要です答えがはい
MCPサーバーのツールが対象なら、
/mcpで状態を確認し、失敗しているサーバーを再接続します。
会話が続く
Claudeがツールエラーを読み、別の手段で続きを進めます。
注意したいのは、No such tool availableがツール名の誤りだけで出るわけではない点です。エラー一覧のページによると、MCPサーバーがまだ最初の接続を試している最中にツールが呼ばれた場合も同じエラーになります。再開直後は、v2.1.284より前だと待たずに即失敗していました。v2.1.284以降は、サーバーの接続を待ってからエラーを返します。接続待ちはツール検索の呼び出しの中で行われ、ツール検索を使わない構成では待機用のツールが使われます。
更新しても直らないときの確認先
claude update が効くのは、会話を処理しているClaude Code本体を更新できたときだけです。エラーを出しているバイナリがどこから来たかで、更新の方法が変わります。次の表は、モデル非対応エラーの節にある対応表を借りた確認の手がかりです。
| エラーを出している実行ファイル | 更新の方法 |
|---|---|
| 自分でインストールしたClaude Code | 更新の方法claude update |
| Claudeデスクトップアプリ | 更新の方法アプリを更新する |
| VS Code拡張が同梱するバイナリ | 更新の方法拡張を更新する |
| Agent SDKのパッケージが同梱するバイナリ | 更新の方法SDKのパッケージを上げ、アプリを再起動する |
この表はモデル非対応エラーの節のものです。ただ、どのバイナリがリクエストを送ったかで結果が決まる点は、このエラーにも当てはまります。ターミナルで claude --version が新しくても、拡張やアプリが古いバイナリを使っていれば、そちらで会話が詰まります。
インストール経路の違いにも注意が要ります。HomebrewやWinGetで入れた場合、既定では自動更新されません。stableチャネルで claude update を実行すると、最新ではなく最新のstableまでしか進まないため、claude --version の結果がv2.1.281以上かどうかを更新のたびに見ておくと確実です。
再開そのものが失敗する場合
更新後の再開で別のメッセージが出ることもあります。claude --resume のピッカーで選んだ会話の読み込みに失敗すると、Failed to resume the conversation. と表示されてプロセスが終了コード1で止まります。メッセージに出る claude --resume <session-id> をもう一度実行するのが最初の対処です。
v2.1.285より前では、保存済みの会話に読み取れない行があるだけで再開が失敗しました。同じ失敗が続くなら claude update で更新してから再開します。それでも失敗するときは、claude で新しい会話を始める選択肢が残ります。一方、会話の途中で打つ /resume では、失敗はその会話の中に表示されるだけで、いま動いているセッションは続きます。
自前で履歴を再送するアプリの場合
この制限はClaude Code固有のものではなく、APIの仕様です。Messages APIに履歴を送り直すアプリを自作している場合、保存してある tool_use ブロックの name が200文字を超えていれば、同じ400が返ります。
Claude Code側の修復は、トランスクリプトの読み込み時に名前を切り詰めるものです。自作のアプリには適用されないため、再送の前に名前の長さを確認する処理を足す形になります。たとえば次のような確認です。
// 履歴を送る前に、tool_use の name が 200 文字以内かを確かめる例
for (const msg of history) {
if (!Array.isArray(msg.content)) continue;
for (const block of msg.content) {
if (block.type === "tool_use" && block.name.length > 200) {
block.name = block.name.slice(0, 200);
}
}
}この例はClaude Codeが行う「200文字への切り詰め」と同じ考え方を示したものです。切り詰めた名前に対応するツールは定義にないので、ツール実行側では未知のツールとして扱うことになります。
ほかの400エラーと混同しない
履歴の中身が原因で、再開した会話が毎ターン400で失敗する型は、ほかにもあります。見分けるポイントはエラー文の末尾です。
| エラー文 | 原因の位置 | 直し方 |
|---|---|---|
tool_use.name: String should have at most 200 characters | 原因の位置履歴にある200文字超のツール名 | 直し方claude update で再開する |
server_tool_use.name: Input should be ... | 原因の位置第三者プロキシ経由で混入したツール内容 | 直し方v2.1.246以降へ更新する |
Invalid data in redacted_thinking block | 原因の位置履歴の redacted_thinking ブロック | 直し方v2.1.282以降へ更新する。残れば /clear |
2行目の仕組みは「Unsupported tool content removed」の解説で扱っています。コンテキストの問題で /compact が通らない場合は、auto compactが100%で止まるときの切り分けが別の入口になります。
よくある質問
長いツール名はなぜ履歴に入るのですか
エラー一覧のページは、モデルが過度に長い名前でツールを呼んだ場合、と説明するだけで、そうなる理由には触れていません。MCPのツールは mcp__<サーバー名>__<ツール名> の形で呼ばれるため名前が長くなりがちですが、エラー一覧のページは、この命名形式と今回のエラーを結びつけていません。長いMCPツール名を作るサーバーを使っているなら、サーバー名とツール名の長さを自分で確かめてみる価値はあります。
更新できない環境ではどうすればよいですか
エラー一覧のページが挙げる対処は更新です。更新できない環境向けの回避策は載っていないので、管理者に更新を依頼するか、固まった会話を諦めて新しく始めるかを選ぶことになります。新しい会話に引き継ぎたい内容が少なければ、後者のほうが早く済みます。