MCP server transports
MCP mendukung mekanisme transport untuk komunikasi antara Bob dan MCP server.
Ikhtisar
MCP menawarkan tiga opsi transport, masing-masing cocok untuk skenario deployment yang berbeda:
- STDIO transport (server lokal)
- Streamable HTTP transport (standar modern untuk server remote)
- SSE transport (dihapus)
Setiap transport memiliki karakteristik, keunggulan, dan use case yang berbeda.
STDIO transport
STDIO transport berjalan secara lokal di mesinmu dan berkomunikasi melalui stream standard input/output.
Cara kerja STDIO transport
- Bob men-spawn MCP server sebagai child process
- Komunikasi terjadi melalui stream proses: Bob menulis ke STDIN server, server merespons ke STDOUT
- Setiap pesan dibatasi oleh karakter newline
- Pesan diformat sebagai JSON-RPC 2.0
Client Server
| |
|---- JSON message ------>| (via STDIN)
| | (processes request)
|<---- JSON message ------| (via STDOUT)
| |Karakteristik STDIO
- Lokalitas: Berjalan di mesin yang sama dengan Bob
- Performa: Latensi sangat rendah (tidak melibatkan network stack)
- Kesederhanaan: Komunikasi proses langsung tanpa konfigurasi jaringan
- Relasi: Hubungan satu-ke-satu antara klien dan server
- Keamanan: Secara inheren lebih aman tanpa eksposur jaringan
Kapan menggunakan STDIO
STDIO transport ideal untuk:
- Integrasi lokal dan tools yang berjalan di mesin yang sama
- Operasi yang sensitif terhadap keamanan
- Persyaratan latensi rendah
- Skenario single-client (satu instance Bob per server)
- Tools command-line atau IDE extension
Contoh implementasi STDIO
const server = new Server({name: 'local-server', version: '1.0.0'});
// Register tools...
// Use STDIO transport
const transport = new StdioServerTransport(server);
transport.listen();Streamable HTTP transport
Streamable HTTP transport adalah standar modern untuk komunikasi MCP server remote, menggantikan transport HTTP+SSE yang lebih lama. Beroperasi melalui HTTP/HTTPS dan memungkinkan implementasi server yang lebih fleksibel.
Cara kerja Streamable HTTP transport
- Server menyediakan satu endpoint HTTP (endpoint MCP) yang mendukung metode POST dan GET
- Bob mengirim permintaan ke endpoint MCP ini menggunakan HTTP POST
- Server memproses permintaan dan mengirimkan respons kembali
- Opsional, server bisa menggunakan Server-Sent Events (SSE) melalui koneksi yang sama untuk streaming beberapa pesan atau notifikasi ke Bob
Ini memungkinkan interaksi request-response dasar maupun streaming yang lebih canggih dan komunikasi yang dimulai oleh server.
Client Server
| |
|---- HTTP POST /mcp_endpoint ---->| (client request)
| | (processes request)
|<--- HTTP Response / SSE Stream --| (server response / stream)
| |Karakteristik Streamable HTTP
- Standar modern: Metode yang disukai untuk implementasi MCP server remote baru
- Akses remote: Bisa di-host di mesin yang berbeda dari Bob
- Skalabilitas: Bisa menangani beberapa koneksi klien secara bersamaan
- Protokol: Bekerja melalui HTTP/HTTPS standar
- Fleksibilitas: Mendukung request-response sederhana dan streaming canggih
- Single endpoint: Menggunakan satu jalur URL untuk semua komunikasi MCP
- Autentikasi: Bisa menggunakan mekanisme autentikasi HTTP standar
- Backwards compatibility: Server bisa mempertahankan kompatibilitas dengan klien HTTP+SSE yang lebih lama
Kapan menggunakan Streamable HTTP
Streamable HTTP transport ideal untuk:
- Semua pengembangan MCP server remote baru
- Server yang memerlukan komunikasi yang kuat, skalabel, dan fleksibel
- Integrasi yang mungkin melibatkan streaming data atau notifikasi yang dikirim server
- Layanan publik atau tools terpusat
- Menggantikan implementasi transport SSE legacy
Negosiasi protokol
Saat Bob terhubung ke server Streamable HTTP, Bob menggunakan opsi protocolNegotiation untuk menentukan cara menyepakati versi protokol. Server HTTP default ke "auto".
| Nilai | Deskripsi |
|---|---|
"auto" | Bob mengirim probe server/discover sebelum initialize untuk menegosiasikan versi protokol tertinggi yang didukung bersama. Default untuk server HTTP. |
"legacy" | Bob melewati probe dan terhubung langsung menggunakan handshake initialize, yang kompatibel dengan semua MCP server. |
{ "pin": "<version>" } | Bob terhubung menggunakan versi protokol tertentu (contoh: { "pin": "2024-11-05" }). |
Jika server HTTP mengalami timeout dengan MCP connection timed out after 10000ms, server mungkin tidak merespons probe server/discover. Atur "protocolNegotiation": "legacy" untuk melewati probe:
{
"mcpServers": {
"my-server": {
"url": "https://your-server-url.com/mcp",
"protocolNegotiation": "legacy"
}
}
}Untuk lebih detail, lihat Negosiasi protokol di "Menggunakan MCP di Bob".
Contoh implementasi Streamable HTTP
Konfigurasi di settings.json:
{
"mcpServers": {
"StreamableHTTPMCPName": {
"type": "streamable-http",
"url": "http://localhost:8080/mcp"
}
}
}Untuk implementasi sisi server, lihat dokumentasi MCP SDK untuk StreamableHTTPClientTransport.
Backwards compatibility dengan HTTP+SSE
MCP client Bob tidak fallback ke transport HTTP+SSE. Panduan di bawah ini ditujukan untuk penulis server yang ingin agar server Streamable HTTP mereka tetap dapat diakses oleh klien lama yang belum mendukung Streamable HTTP.
Server yang perlu mendukung klien lama harus terus meng-host endpoint SSE (/events) dan POST (/message) dari transport lama bersama dengan endpoint MCP baru yang didefinisikan untuk transport Streamable HTTP.
SSE transport (dihapus)
MCP client Bob tidak lagi mendukung transport HTTP+SSE mandiri (spesifikasi MCP 2024-11-05). Server yang hanya menggunakan transport HTTP+SSE tidak dapat terhubung ke Bob.
SSE sebagai saluran respons dalam koneksi Streamable HTTP masih didukung. Bob dapat menerima SSE stream dari server Streamable HTTP. Hanya transport HTTP+SSE mandiri (dengan endpoint /events dan /message terpisah) yang telah dihapus.
Migrasi dari SSE transport
Jika kamu memiliki server yang menggunakan transport HTTP+SSE, migrasikan ke transport Streamable HTTP atau transport STDIO:
- Streamable HTTP: Sediakan satu endpoint MCP yang menerima permintaan HTTP POST. Ini adalah jalur yang direkomendasikan untuk server remote. Lihat Streamable HTTP transport.
- STDIO: Jika server berjalan secara lokal di mesin yang sama dengan Bob, konversikan ke server STDIO. Lihat STDIO transport.
Pertimbangan deployment
Pilihan antara STDIO dan transport Streamable HTTP secara langsung mempengaruhi cara kamu men-deploy dan mengelola MCP server-mu.
STDIO: Deployment lokal
STDIO server berjalan secara lokal di mesin yang sama dengan Bob:
- Instalasi: Executable server harus diinstal di setiap mesin pengguna
- Distribusi: Kamu perlu menyediakan paket instalasi untuk sistem operasi yang berbeda
- Pembaruan: Setiap instance harus diperbarui secara terpisah
- Sumber daya: Menggunakan CPU, memori, dan disk mesin lokal
- Kontrol akses: Bergantung pada izin file system mesin lokal
- Integrasi: Mudah diintegrasikan dengan sumber daya sistem lokal (file, proses)
- Eksekusi: Dimulai dan dihentikan bersama Bob (lifecycle child process)
- Dependensi: Semua dependensi harus diinstal di mesin pengguna
Contoh use case:
Tool pencarian file lokal menggunakan STDIO akan:
- Berjalan di mesin pengguna
- Memiliki akses langsung ke file system lokal
- Dimulai ketika diperlukan oleh Bob
- Tidak memerlukan konfigurasi jaringan
- Perlu diinstal bersama Bob atau melalui package manager
Remote: Deployment ter-host
Server remote (Streamable HTTP) bisa di-deploy ke server remote dan diakses melalui jaringan:
- Instalasi: Diinstal sekali di server, diakses oleh banyak pengguna
- Distribusi: Deployment tunggal melayani beberapa klien
- Pembaruan: Pembaruan terpusat segera mempengaruhi semua pengguna
- Sumber daya: Menggunakan sumber daya server, bukan sumber daya mesin lokal
- Kontrol akses: Dikelola melalui sistem autentikasi dan otorisasi
- Integrasi: Integrasi yang lebih kompleks dengan sumber daya spesifik pengguna
- Eksekusi: Berjalan sebagai layanan independen (sering secara terus-menerus)
- Dependensi: Dikelola di server, bukan di mesin pengguna
Contoh use case:
Tool query database menggunakan transport remote akan:
- Berjalan di server pusat
- Terhubung ke database dengan credential sisi server
- Tersedia terus-menerus untuk banyak pengguna
- Memerlukan konfigurasi keamanan jaringan yang tepat
- Di-deploy menggunakan container atau teknologi cloud
Pendekatan hybrid
Beberapa skenario menguntungkan dari pendekatan hybrid:
- STDIO dengan akses jaringan: Server STDIO lokal yang bertindak sebagai proxy ke layanan remote
- Remote dengan perintah lokal: Server remote yang bisa memicu operasi di mesin klien melalui callback
- Pola gateway: Server STDIO untuk operasi lokal yang terhubung ke server remote untuk fungsi khusus
Perbandingan transport
| Pertimbangan | STDIO | Streamable HTTP |
|---|---|---|
| Lokasi | Mesin lokal saja | Lokal atau remote |
| Klien | Klien tunggal | Beberapa klien |
| Performa | Latensi lebih rendah | Latensi lebih tinggi (overhead jaringan) |
| Kompleksitas setup | Lebih sederhana | Lebih kompleks (memerlukan HTTP server) |
| Keamanan | Secara inheren aman | Memerlukan tindakan keamanan eksplisit |
| Akses jaringan | Tidak diperlukan | Diperlukan |
| Skalabilitas | Terbatas pada mesin lokal | Bisa didistribusikan di jaringan |
| Deployment | Instalasi per-pengguna | Instalasi terpusat |
| Pembaruan | Pembaruan terdistribusi | Pembaruan terpusat |
| Penggunaan sumber daya | Menggunakan sumber daya klien | Menggunakan sumber daya server |
| Dependensi | Dependensi sisi klien | Dependensi sisi server |
Konfigurasi transport di Bob
Untuk informasi detail tentang mengkonfigurasi transport di Bob, termasuk contoh konfigurasi, lihat MCP in Bob.
Memahami MCP
Model Context Protocol (MCP) adalah protokol komunikasi terstandarisasi yang memungkinkan sistem AI berinteraksi dengan alat dan layanan eksternal.
Menggunakan MCP di Bob
Model Context Protocol (MCP) memperluas kemampuan Bob dengan menghubungkan ke tools dan layanan eksternal. Panduan ini menunjukkan cara mengkonfigurasi, mengelola, dan menggunakan MCP server dengan Bob.