Menyelami Arsitektur MCP: Dari Transport hingga Tool Chaining
Melangkah Lebih Jauh dengan MCP
Setelah memahami dasar-dasar perancangan skema data pada bahasan sebelumnya, kini saatnya kita masuk ke ranah infrastruktur jaringan dan orkestrasi logika. Membuat MCP Server yang berfungsi di komputer lokal adalah langkah awal yang mudah. Namun, membawa server tersebut ke tingkat produksi—di mana ia harus melayani AI jarak jauh, menghadapi latency internet, dan merespons instruksi kompleks pengguna—memerlukan pemahaman mendalam tentang bagaimana data mengalir di bawah kap protokol.
Dalam panduan ini, kita akan mengupas tuntas orkestrasi Tool Chaining, prinsip efisiensi tool, pemanfaatan Resource secara dinamis, hingga peta pemilihan Transport Protocol dan Connection Type yang tepat.
1. Fondasi Data: Resources vs Resource Templates
Pada artikel sebelumnya, kita telah menyentuh sekilas tentang Resources. Mari kita gali lebih dalam bagaimana merancangnya agar efisien secara memori dan biaya token.
Resources (Statis & Pasif)
Resources adalah representasi data statis atau data yang jarang berubah yang diekspos oleh server. AI Host akan membacanya secara utuh.
- Cara Kerja: AI melakukan pemanggilan
resources/readuntuk URI tertentu (misalnyasqlite://metadata), dan server mengembalikan seluruh data tersebut. - Kapan Digunakan: Skema database, dokumentasi internal statis, kamus istilah, atau aturan bisnis global.
Resource Templates (Dinamis & Hemat Token)
Resource Templates menggunakan URI berpola variabel (seperti sqlite://products/{id}). Ini adalah kunci efisiensi saat berhadapan dengan data besar.
graph LR
AI[AI Host] -->|Baca ID 57| Template["sqlite://products/{id}"]
Template -->|Ekstrak ID: 57| Server[MCP Server]
Server -->|Query Spesifik| DB[(Database)]
DB -->|Hanya Data ID 57| AI
- Mengapa ini krusial? Jika Anda memiliki 10.000 produk, mengeksposnya sebagai satu Resource statis akan memaksa AI mengunduh megabytes data JSON yang akan menghabiskan context window secara instan.
- Solusi: Gunakan Resource Template. AI hanya akan menarik produk spesifik yang relevan dengan konteks obrolan pengguna saat itu.
2. Seni Menulis Tool yang Efisien & Tool Chaining
Tools adalah bagian paling interaktif dari MCP. AI menggunakan Tool untuk melakukan aksi menulis (Write) atau mencari data secara spesifik.
Mendesain Tool yang Efisien
Agar Tool berjalan optimal di lingkungan produksi, ikuti prinsip-prinsip berikut:
- Batasi Ukuran Payload (Pagination): Jangan mengembalikan seluruh baris database. Berikan parameter
limitdanoffsetdefault (misalnya maksimal 50 baris per panggilan). - Kirim Data Terstruktur yang Bersih: Hapus kolom internal database seperti
created_at,updated_at, atau password hash sebelum dikirim ke AI. AI tidak membutuhkannya, dan data tersebut hanya membuang-buang token. - Response Ramah AI saat Data Kosong: Jika pencarian tidak menemukan hasil, jangan biarkan server mengembalikan error HTTP 500 atau crash. Kembalikan respons sukses (HTTP 200) berisi pesan tekstual jelas: “Produk tidak ditemukan. Cobalah kategori lain.” Ini membantu AI menjelaskan situasi ke pengguna secara alami daripada bingung karena kegagalan koneksi.
Memahami Tool Chaining
Salah satu kekuatan terbesar AI Agent adalah Tool Chaining—kemampuan AI untuk memanggil beberapa Tool secara berantai demi menyelesaikan satu instruksi kompleks dari pengguna.
Misalnya, pengguna meminta: “Periksa apakah pelanggan bernama Andi memiliki pesanan untuk produk ‘Kopi Robusta’, lalu hitung total belanjanya.”
AI tidak bisa menjawab ini dengan satu panggilan langsung. Ia akan melakukan rantai panggilan (chaining):
sequenceDiagram
autonumber
AI Host->>MCP Server: Call Tool: search_customers { name: "Andi" }
MCP Server-->>AI Host: Return: { customerId: 12 }
Note over AI Host: AI mengidentifikasi customerId = 12
AI Host->>MCP Server: Call Tool: get_customer_orders { customerId: 12 }
MCP Server-->>AI Host: Return: Daftar pesanan dengan productId & quantity
Note over AI Host: AI menyaring produk 'Kopi Robusta' & menghitung total harga
AI Host->>User: Menampilkan rangkuman hasil analisis belanja Andi
Cara Merancang Tool untuk Chaining yang Mulus
- Konsistensi Penamaan: Gunakan nama parameter dan tipe data yang konsisten di semua Tool. Jika Tool A menghasilkan
customerId(tipeinteger), pastikan Tool B menerimacustomerId(tipeinteger), bukancustomer_id(tipestring). - Deskripsi Parameter yang Jelas: Tulis deskripsi Zod / JSON Schema yang menjelaskan dari mana asal variabel tersebut. Contoh:
.describe('ID pelanggan unik yang didapatkan dari tool search_customers').
3. Peta Transport Protocol MCP: STDIO vs SSE vs Streamable HTTP
MCP mendukung beberapa cara bagi server untuk berkomunikasi dengan klien (AI Host). Memilih jenis transport yang tepat menentukan di mana server Anda dapat di-deploy.
A. STDIO (Standard Input/Output)
Komunikasi berbasis pertukaran baris teks melalui jalur stdin dan stdout proses sistem operasi.
- Kapan Digunakan: Pengembangan lokal (local development), plugin desktop seperti Cursor, Claude Desktop lokal, atau integrasi CLI.
- Kelebihan: Latency super rendah (komunikasi antar proses lokal), sangat aman (tidak membuka port jaringan sama sekali), dan setup instan tanpa pusing SSL.
- Kekurangan: Server harus berjalan di mesin fisik yang sama dengan klien AI. Tidak bisa diakses secara remote lewat web.
B. SSE (Server-Sent Events)
Membuka koneksi HTTP GET yang persisten searah (text/event-stream) dari server ke klien untuk mengirimkan event/notification, dikombinasikan dengan HTTP POST terpisah untuk mengirim instruksi dari klien ke server.
- Kapan Digunakan: Server remote yang di-deploy di cloud dan diakses oleh klien berbasis web atau eksternal.
- Kelebihan: Berjalan di atas HTTP standar, mudah melewati firewall, mendukung pengiriman data real-time searah dari server ke klien.
- Kekurangan: Kompleksitas tinggi karena membutuhkan pengelolaan daur hidup sesi secara manual untuk mencocokkan request POST dengan koneksi SSE GET yang aktif.
C. Streamable HTTP
Standar modern yang disediakan oleh SDK MCP (misalnya StreamableHTTPServerTransport) untuk menyederhanakan komunikasi berbasis web tanpa kerumitan SSE manual.
- Kapan Digunakan: Sangat direkomendasikan untuk semua server MCP remote berbasis HTTP saat ini.
- Kelebihan: Menggabungkan endpoint inisialisasi sesi, stream data, dan POST request ke dalam satu endpoint tunggal. Manajemen session-id ditangani secara otomatis oleh SDK.
- Kekurangan: Memerlukan setup framework HTTP seperti Express.js atau Hono di sisi server.
Tabel Matriks Keputusan Pemilihan Transport
| Kriteria | STDIO | SSE (Manual) | Streamable HTTP |
|---|---|---|---|
| Lokasi Server | Lokal (Satu Mesin) | Remote (Cloud) | Remote (Cloud) |
| Keamanan Port | Tidak butuh open port | Wajib open port HTTP/S | Wajib open port HTTP/S |
| Kompleksitas Kode | Sangat Rendah | Tinggi (Kelola Sesi) | Rendah (SDK Automanage) |
| Dukungan Klien | Claude Desktop, Cursor | Browser & Web App | Klien MCP Modern |
| Rekomendasi | Gunakan untuk dev lokal / CLI | Hindari jika ada pilihan lain | Gunakan untuk produksi cloud |
4. Tipe Koneksi & Topologi Jaringan: Direct vs Proxy
Bagaimana klien AI Anda terhubung ke server MCP Anda? Ada dua topologi jaringan utama yang bisa diterapkan:
A. Koneksi Langsung (Direct Connection)
Klien AI melakukan koneksi HTTP/S langsung ke alamat IP atau domain server MCP Anda.
- Kelebihan: Jalur data paling pendek, latensi minimal karena tanpa perantara pihak ketiga.
- Kekurangan: Memerlukan server MCP untuk memiliki IP publik yang dapat diakses, konfigurasi firewall yang tepat, dan setup SSL/TLS mandiri agar koneksi aman. Sulit diterapkan untuk development lokal jika server berada di balik NAT router rumah Anda.
B. Koneksi Lewat Proxy / Tunnel (Proxy Connection)
Koneksi yang dijembatani oleh layanan perantara pihak ketiga untuk menghubungkan klien dengan server MCP. Contoh populer termasuk Ngrok, Cloudflare Tunnels (cloudflared), atau gateway MCP internal perusahaan.
graph LR
AI[AI Host / Cloud] -->|HTTP/S| CF[Cloudflare Tunnel / Proxy]
CF -->|Koneksi Balik Aman| Server[Local MCP Server / behind NAT]
- Kelebihan:
- Bypass NAT/Firewall: Anda bisa menjalankan MCP Server di laptop lokal Anda, namun tetap bisa diakses oleh Claude Web atau Cursor Cloud secara aman.
- Tanpa Open Port: Server lokal tidak perlu mengekspos port ke publik; agen tunnel yang melakukan koneksi keluar (outbound) ke proxy.
- SSL/TLS Otomatis: Layanan seperti Cloudflare menyediakan sertifikat HTTPS gratis secara otomatis.
- Kekurangan: Menambahkan satu lompatan jaringan (network hop), yang dapat sedikit meningkatkan latency respon tool.
5. Keamanan Produksi: Auth dan Rate Limiting
Ketika Anda membawa server MCP keluar dari localhost menuju web publik (terutama menggunakan Streamable HTTP dengan koneksi Direct/Proxy), faktor keamanan menjadi harga mati.
Karena server Anda dapat memanipulasi database atau menjalankan instruksi sistem, Anda harus melindungi endpoint tersebut dari pihak tidak berwenang:
- Authentication: Membatasi siapa saja yang boleh memanggil server MCP Anda dengan mencocokkan token otentikasi (misalnya Bearer Token atau API Key).
- Rate Limiting: Membatasi jumlah kueri per menit dari satu sesi klien untuk mencegah serangan Denial of Service (DoS) dan pembengkakan tagihan komputasi server.
Catatan: Dikarenakan topik otentikasi dan rate limiting memiliki kompleksitas tersendiri serta memerlukan integrasi middleware Express yang mendalam, panduan implementasi teknis lengkap untuk kedua fitur ini akan dibahas secara khusus pada artikel berikutnya.
Kesimpulan
Membangun MCP Server tingkat produksi bukan hanya soal fungsionalitas logika backend Anda, melainkan tentang bagaimana merancang aliran data yang efisien dan memilih protokol transport yang tepat. Dengan meminimalkan payload data menggunakan Resource Templates, merancang input-output tool yang konsisten untuk Tool Chaining, dan menggunakan Streamable HTTP dibalik Cloudflare Tunnel untuk kebutuhan akses remote, server MCP Anda akan berjalan aman, hemat biaya, dan siap melayani orkestrasi AI tingkat lanjut.