Agent Skills vs MCP Servers vs Rules Files: Mana Dipilih?
Bandingkan skill, MCP server, dan rules file untuk coding agent berdasarkan jenis pengetahuan, biaya token di setiap turn, serta beban pemeliharaannya.
Perbandingan agent skills, MCP servers, dan rules files: jawaban singkat
Agent skills, MCP servers, dan rules files semuanya 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 masih benar enam minggu kemudian. Rules file digunakan untuk beberapa fakta yang harus berlaku pada setiap sesi.
Pilihan ini 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 turn karena seluruh context window dikirim ulang pada setiap request. Jadi, pertanyaan yang tepat bukan mekanisme mana yang dapat menjalankan tugas tersebut. Hampir setiap hari, ketiganya dapat melakukannya. Pertanyaannya adalah mekanisme mana yang biayanya paling rendah saat tidak digunakan.
Biaya masing-masing sebelum digunakan
Ketiganya dimuat pada waktu yang berbeda, dan perbedaan waktu tersebut merupakan perbedaan utamanya.
File aturan dimuat sepenuhnya saat peluncuran, pada setiap sesi, baik relevan maupun tidak. 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 context dan lebih sulit dipatuhi secara konsisten. Kedua dampak tersebut memperburuk keadaan, sehingga file aturan 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 context. Dengan demikian, model mengetahui bahwa skill tersebut tersedia dan memahami secara umum kapan skill itu berlaku. Isinya dimuat saat skill dipanggil. Karena itu, dokumen referensi 400 baris hampir tidak menimbulkan biaya sampai benar-benar diperlukan.
MCP server dahulu merupakan komponen yang paling mahal. Inilah alasan sebagian besar perbandingan yang Anda baca sekarang sudah tidak sesuai. Tool search aktif secara default pada Claude Code versi saat ini. Hanya nama tool dan kolom instructions dari server yang dimuat saat sesi dimulai. Skema JSON (JavaScript object notation) lengkap ditunda sampai Claude mencarinya. Menambahkan server tidak lagi memerlukan ribuan token sejak awal. Namun, tetap ada biayanya, dan seluruh biaya tersebut tetap muncul sejak awal pada konfigurasi yang menonaktifkan tool search.
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 memiliki sekitar 18 KB skema serta blok instructions 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 menggunakan 2,500 token dalam sesi ketika tidak ada yang membutuhkannya. Skill menggunakan 40 token dalam sesi yang sama, dan 3,000 pada satu dari sepuluh sesi ketika skill tersebut dijalankan. Dua baris terakhir menunjukkan server yang sama dalam dua konfigurasi, dengan tool search aktif dan nonaktif: 500 token dibandingkan dengan 4,500. Selisih tersebut menjelaskan alasan saran lama tentang pembengkakan context MCP masih beredar.
Tool search 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. Tetapkan 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 context window.
# 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 mengeliminasi satu opsi. Jika agent perlu membaca atau menulis sesuatu yang dapat berbeda saat diakses kembali, Anda memerlukan server. Contohnya issue tracker, database, dashboard monitoring, atau API (application programming interface) internal Anda sendiri. Menuliskannya dalam file tidak membantu karena informasi tersebut langsung menjadi usang ketika orang lain mengedit record. Codebase Anda sendiri juga termasuk dalam daftar itu karena strukturnya berubah setiap kali ada commit. Inilah alasan untuk memberikan agent peta repository yang telah diuraikan melalui MCP, bukan menjelaskan tata letaknya dalam file yang akan usang.
Jika jawabannya tetap benar dalam enam minggu tanpa perlu dipelihara, Anda memerlukan skill. Contohnya checklist rilis, prosedur migrasi, struktur respons error, atau cara repository ini mengharuskan test ditulis. Skill adalah file di git. Skill tidak memiliki port, process, atau mode kegagalan selain isinya yang salah, dan code review dapat mendeteksinya.
Jika informasi tersebut berupa satu fakta yang harus berlaku untuk pekerjaan yang belum Anda pikirkan, masukkan ke file rules. 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 itu tidak lagi berupa fakta, melainkan prosedur, sehingga harus dipindahkan ke skill.
Kapan file aturan sudah memadai
File aturan dimuat dari beberapa lokasi, dari yang cakupannya paling luas hingga yang paling spesifik: file kebijakan terkelola, ~/.claude/CLAUDE.md pribadi Anda, ./CLAUDE.md atau ./.claude/CLAUDE.md milik proyek, dan ./CLAUDE.local.md yang diabaikan oleh git. Semua file yang ditemukan digabungkan, bukan saling menimpa, dan file yang lebih dekat dengan direktori kerja dibaca terakhir.
Claude Code membaca CLAUDE.md, bukan AGENTS.md. Jika repositori Anda sudah memiliki AGENTS.md untuk alat lain, jangan mengelola 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, agent belum pernah membacanya dan perubahan redaksi tidak akan membantu. Jika Anda juga ingin menambahkan baris khusus Claude, gunakan format import dan letakkan baris tersebut di bawah import.
@AGENTS.md
## Claude Code
Use plan mode for changes under `src/billing/`.Ada satu hal yang perlu diperhatikan. @path import tidak menghemat context. File yang diimpor diperluas dan dimuat saat peluncuran bersama file yang merujuknya, hingga kedalaman empat tingkat. Memecah file aturan sepanjang 600 baris menjadi enam import membuatnya lebih rapi bagi manusia, tetapi sama sekali tidak mengubah biaya token. konvensi di balik AGENTS.md dan padanan yang ditujukan bagi manusia perlu dibaca sebelum Anda menetapkan tata letak.
Yang mengurangi biaya adalah .claude/rules/ dengan field paths. File aturan yang memiliki frontmatter paths hanya dimuat ketika agent 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 digunakan adalah aturan singkat yang selalu berlaku, ditambah daftar paths pada aturan yang hanya relevan di dalam satu direktori.
Saat Anda menginginkan sebuah skill
Skill adalah direktori yang berisi SKILL.md. Skill pribadi berada di ~/.claude/skills/<name>/SKILL.md dan berlaku untuk setiap proyek di komputer Anda. Skill proyek 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 perlu digunakan. Deskripsi seperti "Membantu proses deploy" tidak memberi model informasi yang dapat dicocokkan dengan permintaan, sehingga skill diam-diam tidak pernah dijalankan dan Anda menyimpulkan bahwa skill tidak berfungsi.
Nama direktori menjadi command, sehingga contoh di atas menghasilkan /summarize-changes. Pada skill pribadi atau skill proyek, frontmatter name hanya menetapkan label tampilan dalam listing.
Setelah skill dipanggil, konten hasil render-nya masuk ke percakapan sebagai satu message 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 satu kali, dan buat isi skill tetap ringkas karena sejak saat itu setiap baris menjadi beban berulang pada setiap request. Setelah auto-compaction, Claude Code memasang kembali pemanggilan terbaru dari setiap skill. Proses ini mempertahankan 5.000 token pertama dari setiap skill dalam anggaran gabungan 25.000 token. Jika Anda memanggil beberapa skill besar dalam satu session, skill yang paling lama akan dihapus seluruhnya. Karena itu, sebuah skill dapat tampak tidak lagi berpengaruh setelah percakapan berlangsung lama. Panggil kembali skill tersebut untuk memasukkannya lagi. Skill yang berisi banyak prosedur menunjukkan trade-off ini secara nyata: skill unlazy dan metode Depth Tree-nya menggunakan context untuk gate dan file rencana, sebagai imbalan atas agent yang tidak lagi menyatakan pekerjaan selesai terlalu cepat. Jika prosedur yang sama berlaku untuk lebih dari satu codebase, bagikan satu skill ke beberapa repository daripada menyalin file tersebut.
Saat Anda memerlukan server MCP
Menambahkannya 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. Pada server stdio, pemisah ini membedakan 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, yang kemudian menolaknya.
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 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 tampilan yang sama untuk setiap server, sekaligus jumlah tool.
Setiap pemanggilan 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 berada di belakang server, dalam database atau file, dan sekarang Anda harus mengoperasikannya.
MCP server adalah proses yang harus Anda jalankan
Berikut biaya yang tidak dicantumkan dalam perbandingan vendor. Skill adalah sebuah file. MCP server adalah software yang berjalan di suatu tempat. Jika tempat tersebut adalah VPS (virtual private server) Anda, Andalah yang bertanggung jawab atas uptime-nya.
Stdio server adalah kasus yang paling sederhana. Claude Code menjalankannya sebagai proses turunan ketika sesi dimulai, lalu proses tersebut berhenti ketika sesi berakhir. Tidak ada yang perlu dimonitor atau di-patch sesuai jadwalnya sendiri. Remote HTTP server adalah service yang berjalan lama dan memerlukan semua hal yang diperlukan oleh service 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 environment variable yang belum ada atau port yang sudah digunakan oleh proses lain. Restart=on-failure tidak bersifat opsional dalam kasus ini karena MCP server yang crash tidak memberi tahu Anda. Anda baru mengetahuinya ketika agent memberi tahu bahwa agent tidak dapat membaca issue tracker Anda.
Bind proses ke 127.0.0.1 dan tempatkan reverse proxy dengan TLS (transport layer security) di depannya. MCP server yang dapat mengakses database Anda dan menjawab pada port publik tanpa autentikasi berarti database tersebut telah Anda publikasikan. Menjalankan MCP server pada VPS membahas proxy, sertifikat, dan firewall dengan benar.
Kemudian hitung pekerjaan berulangnya secara realistis. Service tersebut menerima security update sesuai jadwalnya sendiri, terlepas dari agent yang berkomunikasi dengannya. Token OAuth-nya kedaluwarsa, lalu claude mcp list mulai menampilkan ! Needs authentication pada waktu yang tidak tepat. Kredensialnya tersimpan dalam file konfigurasi atau header Authorization, sehingga harus ditangani seperti secret lainnya. Ini merupakan topik tersendiri: menjauhkan secret dari jangkauan AI agent. Tidak satu pun pekerjaan tersebut diperlukan untuk sebuah skill.
Pertimbangkan alternatifnya sebelum Anda membangun server. Jika data di balik server yang diusulkan berubah kira-kira 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 bagian Memory files, pastikan setiap file aturan yang diharapkan tercantum. File yang hilang tidak terlihat oleh agent. Karena itu, hal pertama yang perlu dipastikan ketika instruksi diabaikan adalah apakah file tersebut memang ada dalam daftar. Jika file tercantum tetapi aturan masih dilewati, penyebabnya berada di tempat lain, dan alasan agent melewati instruksi yang dapat dilihatnya perlu ditelusuri sebelum Anda menulis ulang baris tersebut. Kemudian, periksa biaya setiap server. Jika server yang digunakan dua kali sebulan termasuk salah satu entri terbesar dalam daftar itu, nonaktifkan server tersebut di /mcp dan aktifkan kembali untuk sesi yang memerlukannya. Konfigurasi 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 dan tidak terhubung saat startup. Claude Code akan terhubung saat sebuah tool pertama kali dipanggil. Tools tersebut 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 hal yang tetap tersedia setelah kompaksi, 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 satu-satunya teks dalam konteks sebelum skill dijalankan. Jika teks tersebut tidak menyebutkan situasinya, tidak ada yang cocok. Tulis pemicunya langsung di dalam kalimat: "Gunakan saat pengguna menanyakan perubahan, menginginkan pesan commit, atau meminta peninjauan diff." Deskripsi yang tidak jelas gagal tanpa pesan error, sehingga masalah ini sulit diketahui.
Penyebab kedua adalah kesalahan pengetikan pada frontmatter. Kesalahan ini menampilkan pesan error. Kunci 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 project dimuat dari .claude/skills/ di direktori kerja Anda dan di setiap direktori induk hingga root repositori. Skill di direktori bertingkat di bawah lokasi awal Anda tidak dimuat saat peluncuran. Skill tersebut muncul saat agent pertama kali membaca atau mengedit file di dalam subdirektori itu. Sebelum itu, skill tidak muncul dalam autocomplete dan tidak dapat dipanggil berdasarkan nama.
Kegagalan senyap yang setara pada MCP adalah entri .mcp.json dengan url tanpa type. Claude Code menganggap setiap entri tanpa type sebagai server stdio. Karena itu, 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
Ketiga mekanisme ini tidak saling bersaing untuk menempati slot yang sama. Konfigurasi yang efektif menggunakan masing-masing mekanisme pada bagian yang paling efisien. File aturan memuat beberapa baris yang berlaku di semua situasi. Skill memuat prosedur dan hanya dimuat saat diperlukan. Satu server MCP, atau sesekali dua server, menghubungkan sistem yang isinya tidak dapat Anda prediksi sebelumnya. Jika Anda masih membangun pemahaman tentang mekanisme pertama, penjelasan tentang skill agent sebenarnya membahas formatnya secara terperinci.
Satu pengujian dapat menyelesaikan sebagian besar perdebatan tentang penempatan suatu hal. Hapus hal tersebut, mulai sesi baru, lalu berikan tugas itu kepada agent. Jika agent hanya menjadi lebih lambat, hal tersebut seharusnya berada dalam skill. Jika agent memberikan jawaban yang salah dengan penuh keyakinan, hal tersebut seharusnya berada dalam file aturan. Jika agent sama sekali tidak dapat memperoleh informasinya, 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 informasi tersebut berubah antara satu pemanggilan dan pemanggilan berikutnya. Jika agent harus membaca status aktif yang dapat diedit orang lain, seperti issue tracker, 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 enam minggu kemudian, tulislah skill. Skill adalah file dalam git tanpa proses yang harus dijalankan, port yang harus diekspos, atau jadwal patch, sehingga menjadi pilihan yang lebih murah jika memang memungkinkan.
Apakah server MCP masih memenuhi context window saya?
Jauh lebih sedikit dibandingkan sebelumnya. Tool search diaktifkan secara default di Claude Code saat ini, sehingga hanya nama tool dan field instructions milik server yang dimuat saat sesi dimulai. Skema lengkap diambil ketika Claude mencarinya. Pemuatan di awal tetap terjadi jika tool search dinonaktifkan: dengan ENABLE_TOOL_SEARCH=false, dengan ANTHROPIC_BASE_URL yang diarahkan ke proxy yang bukan pihak pertama, atau pada model yang lebih lama daripada generasi Claude 4.5. Jalankan /context untuk mengetahui situasi Anda, karena angka dalam tulisan perbandingan lama mengasumsikan pemuatan di awal.
Apakah Claude Code membaca AGENTS.md?
Tidak. Claude Code membaca CLAUDE.md. Jika repository Anda sudah memiliki AGENTS.md untuk agent lain, arahkan salah satunya ke file yang lain daripada menyimpan dua salinan. Jalankan ln -s AGENTS.md CLAUDE.md untuk membuat symlink biasa, atau tambahkan @AGENTS.md pada baris pertama CLAUDE.md, lalu tambahkan instruksi khusus Claude di bawahnya. Setelah itu, mulai sesi dan jalankan /context untuk memastikan CLAUDE.md muncul di bawah Memory files.
Mengapa skill saya berhenti berpengaruh di tengah sesi?
Biasanya penyebabnya adalah auto-compaction. Saat percakapan diringkas, Claude Code memasang kembali pemanggilan terbaru dari setiap skill. Claude Code mempertahankan 5,000 token pertama dari setiap skill, dengan anggaran gabungan 25,000 token untuk seluruh skill. Pengisian anggaran dimulai dari skill yang paling baru dipanggil. Jika Anda telah memanggil beberapa skill berukuran besar, skill yang lebih lama akan dihapus seluruhnya. Panggil kembali skill tersebut untuk memulihkan konten lengkapnya.
Bagaimana cara mencegah file aturan yang panjang dimuat di setiap sesi?
Pindahkan bagian yang hanya kadang diperlukan ke dalam file .claude/rules/ dengan field paths pada frontmatter-nya, sehingga setiap file hanya dimuat ketika agent mengakses file yang sesuai. Memecah file menjadi import @path tidak membantu karena file yang diimpor 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.