Agent skills vs MCP vs file rules: pilih yang tepat
Bandingkan agent skills, server MCP, dan file rules berdasarkan waktu pemuatan, biaya token, serta pemeliharaan. Gunakan satu aturan praktis untuk memilihnya.
Perbandingan agent skills, server MCP, dan file rules: jawaban singkat
Agent skills, server MCP, dan file rules sama-sama menyediakan pengetahuan bagi coding agent. Pilih berdasarkan fungsi pengetahuan tersebut. MCP (model context protocol) digunakan untuk data yang dapat berubah saat diperiksa kembali. Skill digunakan untuk prosedur yang dapat ditulis hari ini dan tetap benar dalam enam minggu. File rules digunakan untuk beberapa fakta yang harus berlaku pada setiap sesi.
Pilihan tersebut memiliki biaya, yaitu context. Setiap token yang digunakan untuk instruksi yang tidak diperlukan agent adalah token yang tidak tersedia untuk kode yang sedang dibacanya. Token tersebut juga harus dibayar kembali pada setiap giliran karena seluruh context window dikirim ulang pada setiap request. Jadi, pertanyaan yang berguna bukan mekanisme mana yang dapat menjalankan tugas tersebut. Hampir setiap hari, ketiganya dapat digunakan. Pertanyaannya adalah mekanisme mana yang biayanya paling rendah saat tidak digunakan.
Biaya masing-masing sebelum digunakan
Ketiganya dimuat pada waktu yang berbeda, dan perbedaan waktulah yang menentukan seluruh dampaknya.
File aturan dimuat sepenuhnya saat peluncuran, pada setiap sesi, terlepas dari relevansinya. Claude Code membaca CLAUDE.md pada awal setiap percakapan dan memuatnya sepenuhnya, berapa pun panjangnya. Target yang didokumentasikan adalah kurang dari 200 baris per file, karena file yang lebih panjang menggunakan lebih banyak konteks dan lebih sulit dipatuhi secara konsisten. Kedua dampak tersebut mengarah ke hasil yang sama. Karena itu, file aturan sepanjang 900 baris lebih buruk daripada tidak berguna.
Skill dimuat dalam dua tahap. Saat startup, hanya baris description dari frontmatter SKILL.md setiap skill yang masuk ke konteks. Dengan demikian, model mengetahui bahwa skill tersebut tersedia dan secara umum mengetahui kapan skill itu berlaku. Isi skill dimuat ketika skill dipanggil. Karena itu, dokumen referensi sepanjang 400 baris hampir tidak membebani Anda sampai benar-benar diperlukan.
Dulu, MCP server merupakan komponen yang paling mahal. Di sinilah sebagian besar perbandingan yang Anda baca sekarang sudah tidak berlaku. Pencarian tool aktif secara default pada Claude Code versi saat ini. Saat sesi dimulai, hanya nama tool dan kolom instructions milik server yang dimuat. Skema JSON (JavaScript object notation) lengkap ditunda sampai Claude mencarinya. Menambahkan server tidak lagi memerlukan ribuan token sejak awal. Namun, server tetap menimbulkan biaya. Seluruh biayanya juga tetap muncul sejak awal pada konfigurasi yang menonaktifkan pencarian tool.
The data behind this chart
[
{
"label": "Rules file, 200 lines",
"at_startup": "2,500",
"after_use": "2,500"
},
{
"label": "Skill, 12 KB body",
"at_startup": 40,
"after_use": "3,000"
},
{
"label": "MCP server, tool search on",
"at_startup": 500,
"after_use": "3,200"
},
{
"label": "MCP server, tool search off",
"at_startup": "4,500",
"after_use": "4,500"
}
]Angka tersebut adalah perkiraan, bukan hasil pengukuran dari mesin Anda. Perkiraan ini didasarkan pada ukuran teks yang dimuat setiap mekanisme, dengan rasio sekitar empat karakter per token: file aturan 200 baris berukuran sekitar 10 KB markdown, deskripsi skill berukuran sekitar 160 karakter, dan server yang menyediakan dua belas tool membawa sekitar 18 KB skema serta blok instructions sebesar 2 KB. Claude Code memotong setiap deskripsi tool dan setiap kolom instructions server hingga 2 KB, sehingga bagian tersebut memiliki batas maksimum. Bagian berikutnya menunjukkan cara membaca angka nyata dari sistem Anda sendiri.
Baca dua baris pertama secara bersamaan. File aturan memerlukan 2,500 token dalam sesi ketika tidak ada yang membutuhkannya. Skill memerlukan 40 token dalam sesi yang sama, dan 3,000 pada satu dari setiap sepuluh sesi ketika skill tersebut dipanggil. Dua baris terakhir menunjukkan server yang sama dalam dua kondisi, yaitu pencarian tool aktif dan nonaktif: 500 token dibandingkan dengan 4,500. Selisih tersebut menjelaskan mengapa saran lama tentang pembengkakan konteks MCP masih sering beredar.
Pencarian tool memerlukan model yang mendukung blok tool_reference. Per Agustus 2026, model tersebut adalah Claude Sonnet 4.5, Haiku 4.5, Opus 4.5, dan versi yang lebih baru. Claude Code menonaktifkannya ketika ANTHROPIC_BASE_URL mengarah ke host yang bukan pihak pertama, karena sebagian besar proxy tidak meneruskan blok tersebut. Atur ENABLE_TOOL_SEARCH untuk mengendalikannya: false memuat semua skema sejak awal, true menunda semuanya, dan auto memuat skema sejak awal hanya jika ukurannya berada dalam 10% dari jendela konteks.
# Load schemas up front only if they fit in 5% of the window
ENABLE_TOOL_SEARCH=auto:5 claudePertanyaan penentu: apakah data berubah di antara pemanggilan?
Ajukan pertanyaan ini terlebih dahulu karena jawabannya langsung menyingkirkan salah satu opsi. Jika agent perlu membaca atau menulis sesuatu yang dapat berbeda saat diperiksa kembali, Anda memerlukan server. Misalnya issue tracker, database, dasbor pemantauan, atau API (application programming interface) internal Anda sendiri. Menuliskannya tidak membantu karena informasi yang Anda tulis langsung menjadi usang saat orang lain mengedit catatan tersebut.
Jika jawaban itu tetap benar dalam enam minggu tanpa ada yang memeliharanya, Anda memerlukan skill. Misalnya checklist rilis, prosedur migrasi, struktur respons error, atau cara repository ini mengharuskan pengujian ditulis. Skill adalah file di git. Skill tidak memiliki port, proses, atau mode kegagalan selain isinya yang salah, dan kesalahan tersebut dapat ditemukan melalui code review.
Jika itu adalah satu fakta yang harus berlaku untuk pekerjaan yang belum Anda pikirkan, masukkan fakta tersebut ke file aturan. Run make lint before committing. Never push to main. Handlers live in src/api/handlers/. Satu baris untuk setiap fakta. Saat sebuah entri berkembang menjadi langkah-langkah, entri tersebut bukan lagi fakta, melainkan prosedur, dan harus dipindahkan ke skill.
Kapan file aturan sudah memadai
File aturan dimuat dari beberapa lokasi, dari cakupan paling luas hingga paling spesifik: file kebijakan terkelola, ~/.claude/CLAUDE.md pribadi Anda, ./CLAUDE.md atau ./.claude/CLAUDE.md milik proyek, serta ./CLAUDE.local.md yang diabaikan oleh git. Semua file yang ditemukan digabungkan, bukan saling menimpa, dan file yang lokasinya lebih dekat ke direktori kerja dibaca terakhir.
Claude Code membaca CLAUDE.md, bukan AGENTS.md. Jika repositori Anda sudah memiliki AGENTS.md untuk alat lain, jangan memelihara dua salinan yang dapat berbeda isinya.
ln -s AGENTS.md CLAUDE.mdSymlink tidak mencetak apa pun jika berhasil. Mulai sesi, jalankan /context, lalu pastikan CLAUDE.md muncul di bawah Memory files. Jika tidak tercantum di sana, agen belum pernah membacanya dan perubahan redaksi tidak akan membantu. Jika Anda juga memerlukan baris khusus Claude, gunakan bentuk impor dan letakkan baris tersebut di bawah impor.
@AGENTS.md
## Claude Code
Use plan mode for changes under `src/billing/`.Ada satu hal yang perlu diperhatikan. @path import tidak menyimpan konteks. File yang diimpor diperluas dan dimuat saat peluncuran bersama file yang merujuknya, hingga kedalaman empat tingkat. Membagi file aturan sepanjang 600 baris menjadi enam impor membuatnya lebih teratur bagi manusia, tetapi sama sekali tidak mengubah biaya token. konvensi di balik AGENTS.md dan padanan yang ditujukan untuk manusia layak dibaca sebelum Anda menetapkan tata letak.
Yang mengurangi biaya adalah .claude/rules/ dengan field paths. File aturan yang memuat frontmatter paths hanya dimuat saat agen menyentuh file yang cocok dengan salah satu pola.
---
paths:
- "src/api/**/*.ts"
---
# API rules
- Every endpoint validates its input.
- Use the standard error response shape.Aturan tanpa field paths dimuat saat peluncuran dengan prioritas yang sama seperti .claude/CLAUDE.md. Jadi, pola yang tepat adalah aturan singkat yang selalu berlaku, ditambah daftar paths pada hal-hal yang hanya relevan di dalam satu direktori.
Saat Anda memerlukan sebuah skill
Skill adalah direktori yang berisi SKILL.md. Skill pribadi berada di ~/.claude/skills/<name>/SKILL.md dan berlaku untuk setiap project di komputer Anda. Skill project berada di .claude/skills/<name>/SKILL.md, ikut tersimpan bersama repository, dan dapat ditinjau dalam pull request seperti file lainnya.
mkdir -p ~/.claude/skills/summarize-changes---
name: summarize-changes
description: Summarizes uncommitted changes and flags anything risky. Use when the user asks what changed, wants a commit message, or asks to review their diff.
---
Run `git status` and `git diff` against the merge base.
Group the changes by intent, not by file.
Call out anything touching auth, migrations or deletions.description adalah satu-satunya bagian file tersebut yang berada dalam context sebelum skill dijalankan, sehingga memiliki dua fungsi. Bagian ini menjelaskan fungsi skill dan kapan skill tersebut digunakan. Deskripsi seperti "Membantu proses deploy" tidak memberi model informasi yang dapat dicocokkan dengan permintaan. Akibatnya, skill tidak pernah dijalankan dan Anda menyimpulkan bahwa skill tidak berfungsi.
Nama direktori menjadi command, sehingga contoh di atas menghasilkan /summarize-changes. Dalam skill pribadi atau skill project, frontmatter name hanya menetapkan label tampilan dalam daftar.
Setelah skill dipanggil, konten hasil render-nya masuk ke dalam percakapan sebagai satu pesan dan tetap berada di sana selama sisa session. Claude Code tidak membaca ulang file tersebut pada turn berikutnya. Tulis instruksi yang berlaku terus-menerus, bukan langkah yang hanya digunakan sekali, dan buat isi skill tetap ringkas. Sejak saat itu, setiap baris menjadi beban berulang pada setiap request. Setelah auto-compaction, Claude Code melampirkan kembali invocation terbaru dari setiap skill. Claude Code mempertahankan 5,000 token pertama dari setiap skill dalam budget gabungan sebesar 25,000 token. Jika Anda memanggil beberapa skill berukuran besar dalam satu session, skill yang paling lama akan dihapus sepenuhnya. Karena itu, sebuah skill dapat terlihat tidak lagi berpengaruh setelah percakapan berlangsung lama. Panggil skill tersebut lagi untuk memuatnya kembali. Jika prosedur yang sama berlaku untuk lebih dari satu codebase, bagikan satu skill ke beberapa repository alih-alih menyalin file tersebut.
Saat Anda memerlukan server MCP
Menambahkan server MCP hanya memerlukan satu perintah, dan transport menentukan bentuknya.
# Remote HTTP server
claude mcp add --transport http notion https://mcp.notion.com/mcp
# Remote HTTP server behind a bearer token
claude mcp add --transport http secure-api https://api.example.com/mcp \
--header "Authorization: Bearer your-token"
# Local stdio server: everything after -- is passed through untouched
claude mcp add --env AIRTABLE_API_KEY=YOUR_KEY --transport stdio airtable \
-- npx -y airtable-mcp-server-- penting. Untuk server stdio, opsi ini memisahkan opsi milik Claude Code dari baris perintah yang menjalankan server Anda. Jika dihilangkan, --port 8080 yang ditujukan untuk server akan diproses sebagai opsi untuk claude mcp add, lalu ditolak.
claude mcp list
claude mcp get notionclaude mcp add mengonfirmasi dengan baris Added ..., yang hanya menunjukkan bahwa konfigurasi telah ditulis ke disk. claude mcp list adalah perintah yang menunjukkan kondisi sebenarnya karena perintah ini menampilkan status kesehatan di samping setiap server: ✔ Connected, ! Needs authentication, atau ✘ Failed to connect. Status gagal berarti Claude Code tidak dapat menjangkau server tersebut, bukan berarti perintah daftar mengalami kegagalan. Di dalam sesi, /mcp menampilkan informasi yang sama untuk setiap server sekaligus jumlah tool.
Setiap panggilan ke server MCP berdiri sendiri dan membawa semua hal yang diperlukan, sehingga server MCP tidak mengingat permintaan Anda sebelumnya. Ini adalah pilihan desain dengan konsekuensi yang harus Anda tanggung: setiap state yang perlu dipertahankan harus disimpan di belakang server, dalam database atau file, dan komponen tersebut kini harus Anda operasikan.
Server MCP adalah proses yang harus Anda jalankan
Berikut biaya yang tidak dicantumkan dalam perbandingan vendor. Skill adalah sebuah file. Server MCP adalah perangkat lunak yang berjalan di suatu tempat. Jika tempat tersebut adalah VPS (virtual private server) Anda, Anda bertanggung jawab atas ketersediaannya.
Server stdio adalah kasus yang sederhana. Claude Code menjalankannya sebagai proses anak saat sesi dimulai, lalu proses tersebut berhenti saat sesi berakhir. Tidak ada yang perlu dipantau atau ditambal sesuai jadwalnya sendiri. Server HTTP jarak jauh adalah service yang berjalan lama. Server ini memerlukan hal yang sama seperti service lain yang berjalan lama.
[Unit]
Description=Notes MCP server
After=network-online.target
Wants=network-online.target
[Service]
User=mcp
WorkingDirectory=/srv/notes-mcp
ExecStart=/usr/bin/node /srv/notes-mcp/dist/server.js
Environment=PORT=8931
Restart=on-failure
RestartSec=5
NoNewPrivileges=true
PrivateTmp=true
[Install]
WantedBy=multi-user.targetsudo systemctl daemon-reload
sudo systemctl enable --now notes-mcp
systemctl is-active notes-mcp
journalctl -u notes-mcp -n 50 --no-pagersystemctl is-active harus menampilkan active. Jika menampilkan failed, journal menyimpan penyebabnya. Pada proses pertama, penyebabnya hampir selalu berupa variabel lingkungan yang belum disetel atau port yang sudah digunakan oleh proses lain. Restart=on-failure tidak bersifat opsional dalam kasus ini karena server MCP yang crash tidak memberi tahu Anda. Anda baru mengetahuinya saat agent memberi tahu bahwa agent tidak dapat membaca issue tracker Anda.
Ikat proses ke 127.0.0.1 dan tempatkan reverse proxy dengan TLS (transport layer security) di depannya. Server MCP yang dapat mengakses database Anda dan menjawab pada port publik tanpa autentikasi sama saja dengan database yang Anda publikasikan. Menjalankan server MCP pada VPS membahas proxy, sertifikat, dan firewall dengan benar.
Kemudian hitung pekerjaan berulangnya secara realistis. Service tersebut menerima pembaruan keamanan sesuai jadwalnya sendiri, terlepas dari agent yang berkomunikasi dengannya. Token OAuth-nya kedaluwarsa, dan claude mcp list mulai menampilkan ! Needs authentication pada waktu yang tidak tepat. Kredensialnya tersimpan dalam file konfigurasi atau header Authorization. Karena itu, kredensial tersebut memerlukan perlindungan yang sama seperti secret lainnya. Ini merupakan topik tersendiri: menjauhkan secret dari jangkauan agent AI. Tidak ada pekerjaan seperti itu pada skill.
Pertimbangkan alternatifnya sebelum membuat server. Jika data di balik server yang diusulkan berubah sekitar sekali setiap kuartal, skill yang memberi tahu agent tempat mencari data dan arti setiap field lebih murah daripada service yang harus terus Anda jalankan.
Cara mengukur biaya konteks Anda sendiri
Jangan lagi memperkirakan. Jalankan /context di dalam sesi. Perintah ini menampilkan rincian saat startup: system prompt, file memori, tools, dan server MCP, beserta bobot token masing-masing.
Periksa dua hal. Di bawah Memory files, pastikan setiap file aturan yang Anda harapkan tercantum. File yang tidak ada tidak dapat dilihat agent. Karena itu, hal ini harus menjadi pemeriksaan pertama saat instruksi diabaikan. Selanjutnya, periksa biaya setiap server. Jika server yang Anda gunakan dua kali sebulan termasuk baris terbesar dalam daftar tersebut, nonaktifkan server itu di /mcp. Aktifkan kembali untuk sesi yang memerlukannya. Konfigurasinya tetap tersimpan.
Server jarak jauh juga dapat melaporkan status seperti cached 2h ago · connects on first use · 5 tools. Artinya, Claude Code membaca daftar tools dari sesi sebelumnya, bukan terhubung saat startup. Claude Code akan terhubung saat tools pertama kali dipanggil. Tools tetap tersedia sejak pesan pertama Anda, jadi tidak ada yang perlu diperbaiki. Tetapkan MCP_DISCOVERY_CACHE=0 jika Anda ingin setiap server terhubung saat startup. Untuk gambaran yang lebih luas, mengelola jendela konteks Claude Code menjelaskan informasi yang tetap ada setelah compaction, sedangkan biaya sebenarnya token tersebut bagi Anda mengubah angka itu menjadi biaya uang.
Mengapa skill saya tidak pernah terpicu?
Penyebab yang paling umum adalah description. Itu adalah satu-satunya teks dalam konteks sebelum skill dijalankan. Jika teks tersebut tidak menyebutkan situasinya, tidak ada yang cocok. Tulis pemicu langsung di dalam kalimat: "Gunakan saat pengguna menanyakan perubahan, menginginkan pesan commit, atau meminta peninjauan diff." Deskripsi yang tidak jelas gagal secara diam-diam, sehingga masalah ini sulit diketahui.
Penyebab kedua adalah kesalahan penulisan pada frontmatter. Kesalahan ini akan terlihat jelas. Key yang tidak dikenal langsung ditolak:
Unexpected key(s) in SKILL.md frontmatter: argument-hint. Allowed properties are: allowed-tools, compatibility, description, license, metadata, namePenyebab ketiga adalah lokasi. Skill proyek dimuat dari .claude/skills/ di direktori kerja Anda dan di setiap direktori induk hingga root repositori. Skill dalam subdirektori di bawah lokasi awal Anda tidak dimuat saat peluncuran. Skill tersebut muncul saat agen pertama kali membaca atau mengedit file di dalam subdirektori itu. Sebelum itu, skill tersebut tidak muncul dalam pelengkapan otomatis dan tidak dapat dipanggil berdasarkan namanya.
Padanan MCP untuk kegagalan diam-diam ini adalah entri .mcp.json dengan url dan tanpa type. Claude Code membaca setiap entri tanpa type sebagai server stdio. Akibatnya, entri tersebut dilewati dan Claude Code melaporkan:
MCP server "notes" has a "url" but no "type"; add "type": "http" (or "sse" / "ws") to this entryMenggunakan ketiganya secara bersamaan
Mekanisme ini tidak saling bersaing untuk menempati slot yang sama. Konfigurasi yang berfungsi menggunakan masing-masing mekanisme pada bagian yang paling efisien. File rules berisi beberapa baris yang berlaku di semua konteks. Skills berisi prosedur dan hanya dimuat saat diperlukan. Satu MCP server, atau sesekali dua, menghubungkan sistem yang isinya tidak dapat Anda prediksi sebelumnya. Jika Anda masih membangun pemahaman tentang mekanisme pertama, apa sebenarnya agent skill menjelaskan formatnya secara terperinci.
Satu pengujian dapat menyelesaikan sebagian besar perdebatan tentang tempat menyimpan sesuatu. Hapus item tersebut, mulai sesi baru, lalu berikan tugas kepada agent. Jika agent hanya bekerja lebih lambat, item tersebut seharusnya berada dalam skill. Jika agent memberikan jawaban yang salah dengan yakin, item tersebut seharusnya berada dalam file rules. Jika agent sama sekali tidak dapat memperoleh informasi itu, Anda memerlukan server tersebut, dan sekarang juga memerlukan rencana untuk menjaga server itu tetap aktif.
FAQ
Apakah saya harus menulis skill atau menjalankan server MCP?
Tentukan berdasarkan apakah informasinya berubah antara satu pemanggilan dan pemanggilan berikutnya. Jika agent harus membaca status langsung yang dapat diedit orang lain, seperti pelacak issue, database, atau dashboard, Anda memerlukan server MCP karena apa pun yang Anda tulis akan menjadi usang segera setelah catatan berubah. Jika jawaban dapat ditulis satu kali dan tetap benar dalam enam minggu, tulislah skill. Skill adalah file dalam git tanpa proses yang perlu dijalankan, tanpa port yang perlu diekspos, dan tanpa jadwal patch, sehingga menjadi opsi yang lebih murah jika memang memungkinkan.
Apakah server MCP masih memenuhi context window saya?
Jauh lebih kecil dibandingkan sebelumnya. Tool search diaktifkan secara default pada Claude Code saat ini, sehingga hanya nama tool dan kolom instructions server yang dimuat saat sesi dimulai. Skema lengkap diambil saat Claude mencarinya. Pemuatan awal masih terjadi jika tool search dinonaktifkan: dengan ENABLE_TOOL_SEARCH=false, dengan ANTHROPIC_BASE_URL diarahkan ke proxy yang bukan pihak pertama, atau pada model yang lebih lama daripada generasi Claude 4.5. Jalankan /context untuk melihat situasi yang berlaku, karena angka dalam artikel perbandingan lama mengasumsikan pemuatan awal.
Apakah Claude Code membaca AGENTS.md?
Tidak. Claude Code membaca CLAUDE.md. Jika repositori Anda sudah memiliki AGENTS.md untuk agent lain, arahkan salah satunya ke file yang lain, bukan menyimpan dua salinan. Jalankan ln -s AGENTS.md CLAUDE.md untuk membuat symlink biasa, atau letakkan @AGENTS.md pada baris pertama CLAUDE.md, lalu tambahkan instruksi khusus Claude di bawahnya. Kemudian mulai sesi dan jalankan /context untuk memastikan CLAUDE.md muncul di bawah Memory files.
Mengapa skill saya berhenti berpengaruh di tengah sesi?
Auto-compaction biasanya menjadi penyebabnya. Saat percakapan diringkas, Claude Code melampirkan kembali pemanggilan terbaru dari setiap skill. Claude Code mempertahankan 5,000 token pertama dari setiap skill dalam anggaran gabungan sebesar 25,000 token untuk semuanya. Pengisian anggaran dimulai dari skill yang paling baru dipanggil. Karena itu, skill lama dapat dihapus sepenuhnya jika Anda telah memanggil beberapa skill berukuran besar. Panggil kembali skill tersebut untuk memulihkan seluruh isinya.
Bagaimana cara mencegah file aturan yang panjang dimuat pada setiap sesi?
Pindahkan bagian yang hanya diperlukan sesekali ke dalam file .claude/rules/ dengan kolom paths pada frontmatter-nya. Dengan demikian, setiap file hanya dimuat saat agent menyentuh file yang cocok. Memecah file menjadi import @path tidak membantu karena file yang diimpor akan diperluas dan dimuat saat peluncuran, bersama file yang mereferensikannya. Prosedur multi-langkah, bukan fakta yang selalu berlaku, sebaiknya dijadikan skill karena isi skill tidak menimbulkan biaya sampai dipanggil.