Skip to main content
Agen AI dan MCP · Pelajaran 1 dari 4 · 11 menit

Apa Itu MCP Server? Begini Perjalanan Satu Tool Call

Apa itu MCP server, dari nol: perjalanan satu tool call agen AI dari client ke server lalu kembali, dan kapan memakai transport stdio atau Streamable HTTP.

Oleh Matthews WongDitinjau pada Dicek dengan MCP specification 2026-07-28

Poin utama

MCP server adalah program atau layanan web yang menyediakan tool dan data untuk aplikasi AI lewat Model Context Protocol. Model meminta sebuah tool, host memeriksa permintaan itu, MCP client-nya mengirim tools/call berformat JSON-RPC, lalu hasilnya kembali sebagai teks di konteks model. stdio membawa server lokal; Streamable HTTP membawa server jarak jauh.

Setelah pelajaran ini, Anda bisa

  • Menyebut host, client, dan server dalam setup MCP, serta tahu siapa yang memutuskan apakah sebuah tool boleh berjalan.
  • Mengikuti satu tool call dari permintaan model sampai hasilnya masuk ke konteks, pesan demi pesan.
  • Memilih stdio atau Streamable HTTP untuk sebuah server, dan tahu apa yang terbuka pada masing-masing.
Lihat cara kerjanya

Ikuti diagramnya langkah demi langkah

Tekan Putar, atau melangkah dengan panah. Setiap langkah juga ditulis di bawah diagram.

Satu tool call MCP, dari permintaan sampai hasil

Client mendaftar tool milik server, model meminta satu call, host memeriksanya, client mengirim tools/call, lalu hasilnya kembali ke konteks model sebagai teks.

Ditinjau pada 17 Oktober 2026 · MCP specification 2026-07-28

Langkah 1 dari 6. Host adalah aplikasi AI-nya, misalnya Claude Code. Host menjalankan satu MCP client untuk setiap server. Server menyediakan tool; model hanya melihat nama, skema, dan hasilnya.

Tombol: ← → langkah · Home / End · K putar atau jeda

  1. Host adalah aplikasi AI-nya, misalnya Claude Code. Host menjalankan satu MCP client untuk setiap server. Server menyediakan tool; model hanya melihat nama, skema, dan hasilnya.

  2. Pertama, client meminta tools/list ke server. Setiap tool kembali dengan nama, deskripsi, dan input schema, yang lalu ditunjukkan host kepada model.

    tools/list → name · description · inputSchema
  3. Dari permintaan pengguna dan deskripsi tadi, model meminta satu call: nama tool beserta argumennya. Model tidak bisa menjalankan apa pun sendiri; ia hanya bisa meminta.

    tool: search_issues · arguments: query=crashTebak langkah berikutnya Model sudah meminta sebuah call. Apa yang terjadi sebelum permintaan itu sampai ke server? (Server langsung menjalankannya · Host memeriksa aturannya atau bertanya ke Anda)
  4. Host mencocokkan call itu dengan aturan izinnya, atau bertanya kepada Anda. Spesifikasi MCP menyatakan manusia harus selalu bisa menolak pemanggilan tool.

    Claude Code checks deny, then ask, then allow
  5. Client mengirim tools/call berformat JSON-RPC. Sejak spesifikasi 2026-07-28 tidak ada handshake di awal: setiap request membawa versi protokolnya sendiri di _meta.

    method: tools/call · _meta: protocolVersion 2026-07-28Tebak langkah berikutnya Server menjawab. Dalam bentuk apa model menerima teks di hasil itu? (Sebagai fakta yang sudah dicek · Sebagai teks tambahan di konteksnya · Sebagai perintah yang wajib dijalankan host)
  6. Server mengembalikan content, biasanya teks, ditambah isError jika tool gagal. Client menyerahkannya ke model sebagai konteks tambahan; tidak ada yang mengecek kebenarannya.

    resultType: complete · content: text · isError: false

Apa itu MCP server, dalam bahasa sederhana?

Model Context Protocol (MCP) adalah standar terbuka untuk menghubungkan aplikasi AI dengan tool dan data di luar dirinya. MCP server adalah sisi yang menyediakannya: program kecil di komputer Anda, atau layanan web, yang mendaftar tool yang dimilikinya dan menjalankan salah satunya bila diminta. Contoh umumnya membungkus issue tracker, database, API cloud, atau sebuah folder berisi file.

Baca selengkapnya (2)

Spesifikasinya menyebut tiga peran. Host adalah aplikasi AI-nya, misalnya Claude Code atau aplikasi chat desktop. Host membuat satu client untuk setiap server, dan setiap client hanya berbicara dengan satu server. Host menyimpan seluruh percakapan dan menegakkan persetujuan pengguna; secara desain, server hanya menerima yang dibutuhkannya dan seharusnya tidak bisa mengintip server lain.

Server bisa menyediakan tiga jenis hal. Tool adalah fungsi yang boleh diminta model untuk dijalankan. Resource adalah konteks dan data, masing-masing dialamatkan dengan URI. Prompt adalah templat pesan yang dipilih pengguna. Pelajaran ini mengikuti sebuah tool call, karena di tool-lah agen berhenti sekadar membaca dan mulai bertindak.

Bagaimana satu tool call berjalan dari model ke server lalu kembali?

Model tidak pernah berbicara langsung dengan server. Model meminta call kepada host dengan menyebut nama tool dan argumennya; host memutuskan apakah call itu boleh berjalan, dan baru setelah itu MCP client-nya mengirim request JSON-RPC ke server. Hasilnya kembali lewat jalur yang sama dan masuk ke konteks model sebagai teks.

Baca selengkapnya (3)

Penemuan tool datang lebih dulu. Client mengirim tools/list dan menerima nama, deskripsi, serta input schema setiap tool. Deskripsi itulah yang dibaca model untuk memutuskan kapan sebuah tool cocok dipakai, sehingga deskripsi yang kabur atau berniat jahat bisa mengubah perilaku agen. Spesifikasi juga menyatakan client wajib menganggap anotasi tool, misalnya petunjuk read-only, tidak tepercaya kecuali berasal dari server yang dipercaya.

Call-nya sendiri berupa request tools/call yang berisi nama tool dan argumennya. Sejak revisi 2026-07-28, MCP bersifat stateless: tidak ada handshake initialize dan tidak ada session protokol, dan setiap request membawa versi protokol serta kemampuan client di field _meta. Server yang dibuat untuk revisi 2025 masih mengharapkan handshake, dan client mendeteksi jenis server yang sedang diajaknya bicara.

Balasannya berupa result dengan array content, biasanya teks, dan isError bernilai true bila tool berjalan tetapi gagal, misalnya karena format tanggal salah. Tool yang tidak dikenal atau request yang rusak adalah protocol error, bukan isError. Dalam kedua kasus, client meneruskan hasilnya ke model, yang membacanya sebagai input; tidak ada yang mengecek kebenarannya di sepanjang jalan.

stdio atau Streamable HTTP: transport mana yang membawa call?

Transport adalah cara pesan berpindah; isi pesannya sama saja. Dengan stdio, host menjalankan server sebagai child process di komputer Anda, lalu keduanya bertukar satu pesan JSON-RPC per baris lewat standard input dan output. Dengan Streamable HTTP, server adalah layanan yang berdiri sendiri, dan setiap pesan dikirim sebagai HTTP POST ke satu endpoint.

Baca selengkapnya (2)

stdio cocok untuk tool lokal: tidak ada port dan tidak ada listener jaringan. Server berjalan dengan hak akses user Anda, jadi memercayai perintah yang Anda jalankan itu penting. Spesifikasi menyatakan server stdio tidak boleh menulis apa pun selain pesan MCP ke stdout, dan boleh menulis log ke stderr.

Streamable HTTP cocok untuk server bersama atau jarak jauh. Balasannya berupa satu objek JSON atau aliran event khusus untuk request tersebut. Karena server bisa dijangkau lewat jaringan, spesifikasi mewajibkannya memvalidasi header Origin, menyarankan server lokal hanya bind ke 127.0.0.1, dan menyarankan setiap koneksi diautentikasi. Transport HTTP+SSE yang lama sudah deprecated.

Cara situs ini melakukannya

Konfigurasi nyata di balik pelajaran ini

Kutipan dari repositori yang membangun dan men-deploy situs ini, apa adanya.

app/components/blogs/KubernetesMcpServerReadOnlyToolsets.tsx:327-332
const config = process.argv[2];
const server = spawn(
  "npx",
  ["-y", "kubernetes-mcp-server@0.0.67", "--config", config],
  { stdio: ["pipe", "pipe", "inherit"] },
);

Skrip audit di artikel Kubernetes MCP situs ini adalah MCP client yang sangat kecil, dan inilah transport stdio dalam enam baris: client menjalankan server sebagai child process dan memegang stdin serta stdout-nya. stderr diwariskan, jadi log server muncul di terminal tanpa tercampur ke aliran pesan. Versinya dikunci, karena server yang Anda jalankan adalah kode yang Anda eksekusi.

app/components/blogs/KubernetesMcpServerReadOnlyToolsets.tsx:351-356
send({ jsonrpc: "2.0", id: 1, method: "initialize",
  params: { protocolVersion: "2025-06-18", capabilities: {}, clientInfo: { name: "audit", version: "1" } } });
setTimeout(() => {
  send({ jsonrpc: "2.0", method: "notifications/initialized" });
  send({ jsonrpc: "2.0", id: 2, method: "tools/list" });
}, 3000);

Pesan-pesan di skrip yang sama memakai protokol era 2025: request initialize, notifikasi initialized, lalu tools/list, yang cocok untuk versi server yang diuji di artikel itu. Di revisi 2026-07-28 handshake tersebut sudah tidak ada. Client bisa langsung mengirim tools/list dengan versinya di _meta, dan client yang juga mendukung server lama sebaiknya mencoba server/discover lebih dulu.

Yang sering rusak

Kesalahan yang benar-benar membuang waktu

  • Server stdio yang mencetak ke stdout

    Satu console.log yang nyasar di server stdio ikut masuk ke aliran pesan, dan client gagal mem-parse-nya sebagai JSON-RPC. Spesifikasi menyatakan server stdio hanya boleh menulis pesan MCP yang valid ke stdout. Kirim semua log ke stderr.

  • Memercayai deskripsi tool yang tidak pernah Anda baca

    Model memilih tool berdasarkan deskripsinya. Deskripsi yang mengklaim lebih dari kemampuan tool, atau menyuruh model melakukan sesuatu berikutnya, akan mengarahkan agen. Baca output tools/list sebuah server sebelum Anda menghubungkannya ke sistem sungguhan.

  • Mencampur era protokol

    Tutorial tahun 2025 membuka setiap koneksi dengan initialize dan menyimpan header Mcp-Session-Id. Revisi 2026-07-28 menghapus keduanya, jadi potongan kode lama di SDK baru, atau sebaliknya, gagal dengan cara yang membingungkan. Cek dulu revisi apa yang dipakai client dan server Anda.

  • Server HTTP lokal yang terbuka ke jaringan

    Server Streamable HTTP yang bind ke 0.0.0.0 tanpa autentikasi juga menjawab mesin lain, dan tanpa pengecekan Origin sebuah halaman web bisa menjangkaunya lewat DNS rebinding. Bind ke 127.0.0.1 dan wajibkan token.

Dua transport standar MCP
stdioChild process yang dijalankan host di komputer AndaSatu pesan JSON-RPC per baris di stdin dan stdoutPerintah yang dijalankan memakai hak akses Anda
Streamable HTTPLayanan mandiri, lokal atau jarak jauhSatu HTTP POST per pesan; balasannya JSON atau aliran eventSiapa pun yang bisa menjangkau endpoint: cek Origin, wajibkan auth
Coba sendiri

Lakukan di komputer Anda sendiri

Anda butuh terminal dan Node.js 22.19 atau lebih baru, yang dibutuhkan MCP Inspector. Tanpa akun dan tanpa API key. Inspector adalah client debugging rujukan protokol ini, jadi Anda bisa melihat pesan asli tanpa model AI di tengahnya.

  1. Buat folder latihan kecil untuk dilayani oleh server rujukan filesystem.

    mkdir -p ~/mcp-practice && echo hello > ~/mcp-practice/note.txt
  2. Minta daftar tool server itu lewat stdio. Inspector menjalankan server sebagai child process, persis seperti yang dilakukan host.

    npx -y @modelcontextprotocol/inspector --cli npx @modelcontextprotocol/server-filesystem ~/mcp-practice --method tools/list
  3. Cari list_directory di output-nya, lalu baca deskripsi dan input schema-nya. Teks itulah satu-satunya yang diketahui model tentang tool tersebut.

  4. Panggil tool-nya. Content di dalam result adalah teks yang akan dibaca agen kembali ke konteksnya.

    npx -y @modelcontextprotocol/inspector --cli npx @modelcontextprotocol/server-filesystem ~/mcp-practice --method tools/call --tool-name list_directory --tool-arg path=$HOME/mcp-practice
  5. Buka Inspector versi web untuk server yang sama agar pertukarannya terlihat sebagai pesan JSON-RPC, satu request dan satu response setiap kali.

    npx -y @modelcontextprotocol/inspector npx @modelcontextprotocol/server-filesystem ~/mcp-practice
Kuis singkat

Tiga pertanyaan sebelum lanjut

Pilih jawaban untuk melihat kenapa benar atau salah. Tidak ada nilai, jadi tebak saja dengan bebas; jawaban yang salah disimpan di browser ini agar kursus bisa menanyakannya lagi nanti.

  1. 1.Dalam setup MCP, bagian mana yang memutuskan apakah sebuah tool call boleh berjalan?
  2. 2.Transport mana yang menjalankan server sebagai child process di komputer Anda?
  3. 3.Menurut spesifikasi 2026-07-28, apa yang wajib dikirim client sebelum tools/call pertamanya?
Pikirkan dulu

Jawab dalam hati, lalu cek

  1. 1.Mengapa deskripsi tool yang buruk bisa membuat agen berperilaku salah meski kode tool-nya benar?Lihat jawabannya

    Jawaban:Model memilih tool dan argumen hanya dari nama, deskripsi, dan skemanya. Deskripsi yang melebih-lebihkan kemampuan tool, atau membawa instruksi, mengarahkan pilihan itu sebelum kode apa pun berjalan.

  2. 2.Sebuah tool berjalan, tetapi format argumen tanggalnya salah. Apakah client menerima error JSON-RPC?Lihat jawabannya

    Jawaban:Tidak. Itu tool execution error: result biasa dengan isError bernilai true dan pesan di content, yang bisa dibaca dan diperbaiki model. Error JSON-RPC dipakai untuk masalah protokol, seperti tool yang tidak dikenal atau request yang rusak.

  3. 3.Mengapa server stdio menulis log ke stderr, bukan ke stdout?Lihat jawabannya

    Jawaban:stdout membawa pesan JSON-RPC, satu per baris, dan spesifikasi menyatakan server stdio tidak boleh menulis hal lain di sana. Apa pun tambahannya akan merusak aliran pesan; stderr bebas dipakai untuk log.

Pelajari lebih dalam

Bahasan mendalam terkait di situs ini