できること
ターン間でツールを出し入れ
tools に全ツールを宣言しておき、tool_addition と tool_removal ブロックで、会話の特定の位置以降に提示するツールを追加・取り下げできます。プロンプトキャッシュは保たれます。
メッセージ内でツールを定義
tool_addition ブロックにツールの完全な定義を含めると、会話開始時点で未知のツールの追加や、スキーマの変更、サーバーツールの新バージョンへの移行ができます。tools を編集する必要はありません。
途中で MCP サーバーを追加
MCP コネクタのベータヘッダーを併用すると、tool_addition の定義に mcp_toolset を指定し、tools を編集せずに MCP サーバーのツールを使えるようにできます。
機能解説
概要
会話全体でツール一覧を固定せず、tools に宣言したツールを tool_addition / tool_removal ブロックで会話の特定の位置から提示したり取り下げたりします。tools 配列自体は変わらないため、キャッシュされたプロンプトのプレフィックスはそのまま保たれます。
この機能では、ツール一覧を会話全体で固定する代わりに、ターン間でモデルに提示するツールを変更します。
tool_additionとtool_removalは、role: "system"メッセージのcontent配列に入れるコンテンツブロックです。toolsに宣言したツールは、defer_loading: trueを付けない限り会話の最初から提示されます。tool_additionは、以前のtool_removalで取り下げたツールを再び提示する用途にも使えます。- MCP コネクタのツールは、
mcp_tool_reference(server_nameとname)で個別に、またはmcp_toolset_reference(server_name)でツールセット全体として参照できます。 tools配列自体は変わらないため、キャッシュされたプレフィックスは保たれます。
メッセージ内でのツール定義
inline-tools-2026-09-15 ベータヘッダーを使うと、tool_addition ブロックでツールを参照ではなく値として、完全な定義ごと指定できます。定義は tool_definition 型の tool オブジェクトで包み、definition には通常の tools の項目(カスタムツール、または Anthropic 定義のクライアントツール・サーバーツール)を、cache_control や defer_loading を含む通常の設定のまま指定します。
- 定義した位置以降、モデルは
toolsに宣言したツールと同じようにそのツールを呼び出せます。 - 同一の定義を再送しても何も変わらないため、リトライ時などに安全に再送できます。
- 同じ名前で異なる定義を送ると、その位置以降は新しい定義が以前の定義を置き換えます。スキーマの変更やサーバーツールの新バージョンへの移行に使います。
tool_removalは引き続き参照で指定します。削除したツールは、後で再定義・再提示できます。
会話途中での MCP サーバーの追加
会話の途中で MCP コネクタのサーバーを追加するには、inline-tools-2026-09-15 に加えて mcp-client-2026-09-15 ベータヘッダーを送ります。
- サーバーの接続情報は通常どおり
mcp_serversに記載し、サーバーを使えるようにしたい位置にmcp_toolsetを定義とするtool_additionを追加します。 tool_additionブロックにはサーバーの URL やトークンを含めません。これらはmcp_serversに置いたままにします。- API がサーバーのツール一覧を取得したレスポンスは、取得したサーバーごとに 1 つの
mcp_tool_listingブロックで始まります。 - assistant メッセージを
mcp_tool_listingブロックを含めて変更せずに送り返し、そのブロックを含むすべてのリクエストでmcp-client-2026-09-15を送り続けます。送り返した一覧は固定され、以降のリクエストはサーバーに再度問い合わせず、記録された一覧を使います。
制約とエラー
toolsに宣言されていない名前を参照すると 400 エラーになります。Claude API ではerror.details.error_codeがtool_reference_unresolvedになります。- 別の種類のツールの名前を再利用する定義は、
error.details.error_codeがtool_name_conflictの 400 エラーになります。 - ベータ期間中は、computer use tool を含む一部のツール種別をメッセージ内で定義できず、400 エラーになります。これらは
toolsに宣言し、参照で追加します。 tools配列に deferred でないツールが 1 つも無い場合、値で定義した最初のツールがレンダリングされるプロンプトの先頭を変えるため、そのリクエストで 1 回、キャッシュが完全にミスします。- 一時停止した(paused)
assistantターンの直後には、textブロックは受け付けられますが、tool_additionとtool_removalブロックは受け付けられません。先に一時停止したターンを再開し、次のsystemメッセージでツール変更を送ります。 - ターン単位の system メッセージ(turn-scoped)に
tool_addition/tool_removalを入れると 400 エラーになります。これらにはclear_atを付けない別のrole: "system"メッセージを使います。
提供状況の注意
この機能はベータとして提供されています。会話途中のツール変更は、Claude Fable 5、Claude Mythos 5、Claude Opus 4.8、Claude Opus 5 でベータ提供されました。メッセージ内でのツール定義は、inline-tools-2026-09-15 ベータヘッダーにより Claude API でベータ提供されています。対象プランについては、公式のリリースノートには記載がありません。
使い方
ここでは、あらかじめ宣言したツールを参照で追加・削除する流れを示します。
- リクエストに
inline-tools-2026-09-15ベータヘッダーを付けて送ります。 - 会話で使う可能性のあるツールをすべて、最初から
toolsに宣言します。defer_loading: trueを付けたツールは、tool_additionブロックで提示されるまでモデルに提示されません。 role: "system"メッセージにtool_additionまたはtool_removalブロックを入れ、各ブロックのtoolフィールドを{"type": "tool_reference", "name": "..."}の形にして、toolsに宣言したツール名を指定します。これらのブロックは同じメッセージ内でtextブロックと混在できます。
利用シーン
会話の進行段階に応じて、モデルに提示するツールを絞り込んだり入れ替えたりするエージェントの実装に向いています。
会話開始時点では存在が分からないツールや、途中でスキーマが変わるツールを扱う場面に使えます。
会話の途中でサーバーツールを新しいバージョンへ移行する場面に使えます。
会話の途中から MCP サーバーのツールを使えるようにしたい場面に使えます。
ChatGPT・OpenAI の対応する機能
比較の単位となる業務: 会話途中でのツールの追加・削除・定義変更 (プロンプトキャッシュを維持)
OpenAI の Responses API には、キャッシュされたプロンプトのプレフィックスを保持したまま、会話の途中で推論努力レベルを変更する制御があります。Mid-conversation tool changes は、キャッシュされたプレフィックスを保ったまま、会話のターン間でモデルに提示するツールを追加・削除・再定義する機能です。どちらも会話の途中で設定を変えながらキャッシュを保つ仕組みですが、変更の対象は前者が推論努力レベル、後者がツールです。
これまでの変更
会話途中の system メッセージ内でツールを定義する機能が、
inline-tools-2026-09-15ベータヘッダーにより Claude API でベータ提供されました。tool_additionブロックにツールの完全な定義を含められ、同じヘッダーで参照によるツールの追加・削除も扱えます。MCP コネクタのmcp-client-2026-09-15ベータヘッダーを併用すると、定義を MCP ツールセットにでき、mcp_tool_listingブロックでツール一覧を固定できます。会話途中のツール変更が Claude Fable 5、Claude Mythos 5、Claude Opus 4.8、Claude Opus 5 でベータ提供されました。プロンプトキャッシュを保ったまま会話のターン間でツールを追加・削除でき、当時はリクエストに
mid-conversation-tool-changes-2026-07-01ベータヘッダーを含めて使う形でした。