Skip to main content
BlogAI

Cloudflare Code Mode MCP: Dua Tool, 1.000 Token, dan Sandbox

Dua tool, search dan execute, menggantikan ribuan tool MCP per endpoint. Apa yang diukur Cloudflare, cara kerja sandbox, dan apa yang tidak dilindunginya.

Matthews Wong

Software Engineer

Oktober 202612 menit baca
Cloudflare Code Mode MCP: Dua Tool, 1.000 Token, dan Sandbox

Ringkasan Utama

MCP server Cloudflare mencakup lebih dari 2.500 endpoint API-nya dengan dua tool, search dan execute, sekitar 1.000 token, bukan 1,17 juta token yang diukur Cloudflare untuk server dengan satu tool per endpoint. Model menulis JavaScript yang berjalan di V8 isolate Dynamic Worker tanpa filesystem, dan fetch keluar dimatikan secara default.

Angka yang membuat saya berhenti dan membaca seluruh pengumuman itu adalah 1,17 juta. Itu jumlah token yang menurut Cloudflare dibutuhkan sebuah MCP server jika setiap endpoint API-nya dideskripsikan ke model sebagai tool sendiri, dan jumlahnya lebih besar dari context window model paling canggih. Server yang mereka rilis sebagai gantinya memakai sekitar 1.000.

Tulisan ini adalah pembacaan dekat atas dua post engineering Cloudflare, README cloudflare/mcp, tulisan code execution dari Anthropic, dan dokumentasi Dynamic Workers, semuanya saya ambil pada 2026-10-17. Saya belum membuat benchmark sendiri, jadi setiap angka di bawah saya sebutkan sumbernya, dan bila dua halaman tidak sejalan saya sampaikan apa adanya, tanpa dipaksa cocok.

Hitungannya: kenapa tool per endpoint tidak mungkin dipakai

API Cloudflare punya lebih dari 2.500 endpoint. Post Cloudflare menyebut bahwa mengekspos tiap endpoint sebagai tool MCP akan memakan lebih dari 2 juta token, dan server setara tanpa Code Mode memakai 1,17 juta token. Server Code Mode hanya memuat sekitar 1.000 token definisi tool, dan menurut post itu ukurannya tetap berapa pun endpoint bertambah. README server memberi angka keempat untuk mode opt-out. Empat angka dari beberapa sumber:

Yang diukurTokenAsal angka
Satu tool per endpoint, menurut metadata postlebih dari 2 jutaBlog Cloudflare, Code Mode for the Cloudflare API
MCP server setara tanpa Code Mode1,17 jutaPost yang sama, dihitung dengan tiktoken
Server dengan ?codemode=false, sekitar 2.500 toolsekitar 244 ribuREADME cloudflare/mcp
Server dalam Code Mode, ukuran tetapsekitar 1.000Blog dan README sama-sama menyebutnya

Saya tidak bisa membuat tiga angka pertama saling cocok, dan saya kira memang tidak dimaksudkan begitu. Metode hitungnya berbeda, dan serialisasinya berbeda untuk gagasan yang sama. Yang disepakati semua sumber adalah orde besarnya: desain per endpoint berkisar ratusan ribu sampai jutaan token, sedangkan Code Mode seribu. Post melaporkan penghematan 99,9% pada input token, dan 1.000 dibanding 1,17 juta memang sekitar 0,09%, jadi hitungannya konsisten.

Apa sebenarnya search dan execute itu

Tiap tool menerima satu string code yang wajib diisi: fungsi async arrow JavaScript. Tool search dideskripsikan mencari OpenAPI spec Cloudflare dengan semua reference sudah di-resolve inline, dan model menulis code terhadap objek spec yang memuat seluruh dokumen. Tool execute menjalankan code terhadap API sungguhan lewat client cloudflare.request di dalam sandbox. Dua sketsa di bawah menunjukkan bentuknya. Akses spec.paths berasal dari README; bentuk argumen request adalah sketsa saya dan sudah saya tandai di komentar.

// Tool 1: search. The model writes this; "spec" is the whole OpenAPI
// document, resolved server-side. Only what the function RETURNS reaches
// the model's context, so a 2,500-endpoint spec costs a few lines of output.
async () => {
  const hits = [];
  for (const [path, methods] of Object.entries(spec.paths)) {
    if (!/rulesets/.test(path)) continue;
    for (const [method, op] of Object.entries(methods)) {
      hits.push(method.toUpperCase() + " " + path + "  " + (op.summary ?? ""));
    }
  }
  return hits.slice(0, 20);
}

// Tool 2: execute. Same shape, but it can call the API. Pagination, retries
// and chaining happen inside one tool call instead of one round trip each.
// The request argument shape below is a sketch: confirm the exact signature
// in the cloudflare/mcp README before you rely on it.
async () => {
  const ZONE_ID = "<your zone id>";
  const res = await cloudflare.request({
    method: "GET",
    path: "/zones/" + ZONE_ID + "/rulesets",
  });
  // Return a summary, not the payload. This is the whole token-saving trick.
  return res.result.map((r) => r.phase + " " + r.name);
}

Contoh kerja di post itu adalah pertanyaan DDoS dan WAF. Agent memfilter path spec untuk endpoint WAF dan ruleset, membaca enum phase dari schema zone rulesets, memilih ddos_l7 dan http_request_firewall_managed, lalu mendaftar ruleset yang ada dan mengambil kedua entrypoint ruleset dalam satu kali execute. Cloudflare menghitung seluruh tugas itu empat tool call. Dengan tool per endpoint, model harus memindai ribuan definisi di awal dan menempel setiap respons ke call berikutnya secara manual.

Satu koreksi untuk judulnya. Post menyebut dua tool, sementara README saat ini mencantumkan empat: docs, search, execute, dan whoami. Dua tambahan itu kecil. Tool docs mencari dokumentasi developer Cloudflare, dan whoami tanpa argumen mengembalikan identitas di balik credential. Keduanya tidak mengubah argumen biaya, tetapi jika Anda menghitung tool di client, yang terlihat empat, bukan dua.

Kenapa code mengalahkan tool call: argumen di baliknya

Post Cloudflare sebelumnya menyatakan bahwa LLM lebih baik menulis code untuk memanggil MCP daripada memanggil MCP secara langsung, karena model sudah melihat code dunia nyata dalam jumlah besar dan contoh tool call yang relatif sedikit. Argumen keduanya bersifat mekanis. Pada tool call langsung, setiap hasil melewati model hanya untuk disalin ke call berikutnya. Dengan code, model merangkai call sendiri dan hanya membaca hasil akhir. Tulisan Anthropic tentang pola yang sama memberi proporsinya: contoh Google Drive ke Salesforce turun dari sekitar 150.000 token menjadi 2.000, dan memfilter spreadsheet 10.000 baris di dalam code berarti model hanya melihat lima baris.

Anthropic juga menyebut manfaat sampingan yang penting untuk privasi. Hasil antara tetap berada di execution environment secara default, sehingga model hanya melihat apa yang di-log atau di-return oleh code. Properti itulah yang membuat baris return ringkasan, bukan payload pada sketsa di atas menjadi baris terpenting. Sangat mudah menulis panggilan execute yang mengembalikan seluruh respons dan membuang penghematannya.

Anggap statement return sebagai anggaran. Saat membaca code yang ditulis agent, lihat apa yang di-return. Script yang mengambil 500 ruleset lalu mengembalikan semuanya hanya memindahkan biaya dari definisi tool ke output tool, yang di README dibatasi sekitar 6.000 token per hasil.

Sandbox: V8 isolate yang kosong

Code buatan agent pada dasarnya tidak tepercaya, jadi sandbox yang memikul argumen keamanan. Code berjalan di Dynamic Worker, yang digambarkan Cloudflare sebagai V8 sandbox ringan tanpa filesystem dan tanpa environment variable, dengan fetch eksternal dimatikan secara default. Post sebelumnya menambahkan bahwa isolate baru dibuat untuk setiap potongan code lalu dibuang, tanpa pooling atau prewarming, dan isolate bisa menyala dalam hitungan milidetik dengan memori beberapa megabyte. Dokumen Dynamic Workers menempatkannya sebagai alternatif ringan dari container untuk code yang tidak Anda percayai. Config di bawah diambil dari dokumen itu dan dipangkas, sehingga ide yang sama bisa Anda coba pada API Anda sendiri.

# wrangler.toml: the Worker Loader binding. It points at no external
# resource; it just exposes env.LOADER to your loader Worker.
[[worker_loaders]]
binding = "LOADER"

// Loader Worker. Option 1: no network at all. fetch() and connect() throw.
return {
  mainModule: "index.js",
  modules: { "index.js": code },
  globalOutbound: null,
};

// Option 2: route every outbound call through a gateway you own, and attach
// the secret there so the generated code never holds it.
import { WorkerEntrypoint } from "cloudflare:workers";

export class HttpGateway extends WorkerEntrypoint {
  async fetch(request) {
    const url = new URL(request.url);
    const headers = new Headers(request.headers);
    if (url.hostname === "api.example.com") {
      headers.set("Authorization", "Bearer " + this.env.API_TOKEN);
    }
    return fetch(request, { headers });
  }
}
// ...and in the loader: globalOutbound: ctx.exports.HttpGateway({ props: {} })

Pilihan desain yang paling berguna menurut saya ada pada cara credential ditangani. Di Code Mode SDK, sandbox menerima binding, bukan string: objek hidup yang sudah terotorisasi. Code buatan memanggil binding, panggilan kembali ke supervisor yang memegang token dan menambahkannya sebelum meneruskan, sehingga code buatan tidak pernah melihat credential dan tidak bisa membocorkannya. Dokumentasi egress Dynamic Workers menunjukkan ide yang sama untuk HTTP: sebuah gateway class menempelkan header Authorization pada request yang cocok, jadi dynamic Worker memanggil fetch tanpa secret.

Cloudflare berargumen ini lebih bersih daripada filtering di level jaringan, karena filtering meninggalkan batas yang tidak jelas bagi supervisor maupun model, sedangkan binding mengekspos antarmuka JavaScript yang terdefinisi. Satu catatan dari dokumen: jika code di sandbox bergantung pada library HTTP client yang butuh fetch, memblokir total mungkin tidak berhasil, dan sebaiknya Anda mengintersep, bukan mengisi globalOutbound dengan null.

Posisinya di antara cara lain memangkas context MCP

Code Mode hanya satu dari beberapa jawaban untuk masalah yang sama, dan post Cloudflare membandingkan dirinya dengan yang lain. Tabel di bawah merangkum apa yang dikatakan sumber tentang masing-masing, supaya terlihat apa harganya, bukan hanya apa yang dihemat.

PendekatanYang dilihat model di awalButuh sandboxBiaya yang disebut sumber
Satu tool per endpointSemua definisi, sekitar 2.500 toolTidakSekitar 244 ribu token dibanding sekitar 1 ribu, menurut README
Dynamic tool search, seperti di Claude CodeNama dulu, tool yang cocok saat dimintaTidakMenurut Cloudflare, Anda memelihara fungsi pencarian dan tool yang cocok tetap memakan token
Code execution di sisi client, menurut AnthropicDirektori file tool, dibaca seperlunyaYa, milik AndaAnthropic menyebut overhead operasional, resource limit, dan monitoring
Code Mode di sisi server, menurut CloudflareDua sampai empat tool tetapYa, milik providerMenyelesaikan context untuk satu API; beberapa server tetap menumpuk

Baris kedua pernah saya bahas terpisah di post Claude Code tool search: itu client yang menunda definisi yang sudah diterimanya. Code Mode berada di lapisan lain, karena server tidak pernah menerbitkan permukaan besar itu sejak awal. Keduanya bisa digabung, tetapi tidak saling menggantikan. Cloudflare juga menyebut pendekatan berbasis CLI yang membutuhkan shell, dan menyebutnya permukaan serangan yang jauh lebih luas daripada isolate bersandbox.

Otorisasi: apa yang sebenarnya boleh dilakukan agent

Server ini disebut patuh OAuth 2.1 dan memakai Workers OAuth Provider untuk men-downscope token ke permission yang Anda setujui saat connect. Agent hanya mendapat yang Anda berikan secara eksplisit. Untuk CI dan otomasi, Anda membuat API token Cloudflare, user atau account, lalu mengirimnya sebagai bearer token. README menambah tiga detail praktis: account token butuh permission Account Resources Read agar server bisa mendeteksi account ID, API token dengan Client IP Address Filtering belum didukung, dan dengan user token Anda mengirim account_id ke execute.

// Interactive: OAuth. Connect, get redirected to Cloudflare, tick the
// permissions you are willing to hand over. Nothing else is granted.
{
  "mcpServers": {
    "cloudflare-api": {
      "type": "http",
      "url": "https://mcp.cloudflare.com/mcp"
    }
  }
}

# Non-interactive (CI): a Cloudflare API token as a bearer token.
# An account token needs "Account Resources : Read" so the server can
# detect the account ID. Tokens with Client IP Address Filtering are
# not currently supported.
claude mcp add --transport http cloudflare-api https://mcp.cloudflare.com/mcp \
  --header "Authorization: Bearer $CLOUDFLARE_API_TOKEN"

README juga mendokumentasikan dua parameter query yang perlu diketahui. Hasil dipotong di sekitar 6.000 token per hasil secara default, ditandai baris TRUNCATED, dan truncateToolResult=false mematikan batas itu, yang menurut README hanya disarankan bila client Anda membatasi apa yang sampai ke model. Request GraphQL Analytics juga lewat execute.

Sandbox melindungi host Cloudflare dari code milik agent. Sandbox tidak melindungi akun Anda dari niat agent. Itu dua ancaman yang berbeda, dan ini inferensi saya dari desainnya, bukan klaim di sumber: bila Anda menyetujui permission tulis di layar OAuth, code yang ditulis model bisa memakainya. Setujui scope tersempit yang dibutuhkan tugas, dan pilih token read-only untuk sesi eksplorasi.

Trade-off dan apa yang bisa salah

Tidak ada sumber yang mengklaim Code Mode gratis. Berikut biaya yang saya temukan dari membaca, urut dari yang paling saya khawatirkan.

  • Anda mereview code, bukan tool call. Tool bernama dengan argumen bertipe mudah disetujui sekilas. Fungsi buatan dengan loop dan request berantai lebih sulit diaudit, sehingga prompt persetujuan jadi lebih berat bobotnya.
  • Ini memperbaiki satu API, bukan seluruh perkakas Anda. Cloudflare menyatakannya langsung: agent yang juga bicara ke GitHub dan database tetap merasakan tekanan context dari tiap MCP server tambahan. Jawabannya, MCP Server Portals dengan integrasi Code Mode kelas satu, disebut masih dalam pengembangan.
  • Model harus menulis JavaScript yang benar. Kegagalan pindah dari error schema ke error runtime di dalam sandbox, dan agent memakai call tambahan untuk membacanya. Contoh DDoS empat call adalah kasus suksesnya.
  • Output tetap bisa besar. Batas default sekitar 6.000 token per hasil ada karena execute yang ceroboh bisa mengembalikan banyak data, dan output yang terpotong menyembunyikan data dari agent.
  • Menjalankan versi sendiri ada overhead-nya. Anthropic menyatakan bahwa menjalankan code buatan agent membutuhkan lingkungan eksekusi aman dan menambah overhead operasional serta pertimbangan keamanan yang dihindari tool call langsung. Memakai server hosted Cloudflare memindahkan beban itu ke mereka, dan itu keputusan soal kepercayaan.

Pendapat saya: sandbox adalah bagian terkuat desain ini, dan pertanyaan yang masih terbuka adalah review manusia atas code buatan dalam skala besar. Tidak ada halaman yang saya baca yang mengukur seberapa sering agent menulis code yang salah atau terlalu luas, jadi saya tidak akan menyebut angka.

Yang dikerjakan hari Senin

Anda tidak perlu mengadopsi apa pun untuk belajar dari ini. Lima langkah, dari yang paling murah.

  1. Hitung permukaan tool Anda sendiri. Daftar setiap MCP server yang terhubung dan berapa tool yang diekspos masing-masing. Jika satu server saja mengekspos puluhan tool, itu kandidat Code Mode Anda.
  2. Coba server Cloudflare lewat OAuth untuk tugas read-only dan setujui permission tersempit yang dibutuhkan tugas itu.
  3. Baca code search dan execute buatan agent sebelum mempercayai hasilnya. Periksa apa yang di-return tiap fungsi.
  4. Pakai API token dengan header bearer untuk CI, dibatasi ke satu account, dan ingat token dengan Client IP filtering belum didukung.
  5. Jika Anda punya API besar, tiru bentuknya: terbitkan OpenAPI spec ke tool search, satu tool execute, dan jalankan code di isolate dengan outbound diblokir dan credential ditambahkan oleh gateway.
# 1. Measure your own baseline before changing anything. How many tool
#    definitions does each connected server contribute? Ask your client.
claude mcp list

# 2. Add the server over OAuth and approve only the scopes the task needs.
claude mcp add --transport http cloudflare-api https://mcp.cloudflare.com/mcp

# 3. Ask for a read-only task first and read the code the agent wrote.
#    "Which zones do I have, and which have no WAF managed ruleset?"

# 4. Only if you must see 2,500 individual tools (for example to compose with
#    another code-mode system), opt out. The README says this costs about
#    244k tokens against about 1k, so treat it as an escape hatch.
#    https://mcp.cloudflare.com/mcp?codemode=false

Jangan sentuh ?codemode=false kecuali Anda menggabungkannya dengan sistem code-mode lain. README sendiri menyebut ini menaikkan biaya dari sekitar 1 ribu ke sekitar 244 ribu token.

Pelajaran yang saya bawa: bila sebuah API terlalu besar untuk dideskripsikan, berhenti mendeskripsikannya dan beri model cara untuk mencarinya. Dua tool, ukuran tetap sekitar 1.000 token, dan sandbox tanpa filesystem serta tanpa jaringan keluar mengubah 2.500 endpoint menjadi masalah pencarian. Yang tidak diselesaikan Code Mode adalah review dan scope: code tetap ditulis model, dan berjalan dengan semua permission yang Anda setujui.

FAQ

Pertanyaan Umum

Jawaban singkat untuk pertanyaan yang paling sering diajukan pembaca tentang topik ini.

Apa itu Cloudflare Code Mode untuk MCP?

Ini cara mengekspos API yang sangat besar ke agent lewat dua tool, search dan execute, bukan satu tool per endpoint. Model menulis JavaScript yang mencari OpenAPI spec atau memanggil API, dan spec lengkapnya tidak pernah masuk ke context. Cloudflare menyebut cukup sekitar 1.000 token untuk lebih dari 2.500 endpoint.

Berapa token yang dihemat MCP server Cloudflare?

Cloudflare melaporkan pengurangan 99,9% pada input token, diukur dengan tiktoken, dibanding server setara yang akan memakai 1,17 juta token. Server Code Mode memuat sekitar 1.000 token definisi tool. README secara terpisah menyebut mematikan Code Mode dengan codemode=false menaikkan biayanya ke sekitar 244 ribu token.

Amankah menjalankan code yang ditulis AI agent?

Cloudflare menjalankannya di Dynamic Worker, yaitu V8 isolate tanpa filesystem dan environment variable, dengan fetch eksternal dimatikan secara default. Itu melindungi host, tetapi code tetap memakai permission yang Anda setujui saat OAuth. Setujui scope tersempit dan periksa apa yang di-return code.

Bagaimana cara terhubung ke MCP server Cloudflare?

Arahkan MCP client Anda ke https://mcp.cloudflare.com/mcp lewat HTTP dan setujui permission di halaman Cloudflare yang terbuka. Untuk CI, buat API token user atau account lalu kirim sebagai bearer token. Account token butuh Account Resources Read, dan token dengan Client IP Address Filtering belum didukung.

Apakah Code Mode menggantikan tool search Claude Code?

Tidak, keduanya bekerja di lapisan berbeda. Tool search adalah client yang menunda definisi yang sudah diterimanya, sedangkan Code Mode berarti server tidak pernah menerbitkan ribuan tool. Cloudflare mencatat Code Mode menyelesaikan context untuk satu API, jadi agent dengan banyak server tetap menghadapi context yang membengkak.