{"id":1533,"date":"2026-09-02T10:13:07","date_gmt":"2026-09-02T03:13:07","guid":{"rendered":"https:\/\/komunitech.com\/blog\/?p=1533"},"modified":"2026-09-02T10:13:07","modified_gmt":"2026-09-02T03:13:07","slug":"claude-code-subagents-mcp-cara-batasi-akses-tool-per-sub-agent-2026","status":"publish","type":"post","link":"https:\/\/komunitech.com\/blog\/tutorial\/claude-code-subagents-mcp-cara-batasi-akses-tool-per-sub-agent-2026\/","title":{"rendered":"Claude Code Subagents + MCP: Cara Batasi Akses Tool per Sub-Agent (2026)"},"content":{"rendered":"<p><strong>tl;dr:<\/strong> Sub-agent di Claude Code otomatis mewarisi seluruh tool MCP yang aktif di percakapan utama \u2014 termasuk tool yang bisa menulis ke database produksi atau mengirim pesan keluar. Dokumentasi resmi Anthropic menyediakan dua rem: field <code>tools<\/code> sebagai daftar izin dan <code>disallowedTools<\/code> sebagai daftar larangan, keduanya ditulis di YAML frontmatter file sub-agent. Kuncinya ada di format penamaan <code>mcp__namaserver__namatool<\/code> yang sering salah ketik, plus pemilihan scope <code>.mcp.json<\/code> yang menentukan siapa saja yang kebagian server tersebut. Halaman ini membedah cara mengunci akses MCP per sub-agent, contoh konfigurasi lengkap, kesalahan yang paling sering bikin sub-agent gagal jalan, dan kapan pengaturan seketat itu justru mubazir.<\/p>\n<p>Begitu satu server MCP tersambung, semua sub-agent yang kamu buat langsung punya akses ke tool di dalamnya tanpa kamu minta. Untuk sub-agent riset yang cuma perlu membaca kode, itu berarti sub-agent tersebut juga memegang kemampuan menulis ke sistem eksternal \u2014 masalah yang solusinya cuma butuh dua baris konfigurasi, mulai dari memahami kenapa pewarisan tool itu terjadi.<\/p>\n<div id=\"ez-toc-container\" class=\"ez-toc-v2_0_86 ez-toc-wrap-center counter-hierarchy ez-toc-counter ez-toc-light-blue ez-toc-container-direction\">\n<label for=\"ez-toc-cssicon-toggle-item-6a97adeb736c8\" class=\"ez-toc-cssicon-toggle-label\"><span class=\"ez-toc-cssicon\"><span class=\"eztoc-hide\" style=\"display:none;\">Toggle<\/span><span class=\"ez-toc-icon-toggle-span\"><svg style=\"fill: #999;color:#999\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" class=\"list-377408\" width=\"20px\" height=\"20px\" viewBox=\"0 0 24 24\" fill=\"none\"><path d=\"M6 6H4v2h2V6zm14 0H8v2h12V6zM4 11h2v2H4v-2zm16 0H8v2h12v-2zM4 16h2v2H4v-2zm16 0H8v2h12v-2z\" fill=\"currentColor\"><\/path><\/svg><svg style=\"fill: #999;color:#999\" class=\"arrow-unsorted-368013\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"10px\" height=\"10px\" viewBox=\"0 0 24 24\" version=\"1.2\" baseProfile=\"tiny\"><path d=\"M18.2 9.3l-6.2-6.3-6.2 6.3c-.2.2-.3.4-.3.7s.1.5.3.7c.2.2.4.3.7.3h11c.3 0 .5-.1.7-.3.2-.2.3-.5.3-.7s-.1-.5-.3-.7zM5.8 14.7l6.2 6.3 6.2-6.3c.2-.2.3-.5.3-.7s-.1-.5-.3-.7c-.2-.2-.4-.3-.7-.3h-11c-.3 0-.5.1-.7.3-.2.2-.3.5-.3.7s.1.5.3.7z\"\/><\/svg><\/span><\/span><\/label><input type=\"checkbox\"  id=\"ez-toc-cssicon-toggle-item-6a97adeb736c8\"  aria-label=\"Toggle\" \/><nav><ul class='ez-toc-list ez-toc-list-level-1 ' ><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-1\" href=\"https:\/\/komunitech.com\/blog\/tutorial\/claude-code-subagents-mcp-cara-batasi-akses-tool-per-sub-agent-2026\/#Kenapa_Sub-Agent_Otomatis_Kebagian_Semua_Tool_MCP\" >Kenapa Sub-Agent Otomatis Kebagian Semua Tool MCP<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-2\" href=\"https:\/\/komunitech.com\/blog\/tutorial\/claude-code-subagents-mcp-cara-batasi-akses-tool-per-sub-agent-2026\/#Format_Penamaan_Tool_MCP_yang_Wajib_Kamu_Hafal\" >Format Penamaan Tool MCP yang Wajib Kamu Hafal<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-3\" href=\"https:\/\/komunitech.com\/blog\/tutorial\/claude-code-subagents-mcp-cara-batasi-akses-tool-per-sub-agent-2026\/#Contoh_Nyata_Sub-Agent_Riset_dengan_Satu_Server_MCP_Saja\" >Contoh Nyata: Sub-Agent Riset dengan Satu Server MCP Saja<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-4\" href=\"https:\/\/komunitech.com\/blog\/tutorial\/claude-code-subagents-mcp-cara-batasi-akses-tool-per-sub-agent-2026\/#Scope_Server_MCP_Menentukan_Siapa_yang_Kebagian\" >Scope Server MCP Menentukan Siapa yang Kebagian<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-5\" href=\"https:\/\/komunitech.com\/blog\/tutorial\/claude-code-subagents-mcp-cara-batasi-akses-tool-per-sub-agent-2026\/#Menggabungkan_Batas_Tool_dengan_Pilihan_Model\" >Menggabungkan Batas Tool dengan Pilihan Model<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-6\" href=\"https:\/\/komunitech.com\/blog\/tutorial\/claude-code-subagents-mcp-cara-batasi-akses-tool-per-sub-agent-2026\/#Kesalahan_yang_Paling_Sering_Bikin_Gagal\" >Kesalahan yang Paling Sering Bikin Gagal<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-7\" href=\"https:\/\/komunitech.com\/blog\/tutorial\/claude-code-subagents-mcp-cara-batasi-akses-tool-per-sub-agent-2026\/#Kapan_Kamu_Belum_Perlu_Mengunci_Akses_MCP\" >Kapan Kamu Belum Perlu Mengunci Akses MCP<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-8\" href=\"https:\/\/komunitech.com\/blog\/tutorial\/claude-code-subagents-mcp-cara-batasi-akses-tool-per-sub-agent-2026\/#Pertanyaan_yang_Sering_Ditanya\" >Pertanyaan yang Sering Ditanya<\/a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-9\" href=\"https:\/\/komunitech.com\/blog\/tutorial\/claude-code-subagents-mcp-cara-batasi-akses-tool-per-sub-agent-2026\/#Apakah_sub-agent_Claude_Code_otomatis_bisa_memakai_semua_server_MCP_saya\" >Apakah sub-agent Claude Code otomatis bisa memakai semua server MCP saya?<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-10\" href=\"https:\/\/komunitech.com\/blog\/tutorial\/claude-code-subagents-mcp-cara-batasi-akses-tool-per-sub-agent-2026\/#Bagaimana_format_penulisan_nama_tool_MCP_di_field_tools\" >Bagaimana format penulisan nama tool MCP di field tools?<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-11\" href=\"https:\/\/komunitech.com\/blog\/tutorial\/claude-code-subagents-mcp-cara-batasi-akses-tool-per-sub-agent-2026\/#Kenapa_sub-agent_saya_gagal_jalan_setelah_field_tools_diisi\" >Kenapa sub-agent saya gagal jalan setelah field tools diisi?<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-12\" href=\"https:\/\/komunitech.com\/blog\/tutorial\/claude-code-subagents-mcp-cara-batasi-akses-tool-per-sub-agent-2026\/#Apa_bedanya_menyimpan_server_MCP_di_mcpjson_dan_di_claudejson\" >Apa bedanya menyimpan server MCP di .mcp.json dan di ~\/.claude.json?<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-13\" href=\"https:\/\/komunitech.com\/blog\/tutorial\/claude-code-subagents-mcp-cara-batasi-akses-tool-per-sub-agent-2026\/#Apakah_sub-agent_yang_berjalan_di_latar_belakang_lebih_aman_otomatis\" >Apakah sub-agent yang berjalan di latar belakang lebih aman otomatis?<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-14\" href=\"https:\/\/komunitech.com\/blog\/tutorial\/claude-code-subagents-mcp-cara-batasi-akses-tool-per-sub-agent-2026\/#Apakah_perlu_bisa_coding_untuk_mengatur_pembatasan_ini\" >Apakah perlu bisa coding untuk mengatur pembatasan ini?<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-15\" href=\"https:\/\/komunitech.com\/blog\/tutorial\/claude-code-subagents-mcp-cara-batasi-akses-tool-per-sub-agent-2026\/#Referensi\" >Referensi<\/a><\/li><\/ul><\/nav><\/div>\n<h2><span class=\"ez-toc-section\" id=\"Kenapa_Sub-Agent_Otomatis_Kebagian_Semua_Tool_MCP\"><\/span>Kenapa Sub-Agent Otomatis Kebagian Semua Tool MCP<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>Menurut <a href=\"https:\/\/code.claude.com\/docs\/en\/sub-agents\" rel=\"noopener nofollow\" target=\"_blank\">dokumentasi resmi Claude Code tentang sub-agent<\/a>, tiap sub-agent berjalan di jendela konteks sendiri dengan system prompt, akses tool, dan izin yang terpisah dari percakapan utama. Yang sering luput: kalau field <code>tools<\/code> dikosongkan, sub-agent mewarisi <em>seluruh<\/em> tool yang tersedia di percakapan utama \u2014 tool bawaan maupun tool dari server MCP yang sedang tersambung.<\/p>\n<p>Pewarisan itu bukan bug, melainkan default yang memang dirancang supaya sub-agent langsung berguna tanpa konfigurasi. Konsekuensinya baru terasa saat kamu menyambungkan server MCP yang punya kemampuan menulis: server database yang bisa menjalankan <code>UPDATE<\/code>, server issue tracker yang bisa menutup tiket, atau server pesan yang bisa mengirim notifikasi ke tim. Sub-agent bernama &#8220;peneliti-kode&#8221; yang niatnya cuma membaca berkas jadi ikut memegang semua kemampuan itu.<\/p>\n<p>Dokumentasi Claude Code menyebut ada dua filter yang tetap berlaku sebelum daftar tool sampai ke sub-agent. Filter pertama mencopot tool tertentu dari setiap sub-agent walaupun kamu menuliskannya di field <code>tools<\/code> \u2014 di antaranya <code>AskUserQuestion<\/code>, <code>EnterPlanMode<\/code>, dan <code>WaitForMcpServers<\/code>. Filter kedua khusus sub-agent yang berjalan di latar belakang: sub-agent latar belakang tetap memegang <strong>seluruh tool MCP<\/strong>, tapi tool bawaannya dipangkas jadi daftar pendek seperti <code>Read<\/code>, <code>Grep<\/code>, <code>Glob<\/code>, <code>Bash<\/code>, dan <code>Edit<\/code>.<\/p>\n<p>Perhatikan asimetrinya: tool bawaan dipangkas otomatis, tool MCP tidak. Justru tool MCP \u2014 yang menyentuh sistem di luar mesinmu \u2014 yang lolos dari pemangkasan otomatis. Itu sebabnya pembatasan manual jadi wajib, bukan opsional.<\/p>\n<div style=\"background:#f0f9ff;border-left:4px solid #0284c7;padding:1em 1.2em;margin:1.5em 0;border-radius:4px\">\n<p style=\"text-transform:uppercase;font-size:0.8em;font-weight:700;letter-spacing:0.05em;color:#0284c7;margin:0 0 0.5em\">\ud83d\udca1 Key Takeaway<\/p>\n<ul style=\"margin:0;padding-left:1.2em\">\n<li>Field <code>tools<\/code> kosong berarti sub-agent mewarisi semua tool, termasuk seluruh tool MCP dari percakapan utama.<\/li>\n<li>Sub-agent latar belakang dipangkas tool bawaannya, tapi <strong>tidak<\/strong> dipangkas tool MCP-nya.<\/li>\n<li>Pembatasan akses MCP per sub-agent harus ditulis manual \u2014 tidak ada default yang aman.<\/li>\n<\/ul>\n<\/div>\n<h2><span class=\"ez-toc-section\" id=\"Format_Penamaan_Tool_MCP_yang_Wajib_Kamu_Hafal\"><\/span>Format Penamaan Tool MCP yang Wajib Kamu Hafal<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>Supaya bisa memasukkan tool MCP ke daftar izin, kamu perlu nama lengkapnya, bukan nama singkat yang muncul di layar. Dokumentasi Claude Code untuk <a href=\"https:\/\/code.claude.com\/docs\/en\/mcp\" rel=\"noopener nofollow\" target=\"_blank\">penyambungan tool lewat MCP<\/a> menetapkan polanya:<\/p>\n<pre><code>mcp__&lt;nama-server&gt;__&lt;nama-tool&gt;<\/code><\/pre>\n<p>Dua garis bawah, bukan satu, di kedua pemisah. Untuk server bernama <code>notion<\/code> dengan tool <code>search<\/code>, nama lengkapnya <code>mcp__notion__search<\/code>. Kalau kamu ingin memberi akses ke seluruh tool dari satu server sekaligus, sebagian aturan izin menerima pola <code>mcp__notion__*<\/code> \u2014 tapi untuk field <code>tools<\/code> di sub-agent, menuliskan nama tool satu per satu jauh lebih aman karena kamu jadi tahu persis apa yang dipegang sub-agent tersebut.<\/p>\n<p>Ada satu jebakan tambahan. Kalau server MCP-nya datang dari plugin, namanya berbeda total. Dokumentasi Claude Code menyebutkan bentuk lengkapnya <code>mcp__plugin_&lt;nama-plugin&gt;_&lt;nama-server&gt;__&lt;nama-tool&gt;<\/code> \u2014 jadi tool <code>query<\/code> dari server <code>database-tools<\/code> di plugin <code>my-plugin<\/code> dipanggil sebagai <code>mcp__plugin_my-plugin_database-tools__query<\/code>. Aturan izin yang ditulis memakai nama server polos, misalnya <code>mcp__database-tools__*<\/code>, tidak akan pernah cocok dengan server bawaan plugin. Kesalahan ini diam-diam berbahaya: kamu merasa sudah memasang pagar, padahal pagarnya tidak menempel pada apa pun.<\/p>\n<p>Cara paling cepat memastikan nama yang benar: jalankan perintah <code>\/mcp<\/code> di dalam sesi Claude Code untuk melihat daftar server yang tersambung beserta tool-nya, lalu salin nama persis dari situ. Mengarang nama dari ingatan adalah sumber kegagalan paling umum di tahap ini.<\/p>\n<h2><span class=\"ez-toc-section\" id=\"Contoh_Nyata_Sub-Agent_Riset_dengan_Satu_Server_MCP_Saja\"><\/span>Contoh Nyata: Sub-Agent Riset dengan Satu Server MCP Saja<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>Anggap kamu punya dua server MCP tersambung \u2014 satu untuk dokumentasi internal, satu lagi untuk database produksi \u2014 dan kamu ingin sub-agent peneliti yang cuma boleh menyentuh dokumentasi. Langkah pertama, daftarkan server dengan scope yang tepat.<\/p>\n<p>Untuk server yang perlu dipakai satu tim, Claude Code menyimpannya di berkas <code>.mcp.json<\/code> di root proyek lewat perintah dengan flag <code>--scope project<\/code>:<\/p>\n<pre><code>claude mcp add --transport http docs-internal --scope project https:\/\/mcp.contoh.com\/mcp<\/code><\/pre>\n<p>Berkas <code>.mcp.json<\/code> yang terbentuk berbentuk seperti berikut, dan bisa kamu masukkan ke version control supaya seluruh tim mendapat konfigurasi yang sama:<\/p>\n<pre><code>{\n  \"mcpServers\": {\n    \"docs-internal\": {\n      \"type\": \"http\",\n      \"url\": \"https:\/\/mcp.contoh.com\/mcp\"\n    }\n  }\n}<\/code><\/pre>\n<p>Langkah kedua, buat file sub-agent di <code>.claude\/agents\/peneliti-docs.md<\/code>. Bagian YAML frontmatter di atas garis tiga strip adalah tempat pagarnya dipasang:<\/p>\n<pre><code>---\nname: peneliti-docs\ndescription: Mencari jawaban di dokumentasi internal. Pakai saat butuh rujukan kebijakan atau spesifikasi produk.\ntools: Read, Grep, Glob, mcp__docs-internal__search, mcp__docs-internal__fetch\nmodel: haiku\n---\n\nKamu adalah peneliti dokumentasi internal. Jawab hanya berdasarkan isi\ndokumen yang kamu temukan. Sertakan nama berkas atau judul dokumen\nsebagai rujukan di tiap jawaban. Jangan menebak isi dokumen yang tidak\nkamu baca.<\/code><\/pre>\n<p>Dengan daftar itu, sub-agent <code>peneliti-docs<\/code> tidak lagi punya akses ke server database \u2014 bukan karena servernya dimatikan, melainkan karena namanya tidak ada di daftar izin. Kalau kamu lebih suka pendekatan sebaliknya, gunakan <code>disallowedTools<\/code> yang mewarisi semua tool kecuali yang kamu sebutkan:<\/p>\n<pre><code>---\nname: analis-tanpa-tulis\ndescription: Menganalisis data tanpa mengubah apa pun.\ndisallowedTools: Write, Edit, mcp__db-prod__execute\n---<\/code><\/pre>\n<p>Pilih salah satu pola sesuai situasi. Daftar izin (<code>tools<\/code>) cocok saat kamu tahu persis apa yang dibutuhkan sub-agent \u2014 lebih ketat, dan tool baru yang tersambung belakangan tidak otomatis masuk. Daftar larangan (<code>disallowedTools<\/code>) cocok saat kebutuhan sub-agent luas dan yang perlu dijaga cuma beberapa tool berbahaya \u2014 lebih longgar, tapi tool MCP baru akan otomatis diwariskan. Untuk sesuatu yang menyentuh sistem produksi, daftar izin adalah pilihan yang lebih tepat.<\/p>\n<p>Kalau kamu belum familier dengan struktur file sub-agent secara umum, langkah dasarnya sudah dibedah terpisah di <a href=\"https:\/\/komunitech.com\/blog\/tutorial\/cara-bikin-sub-agent-di-claude-code-panduan-konfigurasi-lengkap\/\">panduan konfigurasi sub-agent Claude Code<\/a>. Sementara untuk memahami apa itu server MCP dan cara kerjanya dari sisi protokol, penjelasan lengkapnya ada di <a href=\"https:\/\/komunitech.com\/blog\/ai-agent\/mcp-server-apa-itu-cara-kerja-ai-agent-2026\/\">pembedahan MCP Server dan alasan AI Agent membutuhkannya<\/a>.<\/p>\n<div style=\"background:#f0f9ff;border-left:4px solid #0284c7;padding:1em 1.2em;margin:1.5em 0;border-radius:4px\">\n<p style=\"text-transform:uppercase;font-size:0.8em;font-weight:700;letter-spacing:0.05em;color:#0284c7;margin:0 0 0.5em\">\ud83d\udca1 Key Takeaway<\/p>\n<ul style=\"margin:0;padding-left:1.2em\">\n<li>Nama tool MCP memakai pola <code>mcp__server__tool<\/code> dengan dua garis bawah di tiap pemisah.<\/li>\n<li>Server dari plugin memakai pola berbeda: <code>mcp__plugin_&lt;plugin&gt;_&lt;server&gt;__&lt;tool&gt;<\/code>.<\/li>\n<li>Pakai <code>tools<\/code> (daftar izin) untuk sub-agent yang menyentuh sistem penting, <code>disallowedTools<\/code> untuk pembatasan ringan.<\/li>\n<\/ul>\n<\/div>\n<h2><span class=\"ez-toc-section\" id=\"Scope_Server_MCP_Menentukan_Siapa_yang_Kebagian\"><\/span>Scope Server MCP Menentukan Siapa yang Kebagian<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>Pembatasan di level sub-agent baru separuh cerita. Separuh lagi ada di scope tempat server MCP didaftarkan, karena scope menentukan di proyek mana server itu ikut termuat. Dokumentasi Claude Code mencatat tiga pilihan:<\/p>\n<ul>\n<li><strong>Local<\/strong> \u2014 default, tersimpan di <code>~\/.claude.json<\/code>, cuma termuat di proyek tempat kamu menambahkannya, dan tidak dibagi ke tim. Cocok untuk server percobaan atau server yang memakai kredensial pribadi.<\/li>\n<li><strong>Project<\/strong> \u2014 tersimpan di <code>.mcp.json<\/code> di root proyek dan ikut masuk version control, jadi seluruh tim mendapat server yang sama.<\/li>\n<li><strong>User<\/strong> \u2014 tersimpan di <code>~\/.claude.json<\/code> dan termuat di semua proyekmu. Praktis, tapi berarti server itu ikut hadir di proyek yang tidak membutuhkannya.<\/li>\n<\/ul>\n<p>Ada catatan keamanan penting soal scope project. Claude Code meminta persetujuan lebih dulu sebelum memakai server dari <code>.mcp.json<\/code> di sesi interaktif. Tapi pada mode non-interaktif \u2014 misalnya <code>claude -p<\/code>, sesi lewat Agent SDK, atau sesi cloud \u2014 prompt persetujuan itu tidak bisa ditampilkan, sehingga server scope project dimuat tanpa bertanya. Artinya berkas <code>.mcp.json<\/code> yang di-<em>commit<\/em> ke repositori bersama efektif menjadi konfigurasi tepercaya di semua jalur otomatis. Perlakukan berkas itu seperti berkas kredensial: ditinjau tiap kali berubah, bukan dilewati begitu saja saat <em>code review<\/em>.<\/p>\n<p>Ketegangan antara kemudahan dan risiko ini persis alasan pembatasan tool per sub-agent jadi penting. Server bisa saja tersedia luas di seluruh tim; yang membatasi dampaknya adalah daftar tool di tiap sub-agent.<\/p>\n<h2><span class=\"ez-toc-section\" id=\"Menggabungkan_Batas_Tool_dengan_Pilihan_Model\"><\/span>Menggabungkan Batas Tool dengan Pilihan Model<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>Field <code>model<\/code> di frontmatter menerima nilai <code>sonnet<\/code>, <code>opus<\/code>, <code>haiku<\/code>, ID model lengkap, atau <code>inherit<\/code>. Menurut dokumentasi Claude Code, salah satu manfaat sub-agent memang mengendalikan biaya dengan mengarahkan tugas ke model yang lebih murah dan cepat.<\/p>\n<p>Digabung dengan pembatasan tool, kombinasinya jadi masuk akal secara operasional. Sub-agent yang cuma boleh membaca dan memanggil satu-dua tool MCP pencarian tidak butuh model paling mahal \u2014 pekerjaannya mengambil dan meringkas, bukan menalar rancangan sistem. Sebaliknya, sub-agent yang memegang tool bermodal tulis lebih pas memakai model yang lebih kuat sekaligus daftar tool yang paling sempit, karena kesalahannya lebih mahal.<\/p>\n<p>Pola pikirnya sama seperti membagi tugas ke beberapa agen di kerangka multi-agent lain \u2014 pertimbangan pemilihan kerangkanya sudah dibandingkan di <a href=\"https:\/\/komunitech.com\/blog\/ai-agent\/framework-multi-agent-ai-terbaik-2026-langgraph-crewai-autogen-claude-openclaw\/\">ulasan framework multi-agent LangGraph, CrewAI, AutoGen, Claude, dan OpenClaw<\/a>. Bedanya, di Claude Code pembagian itu ditulis sebagai berkas Markdown biasa, bukan kode orkestrasi.<\/p>\n<h2><span class=\"ez-toc-section\" id=\"Kesalahan_yang_Paling_Sering_Bikin_Gagal\"><\/span>Kesalahan yang Paling Sering Bikin Gagal<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>Empat masalah berikut muncul berulang saat menggabungkan sub-agent dengan MCP, dan semuanya punya gejala yang membingungkan.<\/p>\n<p><strong>Daftar tool tidak cocok dengan tool mana pun.<\/strong> Dokumentasi Claude Code menyebut kalau tidak ada satu pun entri di field <code>tools<\/code> yang resolve ke tool nyata, sub-agent gagal diluncurkan dengan galat yang menyebut entri bermasalah. Penyebab tersering: salah ketik jumlah garis bawah, atau nama server berubah setelah didaftar ulang.<\/p>\n<p><strong>Entri <code>.mcp.json<\/code> punya <code>url<\/code> tapi tidak punya <code>type<\/code>.<\/strong> Claude Code membaca entri tanpa <code>type<\/code> sebagai server stdio, lalu melewatkannya sambil melaporkan bahwa entri tersebut butuh <code>\"type\": \"http\"<\/code>. Konfigurasi yang disalin dari dokumentasi klien lain sering kehilangan field ini. Perlu dicatat, field <code>type<\/code> juga menerima <code>streamable-http<\/code> sebagai alias dari <code>http<\/code>, sesuai nama transport di spesifikasi MCP.<\/p>\n<p><strong>Masih memakai transport SSE.<\/strong> Dokumentasi Claude Code menandai transport SSE sebagai <em>deprecated<\/em> dan menyarankan HTTP di tempat yang mendukungnya. Konfigurasi lama yang masih memakai <code>--transport sse<\/code> tetap jalan, tapi bukan jalur yang akan dirawat ke depan.<\/p>\n<p><strong>Deskripsi sub-agent kepanjangan.<\/strong> Claude memakai field <code>description<\/code> untuk memutuskan kapan mendelegasikan tugas, jadi deskripsi itu selalu berada di konteks. Claude Code menampilkan peringatan saat startup kalau gabungan deskripsi sub-agent buatanmu melewati 15.000 token. Solusinya bukan menghapus sub-agent, melainkan memindahkan detail dari <code>description<\/code> ke badan system prompt yang hanya termuat saat sub-agent tersebut berjalan.<\/p>\n<div style=\"background:#f0f9ff;border-left:4px solid #0284c7;padding:1em 1.2em;margin:1.5em 0;border-radius:4px\">\n<p style=\"text-transform:uppercase;font-size:0.8em;font-weight:700;letter-spacing:0.05em;color:#0284c7;margin:0 0 0.5em\">\ud83d\udca1 Key Takeaway<\/p>\n<ul style=\"margin:0;padding-left:1.2em\">\n<li>Scope <code>project<\/code> lewat <code>.mcp.json<\/code> dimuat tanpa prompt persetujuan di sesi non-interaktif \u2014 tinjau berkas itu seperti berkas kredensial.<\/li>\n<li>Salah ketik nama tool bikin sub-agent gagal diluncurkan, bukan gagal diam-diam \u2014 galatnya menyebut entri yang bermasalah.<\/li>\n<li>Deskripsi sub-agent ikut memakan konteks; pindahkan detail panjang ke system prompt.<\/li>\n<\/ul>\n<\/div>\n<h2><span class=\"ez-toc-section\" id=\"Kapan_Kamu_Belum_Perlu_Mengunci_Akses_MCP\"><\/span>Kapan Kamu Belum Perlu Mengunci Akses MCP<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>Pengaturan seketat ini punya ongkos: tiap tool MCP baru yang ingin dipakai sub-agent harus ditambahkan manual ke daftar izin. Dalam beberapa situasi ongkos itu tidak sepadan.<\/p>\n<p>Kalau seluruh server MCP yang tersambung bersifat baca-saja \u2014 misalnya server dokumentasi publik atau server pencarian \u2014 dampak terburuk dari pewarisan tool cuma pemborosan token, bukan kerusakan data. Begitu pula kalau kamu bekerja sendirian di proyek pribadi tanpa server yang menyentuh sistem produksi: menulis daftar izin panjang untuk tiap sub-agent akan lebih banyak menghambat daripada melindungi.<\/p>\n<p>Batas yang masuk akal: mulai mengunci begitu ada satu saja server MCP yang bisa <em>mengubah<\/em> sesuatu di luar mesinmu \u2014 menulis ke database, mengirim pesan, mengubah tiket, atau menyentuh repositori bersama. Sebelum titik itu, biarkan default berjalan dan fokus ke hal lain.<\/p>\n<p>Untuk kebutuhan yang beda lagi, misalnya menjalankan agen yang tetap hidup di WhatsApp atau Telegram alih-alih di terminal pengembang, Claude Code bukan alat yang tepat \u2014 perbandingan situasinya sudah dibahas di <a href=\"https:\/\/komunitech.com\/blog\/ai-agent\/claude-code-vs-openclaw-kapan-pakai-yang-mana\/\">ulasan Claude Code versus OpenClaw dan kapan memakai yang mana<\/a>.<\/p>\n<h2><span class=\"ez-toc-section\" id=\"Pertanyaan_yang_Sering_Ditanya\"><\/span>Pertanyaan yang Sering Ditanya<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<h3><span class=\"ez-toc-section\" id=\"Apakah_sub-agent_Claude_Code_otomatis_bisa_memakai_semua_server_MCP_saya\"><\/span>Apakah sub-agent Claude Code otomatis bisa memakai semua server MCP saya?<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>Ya, selama field <code>tools<\/code> di frontmatter dikosongkan. Dokumentasi Claude Code menyebut sub-agent mewarisi tool bawaan dan tool MCP yang tersedia di percakapan utama. Untuk membatasinya, tulis daftar tool yang diizinkan di field <code>tools<\/code>, atau daftar yang dilarang di <code>disallowedTools<\/code>.<\/p>\n<h3><span class=\"ez-toc-section\" id=\"Bagaimana_format_penulisan_nama_tool_MCP_di_field_tools\"><\/span>Bagaimana format penulisan nama tool MCP di field tools?<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>Polanya <code>mcp__namaserver__namatool<\/code> dengan dua garis bawah di tiap pemisah, contohnya <code>mcp__notion__search<\/code>. Untuk server yang datang dari plugin, polanya lebih panjang: <code>mcp__plugin_namaplugin_namaserver__namatool<\/code>. Cara paling aman mendapatkan nama yang benar adalah menyalinnya dari keluaran perintah <code>\/mcp<\/code> di dalam sesi.<\/p>\n<h3><span class=\"ez-toc-section\" id=\"Kenapa_sub-agent_saya_gagal_jalan_setelah_field_tools_diisi\"><\/span>Kenapa sub-agent saya gagal jalan setelah field tools diisi?<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>Penyebab tersering adalah tidak ada satu pun entri di daftar yang cocok dengan tool nyata \u2014 biasanya karena salah ketik atau nama server berubah. Claude Code menolak meluncurkan sub-agent yang berakhir tanpa tool sama sekali dan menyebutkan entri yang bermasalah di pesan galatnya.<\/p>\n<h3><span class=\"ez-toc-section\" id=\"Apa_bedanya_menyimpan_server_MCP_di_mcpjson_dan_di_claudejson\"><\/span>Apa bedanya menyimpan server MCP di .mcp.json dan di ~\/.claude.json?<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>Berkas <code>.mcp.json<\/code> di root proyek adalah scope project: ikut version control dan dibagikan ke seluruh tim. Sedangkan <code>~\/.claude.json<\/code> menampung scope local (hanya proyek tertentu, pribadi) dan scope user (semua proyekmu, pribadi). Untuk server berkredensial sensitif, scope local lebih aman karena tidak ikut terbawa ke repositori.<\/p>\n<h3><span class=\"ez-toc-section\" id=\"Apakah_sub-agent_yang_berjalan_di_latar_belakang_lebih_aman_otomatis\"><\/span>Apakah sub-agent yang berjalan di latar belakang lebih aman otomatis?<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>Tidak untuk urusan MCP. Claude Code memangkas tool bawaan sub-agent latar belakang jadi daftar pendek, tapi seluruh tool MCP tetap dipertahankan. Justru tool MCP yang menyentuh sistem eksternal, jadi pembatasan manual tetap dibutuhkan.<\/p>\n<h3><span class=\"ez-toc-section\" id=\"Apakah_perlu_bisa_coding_untuk_mengatur_pembatasan_ini\"><\/span>Apakah perlu bisa coding untuk mengatur pembatasan ini?<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>Tidak. Berkas sub-agent adalah dokumen Markdown biasa dengan blok YAML di bagian atas, dan pendaftaran server MCP dilakukan lewat satu perintah terminal. Kemampuan pemrograman baru dibutuhkan kalau kamu ingin membangun server MCP sendiri dari nol.<\/p>\n<p><em>Disclosure: Komunitech menyelenggarakan workshop dan layanan pengerjaan AI Agent, termasuk yang memanfaatkan integrasi tools lewat MCP, sehingga punya kepentingan komersial atas topik yang dibahas di halaman ini.<\/em><\/p>\n<p><em>Disclaimer: seluruh detail teknis mengacu pada dokumentasi resmi Claude Code (code.claude.com) per 2 September 2026. Beberapa perilaku yang disebutkan terikat versi tertentu \u2014 misalnya pelaporan galat konfigurasi MCP yang berubah sejak v2.1.202 dan penghapusan wizard interaktif <code>\/agents<\/code> sejak v2.1.198 \u2014 sehingga hasilnya bisa berbeda pada versi yang kamu pakai. Periksa dokumentasi versi terkini sebelum menerapkannya di lingkungan kerja.<\/em><\/p>\n<h2><span class=\"ez-toc-section\" id=\"Referensi\"><\/span>Referensi<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<ul>\n<li><a href=\"https:\/\/code.claude.com\/docs\/en\/sub-agents\" rel=\"noopener nofollow\" target=\"_blank\">Create custom subagents \u2014 Dokumentasi resmi Claude Code<\/a><\/li>\n<li><a href=\"https:\/\/code.claude.com\/docs\/en\/mcp\" rel=\"noopener nofollow\" target=\"_blank\">Connect Claude Code to tools via MCP \u2014 Dokumentasi resmi Claude Code<\/a><\/li>\n<li><a href=\"https:\/\/code.claude.com\/docs\/en\/permissions\" rel=\"noopener nofollow\" target=\"_blank\">Permissions \u2014 Dokumentasi resmi Claude Code<\/a><\/li>\n<li><a href=\"https:\/\/modelcontextprotocol.io\/introduction\" rel=\"noopener nofollow\" target=\"_blank\">What is the Model Context Protocol (MCP)? \u2014 Dokumentasi resmi MCP<\/a><\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>tl;dr: Sub-agent di Claude Code otomatis mewarisi seluruh tool MCP yang aktif di percakapan utama \u2014 termasuk tool yang bisa menulis ke database produksi atau mengirim pesan keluar. Dokumentasi resmi Anthropic menyediakan dua rem: field tools sebagai daftar izin dan disallowedTools sebagai daftar larangan, keduanya ditulis di YAML frontmatter file sub-agent. Kuncinya ada di format [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":1535,"comment_status":"open","ping_status":"","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[75],"tags":[],"class_list":["post-1533","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-tutorial"],"_links":{"self":[{"href":"https:\/\/komunitech.com\/blog\/wp-json\/wp\/v2\/posts\/1533","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/komunitech.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/komunitech.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/komunitech.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/komunitech.com\/blog\/wp-json\/wp\/v2\/comments?post=1533"}],"version-history":[{"count":1,"href":"https:\/\/komunitech.com\/blog\/wp-json\/wp\/v2\/posts\/1533\/revisions"}],"predecessor-version":[{"id":1534,"href":"https:\/\/komunitech.com\/blog\/wp-json\/wp\/v2\/posts\/1533\/revisions\/1534"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/komunitech.com\/blog\/wp-json\/wp\/v2\/media\/1535"}],"wp:attachment":[{"href":"https:\/\/komunitech.com\/blog\/wp-json\/wp\/v2\/media?parent=1533"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/komunitech.com\/blog\/wp-json\/wp\/v2\/categories?post=1533"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/komunitech.com\/blog\/wp-json\/wp\/v2\/tags?post=1533"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}