ツールを使うと 400 エラーになる問題を修正しました
ツール(function calling)を定義したリクエストを送ると、エラーになる問題がありました。2026 年 9 月 5 日に修正済みです。ご不便をおかけし申し訳ありません。
とくに Claude Code や OpenCode で、拡張機能(MCP サーバー)を追加している場合に発生していました。
症状
リクエストが次のエラーで失敗していました。
{
"type": "error",
"error": {
"type": "invalid_request_error",
"message": "Invalid request"
}
}
Claude Code では API Error: 400 Invalid request と表示されます。
特定のツールを定義している間は、何度送り直しても必ず失敗しました。 再送やしばらく待ってからの実行でも解消しません。
エラーにはどのパラメータが原因かが付いていないため、表示から切り分けることができませんでした。同じ設定でも、有効にしている拡張機能が違えば発生しません。そのため「自分の環境だけ動かない」ように見えていました。設定を見直しても解消しなかった方には、お手数をおかけしました。
影響範囲
対象は ツールを定義して送ったリクエストのうち、ツールの引数に特定の書式チェック(pattern)が指定されているものです。
| リクエスト | 影響 |
|---|---|
ツールの引数に - を含む書式チェックがあり、その引数が入れ子(配列やオブジェクトの中)にある |
必ず失敗しました |
| ツールの引数に書式チェックがあるが、入れ子になっていない | 影響ありません |
| ツールを定義しているが、書式チェックが無い | 影響ありません |
| ツールを定義していない | 影響ありません |
該当するのは、ID やパスのように「使える文字を制限したい」引数を持つツールです。標準の Claude Code や OpenCode に付属するツールだけでは該当しません。一方、MCP サーバーを追加すると、そのツール定義に該当するものが含まれる場合があります。「拡張機能を入れたら動かなくなった」という形になっていたのはこのためです。
影響が出ていたのは 2026 年 8 月 23 日から 9 月 5 日 21 時までです。
原因
ツールを定義したリクエストでは、モデルの出力を定義どおりの形式に強制するため、ツール定義から内部的な文法データを生成しています。
この生成処理と読み込み処理は、推論エンジンの別々の部分が担当しています。生成側が書き出した記法を、読み込み側が受け付けないという食い違いがありました。引数の書式チェックに - が含まれ、かつその引数が入れ子になっている場合にのみ、この記法が使われます。
条件が狭く、標準構成では踏まないため、これまで表面化していませんでした。拡張機能の普及に伴って該当するツール定義が増え、発生するようになったものです。
なお 9 月 3 日から 5 日にかけて同じモデルで別の 400 エラーをお知らせしていますが(thinking の不具合)、そちらとは原因が異なります。症状が同じ 400 Invalid request だったため、切り分けに時間がかかりました。
対応
推論エンジンを、この食い違いが修正された版へ更新しました。生成側が書き出す記法を、読み込み側が正しく解釈するようになっています。
修正後、報告のあったツール定義と、条件を満たす書式チェックの組み合わせを実機で確認し、いずれも正常に応答することを確認しました。更新前に影響を受けていた組み合わせが失敗しないこと、更新前から動いていたリクエストの挙動が変わらないことも併せて確認しています。
課金への影響
失敗したリクエストは課金されていません。
課金は完了したリクエストの usage のみを対象としています。このエラーはモデルが応答を生成する前に発生しているため、トークンは消費されていません。
お客様側の対応
必要な変更はありません。
モデル ID・エンドポイント・API キー・単価はいずれも変更していません。回避のためにツール定義や拡張機能を減らしていた場合は、元に戻していただけます。
export ANTHROPIC_BASE_URL=https://hai-api.hcloud.ltd
export ANTHROPIC_AUTH_TOKEN=hai_...
export ANTHROPIC_MODEL=qwen3.8-27b-uncensored
export ANTHROPIC_SMALL_FAST_MODEL=deepseek-v4-flash