Tool Search Claude Code: Tunda Tool MCP, Hemat Konteks

Tool search menjaga pemakaian konteks MCP tetap rendah dengan menunda definisi tool sampai Claude membutuhkannya. Hanya nama tool dan server instructions yang dimuat saat sesi dimulai, dan schema lengkapnya diambil saat diperlukan. Artinya menambah MCP server berdampak minimal pada context window, dan Claude Code tidak menetapkan batas jumlah tool per server.
Biarkan tidak diset untuk memakai default, di mana semua tool MCP ditunda. Setel ke true untuk memaksa deferral lewat proxy, false untuk memuat semuanya di depan, atau auto untuk memuat definisi di depan selama totalnya di bawah 10 persen context window. Pakai auto:N untuk persentase kustom, misalnya auto:5.
Setel alwaysLoad ke true pada entri server tersebut di .mcp.json. Semua tool yang diekspos server itu lalu dimuat saat sesi dimulai terlepas dari nilai ENABLE_TOOL_SEARCH. Sebuah server juga bisa menandai tool tertentu sebagai always-loaded lewat metadata tool-nya, dan itu lebih baik daripada mengecualikan seluruh server ketika hanya satu tool yang terus dibutuhkan.
Ya, secara signifikan. Ketika tool ditunda, server yang menyambung, terputus, atau mengubah daftar tool-nya hanya menambahkan isi dan membiarkan cache utuh. Ketika tool dimuat ke dalam prefix, perubahan apa pun membatalkan cache dan request berikutnya membaca ulang seluruh percakapan — jadi MCP server yang tidak stabil diam-diam menagih satu giliran tanpa cache setiap kali menyambung ulang.
Claude Code kembali memuat tool di depan ketika ANTHROPIC_BASE_URL mengarah ke host non-first-party, pada deployment Microsoft Foundry yang di-host di Azure yang menolaknya di sisi server, dan pada model Google Cloud Agent Platform yang lebih lama dari generasi Claude 4.5. Menyetel CLAUDE_CODE_DISABLE_EXPERIMENTAL_BETAS juga menahannya tetap mati dan tidak bisa ditimpa.

Ringkasan Utama
Tool search Claude Code menunda definisi tool MCP sampai Claude benar-benar membutuhkannya. Hanya nama tool dan server instructions yang dimuat saat sesi dimulai, sehingga menambah MCP server berdampak minimal pada context window Anda. Fitur ini menyala secara default pada model yang mendukung, diatur lewat ENABLE_TOOL_SEARCH, dan dimatikan per server dengan alwaysLoad.
Saya menyambungkan MCP server keenam dan sesi saya terukur menjadi lebih buruk sebelum akhirnya membaik. Bukan karena ada satu tool yang jelek — melainkan karena setiap server itu menerbitkan seluruh schema tool-nya ke dalam system prompt pada setiap request, dan modelnya membaca katalog sebelum membaca pertanyaannya.
Tool search adalah perbaikannya, dan ia sudah cukup lama menjadi default sehingga sebagian besar orang tidak pernah melihat masalahnya. Tulisan ini untuk kasus ketika Anda melihatnya: saat Anda menjalankan banyak server, saat Anda berada di balik gateway yang diam-diam mematikan deferral, atau saat Anda ingin tool satu server hadir di setiap giliran. Isinya empat nilai konfigurasi, jalan keluar alwaysLoad, konsekuensi prompt cache yang jarang disebut, dan apa yang perlu dilakukan penulis MCP server.
Claude Code menyusun tiap request supaya isi yang jarang berubah ada di depan: system prompt beserta definisi tool-nya, lalu konteks proyek, lalu percakapan. Susunan itulah yang membuat prompt caching bekerja. Definisi tool duduk di lapisan paling pertama, dan itu berarti dua hal sekaligus — ia dibayar pada setiap request, dan perubahan apa pun padanya membatalkan semua cache di belakangnya.
Jadi sebuah server dengan empat puluh schema tool yang bertele-tele bukan biaya sekali bayar saat startup. Ia adalah sewa, ditagih tiap giliran, di lapisan yang bila terjadi reconnect di tengah sesi juga bisa merenggut seluruh cache percakapan Anda. Claude Code tidak menetapkan batas jumlah tool per server; batas praktisnya adalah anggaran konteks Anda, dan batas itu tiba lebih cepat dari dugaan orang.
Tool search menyala secara default: tool MCP ditunda dan ditemukan saat dibutuhkan, dengan hanya nama dan server instructions yang dimuat di depan. Environment variable-nya ada untuk kasus ketika default itu keliru bagi setup Anda.
Apa yang dilakukan tiap nilai:
| Nilai | Perilaku | Kapan dipakai |
|---|---|---|
| tidak diset | Semua tool MCP ditunda, dengan fallback untuk setup yang tak didukung | Default, dan hampir selalu benar |
| true | Memaksa deferral dan mengirim beta header lewat proxy | Di balik proxy yang Anda tahu meneruskan blok tool_reference |
| auto atau auto:N | Memuat definisi di depan selama masih di bawah ambang | Beberapa server kecil, di mana langkah pencarian hanya menambah latensi |
| false | Semuanya dimuat di depan, tanpa penundaan sama sekali | Debugging, atau provider yang menolak beta-nya |
# Tool search is ON by default. These override it.
# Threshold mode: load definitions upfront while they total
# under 10% of the context window, defer all of them past that.
ENABLE_TOOL_SEARCH=auto claude
# Same, with your own percentage (N is 0-100).
ENABLE_TOOL_SEARCH=auto:5 claude
# Force deferral even through a proxy. Requests FAIL on proxies
# that do not support tool_reference blocks — that is the trade.
ENABLE_TOOL_SEARCH=true claude
# Load everything upfront, the pre-tool-search behaviour.
ENABLE_TOOL_SEARCH=false claude
# Or put it in the env block of settings.json so it applies
# to every session rather than the one you remembered to flag.Sebagian tool memang dibutuhkan Claude di hampir setiap giliran, dan memaksanya menjalankan langkah pencarian lebih dulu hanyalah latensi tanpa penghematan konteks. Field alwaysLoad mengecualikan satu server dari deferral sepenuhnya, dan tersedia di semua tipe server. Pakai untuk sedikit tool saja, karena tiap tool di depan memakan konteks yang seharusnya tersedia untuk percakapan Anda yang sebenarnya.
// .mcp.json — exempt ONE server from deferral. Every tool it
// exposes loads at session start regardless of ENABLE_TOOL_SEARCH.
{
"mcpServers": {
"core-tools": {
"type": "http",
"url": "https://mcp.example.com/mcp",
"alwaysLoad": true
}
}
}
// Cost: alwaysLoad makes STARTUP WAIT for that server's tools,
// capped at the standard 5-second connect timeout, because they
// have to be present when the first prompt is built. Other
// servers connect in the background.
//
// A server can also mark a SINGLE tool always-loaded by putting
// "anthropic/alwaysLoad": true in that tool's _meta object.
// To remove the search step itself rather than the deferral:
{
"permissions": { "deny": ["ToolSearch"] }
}Menyetel alwaysLoad membuat startup menunggu tool server tersebut, dibatasi lima detik oleh connect timeout standar, karena tool-nya harus sudah ada saat prompt pertama dibangun. Server lain menyambung di latar belakang. Server remote dengan entri cache yang valid menyuplai tool-nya dari cache tanpa menyambung, jadi ia tidak menahan startup — artinya flag ini jauh lebih murah pada server yang sudah pernah Anda sambungkan ketimbang pada yang masih dingin.
Ini bagian yang tidak saya duga, dan ia mengubah cara saya memandang stabilitas MCP. Ketika tool ditunda, server yang menyambung, terputus, atau mengubah daftar tool-nya hanya menambahkan isi baru — ia tidak mengusik apa pun yang sudah ter-cache. Ketika tool dimuat ke dalam prefix, perubahan apa pun padanya membatalkan cache dan request berikutnya membaca ulang seluruh percakapan Anda.
Itu penting karena MCP server bisa terputus tanpa Anda melakukan apa pun. Proses server stdio keluar, sesi HTTP kedaluwarsa, sebuah server menyambung ulang setelah kegagalan sesaat, atau server yang terhubung mengirim pembaruan tool dinamis yang mengubah daftarnya. Dengan deferral menyala, tidak satu pun dari itu menagih cache percakapan Anda. Dengan deferral mati, server yang labil diam-diam menagih Anda satu giliran tanpa cache setiap kali ia berkedip.
Kalau angka cache creation token Anda tetap tinggi giliran demi giliran dan Anda tidak paham sebabnya, periksa dulu apakah tool search benar-benar aktif sebelum melihat hal lain. Gateway yang mematikannya ditambah satu server stdio yang tidak stabil adalah kombinasi yang memproses ulang seluruh riwayat Anda pada jadwal yang tidak pernah Anda tetapkan.
Defaultnya adalah deferral, tetapi Claude Code kembali ke pemuatan di depan pada beberapa situasi, dan tidak satu pun mengumumkan dirinya:
Deferral mengubah apa yang seharusnya server Anda terbitkan. Claude hanya melihat nama tool dan server instructions Anda sampai ia memutuskan untuk mencari, jadi field instructions mengerjakan tugas yang biasanya dilakukan deskripsi skill — ia harus menjelaskan kapan Claude perlu datang mencari:
Sebuah server bisa menandai satu tool sebagai always-loaded dengan menyertakan penanda alwaysLoad pada objek metadata tool tersebut, alih-alih mengecualikan seluruh server. Itu granularitas yang tepat untuk server dengan satu tool yang terus dipakai Claude dan tiga puluh yang hanya sesekali, dan ia jauh lebih sopan sebagai tetangga daripada menyetel flag di level server.
Ini dua hal berbeda dan layak dipisahkan. Deferral menyangkut apa yang dimuat ke dalam prefix; tool ToolSearch adalah cara Claude mengambil definisi yang ditunda itu belakangan. Anda bisa menolak tool tersebut lewat permission rule, yang membiarkan deferral tetap berlaku tetapi menghapus kemampuan Claude mengambil yang ditunda — berguna ketika Anda menginginkan penghematan konteksnya dan sudah menjadikan setiap tool yang benar-benar dibutuhkan Claude sebagai always-loaded.
Untuk organisasi, kendalinya ada di tempat lain lagi. Managed settings bisa menjaga tool search tetap menyala di seluruh organisasi, dan managed MCP configuration mengatur server mana yang boleh disambungkan pengguna. Kalau tujuan Anda membatasi biaya konteks satu tim ketimbang sesi Anda sendiri, pasangan itulah tuasnya, bukan environment variable.
Aturan yang sekarang saya pakai sederhana: biarkan tool search menyala, tandai dua atau tiga tool yang benar-benar dipakai tiap giliran sebagai always-loaded, dan perlakukan angka cache creation yang terus tinggi sebagai sinyal bahwa ada sesuatu di lapisan tool yang bergerak. Penghematan konteks memang judulnya, tetapi alasan saya peduli adalah cache-nya — deferral adalah yang mencegah MCP server tidak andal diam-diam merenggut riwayat percakapan Anda tiap beberapa menit.
Sumber & bacaan lanjutan