Mengurangi Penggunaan Token MCP: Cara Kami Memangkas Definisi Alat Sebesar 60%

Setiap alat MCP yang bisa dipanggil agen Anda adalah blok JSON yang mungkin dibaca model di setiap permintaan. Milik kami berbobot sekitar 95.000 token. Inilah cara mengukur milik Anda dalam dua menit, apa yang kami pangkas tanpa menghapus satu alat pun, dan pemeriksaan anggaran yang mencegahnya membengkak lagi.

Pada 27 Oktober, seorang pengguna berbayar membatalkan langganan AgentsRoom dan menyebut token sebagai alasannya. Sebelum membantah, kami mengukur apa yang ditambahkan aplikasi kami ke setiap agen yang dijalankannya.

Angka terbesar tidak berada di tempat yang kami duga. Instruksi awal kami kecil. Alat MCP yang kami berikan ke setiap agen (backlog, memori proyek, surat antar-agen, terminal, SSH, database, dan lainnya) berjumlah 191 alat dan sekitar 380 KB JSON. Dengan kira-kira 4 byte per token, itu berarti sekitar 95.000 token definisi alat. Seminggu sebelumnya angkanya 78.000. Tidak ada yang memutuskan itu; setiap alat baru sekadar menambahkan paragrafnya sendiri.

Kami membangun AgentsRoom, aplikasi desktop yang menjalankan Claude Code, Codex, dan CLI coding lainnya berdampingan serta memberi mereka alat-alat ini. Inilah yang kami ukur, apa yang kami pangkas tanpa menghapus satu alat pun, dan pemeriksaan yang mencegahnya kembali. Anda bisa menerapkan semuanya ke server MCP Anda sendiri.

Jawaban singkatnya

  • Definisi alat adalah JSON yang mungkin dibaca model di setiap permintaan: nama, deskripsi, skema input. Hitung sekitar 4 byte per token.
  • Apakah Anda membayarnya di setiap giliran tergantung pada CLI. Claude Code menunda pemuatan alat MCP secara default dan memuat sebuah definisi saat membutuhkannya. Sebagian CLI mengirim setiap skema bersama setiap permintaan.
  • Ukur sebelum memangkas. /context di Claude Code, atau skrip 40 baris yang meminta daftar alat dari server mana pun.
  • Persingkat teksnya, pertahankan alatnya. Deskripsi menyebut apa dan kapan. Panduan pemakaian dipindahkan ke dokumen yang dibaca agen saat dibutuhkan. Milik kami turun dari sekitar 95.000 menjadi sekitar 38.000 token, 2,5 kali lebih sedikit.
  • Pasang batas atas di build. Tanpa itu, definisi akan membengkak lagi dengan sendirinya.

Berapa biaya sebuah definisi alat, dan siapa yang membayarnya

Ketika klien MCP terhubung ke server, klien meminta daftar alat. Setiap entri berisi nama, deskripsi yang ditulis untuk model, dan skema JSON parameternya. Klien mengubah daftar itu menjadi definisi alat yang dikirim ke model: begitulah model tahu bahwa alat itu ada dan bagaimana memanggilnya.

Jadi setiap kata dalam deskripsi adalah input yang dibaca model. Seberapa sering model membacanya tergantung pada klien:

  • Claude Code menunda pemuatan alat MCP secara default. Dokumentasinya, dibaca pada 3 November 2026 dengan Claude Code 2.1.314 terpasang, menyebut bahwa saat sesi dimulai hanya nama alat dan instruksi server yang dimuat, dan sebuah definisi dimuat lewat pencarian alat ketika Claude membutuhkan alat itu. Dengan ENABLE_TOOL_SEARCH=false, dengan auto di bawah ambang 10% dari jendela konteks, pada model yang lebih lama dari Claude Opus 4 dan Sonnet 4, atau untuk server yang ditandai alwaysLoad, definisi dimuat sejak awal.
  • CLI lain berbeda. Dalam uji kami sendiri pada 28 Oktober, dengan agen yang diminta menjawab "OK": Claude Code dibuka di 67.500 token dengan alat kami ditunda, Codex CLI 0.164 dibuka di 25.000 token dan tidak mengirim skema kami sebagai satu blok, sedangkan OpenCode memuat 175 alat kami ditambah 19 alat browser saat terhubung dan mengirimnya bersama setiap permintaan. Server yang sama, tagihan yang sangat berbeda.

Cache prompt meringankan biaya ketika daftar alat tidak berubah: setelah permintaan pertama, awalan yang stabil dibaca dari cache dengan harga yang hanya sebagian kecil dari harga input. Cache tidak mengembalikan ruangnya. Definisi tetap menempati jendela konteks di setiap permintaan, di samping kode dan percakapan Anda. Dan mode tunda punya biayanya sendiri: satu langkah pencarian sebelum pemakaian pertama setiap alat.

Ukur milik Anda dalam dua menit

Di Claude Code, jalankan /context. Perintah ini memecah jendela per sumber dan menandai alat MCP yang ditunda atau dimuat sesuai kebutuhan. Jalankan di sesi baru dalam proyek Anda, sebelum mengetik apa pun, dan Anda akan melihat biaya setup Anda sebelum pekerjaan dimulai.

Untuk server apa pun dan CLI apa pun, tanyakan langsung ke server. Server MCP lewat stdio berbicara JSON-RPC, satu pesan per baris: Anda mengirim initialize, lalu tools/list, dan mengukur apa yang kembali. Skrip ini melakukan persis itu, dengan Node dan tanpa dependensi apa pun:

// Usage: node mcp-tool-cost.mjs <command that starts the server> [args...]
import { spawn } from 'node:child_process';

const [cmd, ...args] = process.argv.slice(2);
const server = spawn(cmd, args, { stdio: ['pipe', 'pipe', 'ignore'], shell: process.platform === 'win32' });
const tools = [];
let buffer = '';

const send = (msg) => server.stdin.write(JSON.stringify({ jsonrpc: '2.0', ...msg }) + '\n');
const listTools = (cursor) => send({ id: 2, method: 'tools/list', params: cursor ? { cursor } : {} });

server.stdout.on('data', (chunk) => {
  buffer += chunk;
  let end;
  while ((end = buffer.indexOf('\n')) >= 0) {
    const line = buffer.slice(0, end).trim();
    buffer = buffer.slice(end + 1);
    if (line) handle(JSON.parse(line));
  }
});

function handle(msg) {
  if (msg.id === 1) {
    send({ method: 'notifications/initialized' });
    listTools();
  } else if (msg.id === 2) {
    tools.push(...msg.result.tools);
    if (msg.result.nextCursor) listTools(msg.result.nextCursor);
    else { report(); server.kill(); }
  }
}

function report() {
  const rows = tools
    .map((tool) => ({ name: tool.name, bytes: Buffer.byteLength(JSON.stringify(tool)) }))
    .sort((a, b) => b.bytes - a.bytes);
  const total = rows.reduce((sum, row) => sum + row.bytes, 0);
  for (const row of rows.slice(0, 10)) {
    console.log(`${String(row.bytes).padStart(7)} bytes  ~${Math.round(row.bytes / 4)} tokens  ${row.name}`);
  }
  console.log(`${rows.length} tools, ${total} bytes, about ${Math.round(total / 4)} tokens`);
}

send({
  id: 1,
  method: 'initialize',
  params: { protocolVersion: '2025-06-18', capabilities: {}, clientInfo: { name: 'tool-cost', version: '1.0.0' } },
});

Jalankan dengan perintah yang sama yang dipakai CLI Anda untuk menjalankan server, misalnya node mcp-tool-cost.mjs npx -y @playwright/mcp@latest. Skrip ini mencetak sepuluh alat terberat dan totalnya. Hasil kami pada 3 November 2026:

ServerAlatJSONSekitar
@modelcontextprotocol/server-filesystem 2.1.01412.554 byte3.100 token
@playwright/mcp 0.0.842521.034 byte5.300 token
Alat AgentsRoom, 28 Oktober sebelum pemangkasan191sekitar 380.000 byte95.000 token
Alat AgentsRoom, 28 Oktober setelah pemangkasan191sekitar 152.000 byte38.000 token
Alat AgentsRoom, 3 November203159.957 byte40.000 token

Empat byte per token adalah perkiraan, cukup untuk membandingkan server dan melihat tren, bukan untuk memprediksi tagihan. Tokenizer sungguhan berbeda menurut model dan teks, seperti yang kami temukan saat menghitung 3,8 miliar token kami sendiri.

Server file di atas ukurannya wajar. Masalahnya ada pada jumlahnya: lima server sebesar itu sudah 20.000 token, bahkan sebelum ada server seperti milik kami.

Apa yang kami pangkas, dan apa yang tidak kami sentuh

Aturan yang kami tetapkan: tidak ada alat yang dihapus, tidak ada parameter yang dihapus, tidak ada nilai yang diizinkan atau field wajib yang dihapus. Agen harus mempertahankan semua kemampuannya. Hanya teks yang boleh berubah.

  1. Deskripsi alat menyebut apa dan kapan, dalam satu sampai tiga kalimat. Bukan bagaimana. Bagian bagaimana itulah tempat byte-nya berada: aturan, nilai default, kasus khusus, contoh, peringatan yang ditulis setelah suatu agen pernah salah memakai alat.
  2. Sebuah parameter mendapat satu kalimat, atau tidak sama sekali jika nama, tipe, dan daftar nilai yang diizinkan sudah menjelaskan semuanya. Parameter yang berulang di banyak alat (project, author, ID tiket) mendapat satu kalimat standar yang sama di mana-mana.
  3. Panduan pemakaian dipindahkan, bukan dihapus. Setiap kelompok alat punya file instruksi yang dibaca agen sebelum panggilan pertamanya ke kelompok itu. Untuk alat terbesar kami, yang menyimpan tim agen, referensi lengkap field kini dikembalikan lewat panggilan alat ketika agen memintanya, alih-alih ikut terbawa di skema.
  4. Putaran kedua memeriksa setiap fakta. Setiap kalimat yang dihapus dari deskripsi dicari di file instruksi, dan ditambahkan ke sana jika belum ada.

Sebagian hasilnya, dalam byte JSON per alat:

AlatSebelumSesudah
teams_save19.7059.791
triggers_save16.0144.071
backlog_update13.1504.253
backlog_create11.5654.399

Secara total, 380 KB menjadi 152 KB. Tiga belas alat sebelumnya di atas 4 KB; empat masih di atas, karena jumlah field yang dibawanya. Gagasan di balik seluruh pemangkasan ini: untuk memilih alat, model perlu tahu bahwa alat itu ada dan kapan memanggilnya. Detailnya bisa menunggu sampai saat alat itu benar-benar dipakai.

Jika Anda menulis server MCP, Claude Code memberi satu alasan lagi. Claude Code memotong deskripsi alat yang dimuat sejak awal di 4.096 karakter, dan saat mencocokkan pencarian dengan sebuah deskripsi, ia hanya membaca bagian di dalam batas itu. Apa pun yang penting setelah titik itu mungkin tidak pernah terbaca.

Trik yang sama untuk file awal

Skema alat bukan satu-satunya biaya tetap. Agen kami juga membaca file instruksi tentang alat sebelum memakainya, dan file itu sudah tumbuh hingga 57,7 KB, sekitar 14.000 token, dibaca utuh setiap kali agen dimulai dan setiap kali dilanjutkan. Seorang pengguna melaporkan bahwa agen Codex yang dilanjutkan mencapai batas konteks kerjanya dalam hitungan menit.

Perbaikannya memakai gagasan yang sama. File itu menjadi indeks sekitar 11 KB: aturan yang berlaku untuk semua alat, dan satu baris per kelompok alat yang menunjuk ke file miliknya sendiri. Ke-31 file kelompok hanya dibaca sebelum panggilan pertama ke kelompok tersebut. Isinya tidak berubah, kata demi kata. Agen yang hanya menyentuh backlog tidak pernah membaca bagian tentang database.

Cara ini juga berlaku untuk CLAUDE.md atau AGENTS.md yang panjang: simpan di file yang selalu dimuat apa yang dibutuhkan setiap tugas, dan tautkan sisanya. Kami menulis lebih banyak tentang hal ini di panduan kami tentang AGENTS.md dan file konteks.

Anggaran yang menggagalkan push

Angka yang paling mengkhawatirkan kami bukan 95.000. Melainkan 78.000 seminggu sebelumnya. Setiap alat menambahkan satu paragraf, setiap paragraf masuk akal, dan jumlahnya naik 20% dalam tujuh hari.

Maka ukurannya menjadi pemeriksaan di build. Satu file JSON menyimpan anggarannya:

{
  "totalBytes": 160000,
  "perToolBytes": 4000,
  "oversized": {
    "teams_save": 9791,
    "triggers_save": 4071,
    "backlog_update": 4253,
    "backlog_create": 4399
  }
}

Sebuah skrip menjalankan server MCP kami di sandbox, meminta alat dari masing-masing server, mengukur JSON.stringify(tool) dalam byte, dan keluar dengan error ketika total melewati totalBytes atau ketika satu alat melewati perToolBytes. Empat alat yang sudah terlalu besar dicantumkan beserta ukurannya: sebuah mekanisme ratchet. Mereka boleh mengecil, tidak boleh membesar, dan ketika salah satunya mengecil, skrip meminta angkanya diturunkan. Skrip ini berjalan sebelum setiap push dan di build rilis. Menaikkan batas atas tetap mungkin, tetapi itu keputusan yang ditulis di file, bukan cara untuk meloloskan pemeriksaan.

Pada 3 November, enam hari kemudian, pemeriksaan yang sama membaca 203 alat dan 159.957 byte: dua belas alat ditambahkan, 43 byte di bawah batas atas. Alat berikutnya harus mencari ruang untuk dirinya sendiri. Itulah tepatnya fungsi pemeriksaan ini.

Matikan yang tidak Anda pakai

Token termurah adalah alat yang tidak pernah dilihat agen Anda.

  • Batasi server ke proyek yang membutuhkannya. Server yang dideklarasikan di level pengguna akan mengikuti Anda ke setiap repositori. Di Claude Code, .mcp.json proyek menjaganya tetap di tempat yang berguna.
  • Simpan alwaysLoad untuk segelintir alat saja. Dokumentasi Claude Code mengatakannya dengan lugas: setiap alat yang dimuat sejak awal memakan konteks yang sebenarnya bisa dipakai untuk percakapan Anda.
  • Perhatikan apa yang ditambahkan hasil alat, bukan hanya definisinya. Alat yang mengembalikan satu halaman atau tabel utuh bisa lebih mahal dalam satu panggilan daripada biaya definisinya sepanjang hari.

Di AgentsRoom, Pengaturan > Alat AgentsRoom menampilkan setiap kelompok alat kami beserta bobotnya, dan Anda bisa mematikan satu kelompok atau satu alat saja, untuk semua proyek, satu proyek, satu folder, atau satu agen. Alat yang dimatikan sama sekali tidak ditampilkan ke agen, jadi tidak memakan konteks. Halaman AgentsRoom MCP menjelaskan alat-alatnya, dan jejak sesi menunjukkan apa yang mengisi konteks agen, termasuk alat MCP, diurutkan menurut ukuran.

Apa yang tidak kami ubah

Dua biaya lain muncul dari pengukuran yang sama, dan kami sengaja membiarkannya.

  • Brief awal yang memberi tahu setiap agen perannya dan cara melaporkan statusnya: median sekitar 5.000 token untuk Claude, sekitar 2,5% dari jendela 200.000 token, dan dibaca dari cache mulai permintaan kedua.
  • File status yang ditulis setiap agen di akhir giliran: diukur pada 71 transkrip Claude lokal, sekitar 2,5% dari token konteks.

Mengecilkan salah satunya akan menghemat kurang dari 3% jendela dan mempertaruhkan kualitas kerja agen. Definisi alat berbobot 95.000 token. Di situlah waktu kami dihabiskan.

Pertanyaan yang benar-benar ditanyakan orang

Berapa banyak token yang dipakai alat MCP?

Setiap alat memakan biaya sebesar seluruh definisinya: nama, deskripsi, dan skema input, dikirim sebagai JSON. Aturan kasarnya 4 byte per token. Diukur pada 3 November 2026: server filesystem resmi memiliki 14 alat dengan sekitar 3.100 token, Playwright MCP 25 alat dengan sekitar 5.300 token. Alat AgentsRoom berbobot sekitar 95.000 token sebelum kami memperpendeknya, dan sekitar 40.000 hari ini.

Apakah Claude Code memuat semua alat MCP ke jendela konteks?

Tidak secara default. Pencarian alat Claude Code (tool search) menunda pemuatan definisi alat MCP: saat sesi dimulai hanya nama alat dan instruksi server yang dimuat, dan Claude memuat sebuah definisi ketika membutuhkan alat itu. Menyetel ENABLE_TOOL_SEARCH=false, memakai model yang lebih lama dari Claude Opus 4 dan Sonnet 4, atau server yang ditandai alwaysLoad akan mengembalikan definisi ke dalam konteks sejak awal.

Apakah server MCP mengurangi penggunaan token?

Bisa, ketika sebuah alat mengembalikan jawaban singkat sebagai ganti sesuatu yang sebaliknya harus dibaca agen secara utuh, misalnya query database sebagai ganti dump lengkap. Namun definisi memakan konteks, begitu juga hasilnya: Claude Code memberi peringatan ketika satu hasil MCP melewati 10.000 token dan memotongnya di 25.000 secara default. Server MCP hanya menghemat token jika hasilnya lebih kecil daripada apa yang digantikannya.

Bagaimana cara melihat berapa banyak konteks yang dipakai alat MCP saya?

Di Claude Code, jalankan /context: perintah ini memecah konteks per sumber dan menandai alat MCP yang ditunda pemuatannya. Untuk server apa pun dan CLI apa pun, minta daftar alat dari server lalu ukur JSON-nya, itulah yang dilakukan skrip 40 baris di artikel ini.

Seperti apa deskripsi alat MCP yang baik?

Satu sampai tiga kalimat yang menyebut apa yang dilakukan alat dan kapan memanggilnya, dengan kata-kata yang akan dicari agen diletakkan di awal. Sebuah parameter mendapat satu kalimat, atau tidak sama sekali jika nama, tipe, dan nilai yang diizinkan sudah menjelaskannya. Aturan, kasus khusus, dan contoh panjang dipindahkan ke dokumen yang dibaca agen saat dibutuhkan. Lagi pula, Claude Code memotong deskripsi yang dimuat sejak awal di 4.096 karakter.

Bagaimana cara mencegah definisi alat membengkak lagi?

Beri mereka anggaran yang bisa diperiksa oleh build. Kami menyimpan file JSON dengan batas atas total dan batas atas per alat, sebuah skrip yang menjalankan server MCP kami, mengukur setiap alat, dan keluar dengan error jika salah satu batas terlampaui, dan kami menjalankannya sebelum setiap push. Alat yang sudah terlalu besar boleh mengecil, tidak boleh membesar.

Versi singkatnya

Alat MCP Anda adalah teks yang dibaca model, dan tidak ada yang meninjau teks itu seperti meninjau kode. Ukur sekali: /context di Claude Code, atau skrip di atas untuk server apa pun. Lalu buat setiap deskripsi menyebut apa dan kapan, pindahkan bagian bagaimana ke file yang dibaca agen saat membutuhkannya, dan pasang angka di build Anda agar tidak bisa bergeser kembali.

Kami turun dari sekitar 95.000 menjadi sekitar 38.000 token tanpa menghapus satu alat pun. Jika Anda menjalankan beberapa agen dengan alat yang sama, AgentsRoom gratis diunduh, dan halaman Server MCP menunjukkan cara mendeklarasikan server sekali untuk setiap CLI dan setiap proyek.

Unduh AgentsRoom

Jalankan semua agen AI Anda, di semua proyek Anda, dari satu jendela.

GratisUnduh AgentsRoom

Aplikasi pendamping: pantau agen Anda saat bepergian

Gunakan Claude, Codex, Antigravity CLI, atau penyedia AI lainnya.

Dapatkan ekstensi
Chrome Web Store

Kirim bug dan permintaan langsung ke backlog publik Anda.

Beberapa proyek
Multi-penyedia
Beberapa agen
Status langsung
File diff & commit
Pendamping mobile
Pratinjau langsung
Tim agen
Otomatisasi browser
Dev berbasis backlog
Pustaka prompt
Pustaka skill
Lihat semua fitur

Lanjutkan membaca