- MCP(Model Context Protocol) menyediakan cara integrasi yang terstandarisasi agar LLM dapat berinteraksi dengan dunia luar
- Belakangan ini standar serupa seperti ACP dari IBM dan A2A dari Google bermunculan, sementara implementasi MCP dan alat terkait juga bertambah dengan cepat
- Namun, praktik engineering yang belum matang seperti kebingungan desain, dokumentasi yang kurang, dan minimnya spesifikasi protokol yang nyata disebut sebagai masalah
- Metode transport yang saat ini diusulkan seperti HTTP+SSE dan Streamable HTTP justru menambah kompleksitas dan isu keamanan, sehingga penggunaan WebSocket direkomendasikan sebagai alternatif
- Protokol terbaru juga menambahkan kompleksitas berlebihan dan inkonsistensi dalam otorisasi dan manajemen sesi
Tinjauan MCP dan perkembangan terbaru
- MCP adalah protokol terbuka yang dibuat untuk menstandarkan cara aplikasi menyediakan konteks kepada large language model (LLM)
- Dalam sebulan terakhir, MCP muncul sebagai standar kunci untuk menjadikan LLM sebagai agen, dan penggunaannya serta implementasinya menyebar sangat cepat
- Standar yang lebih ortodoks dengan tujuan serupa juga bermunculan cepat, seperti ACP dari IBM dan A2A dari Google
Masalah praktik engineering dan spesifikasi protokol
- Tingkat implementasi nyata dan dokumentasinya yang rendah terlihat di banyak tempat
- Perusahaan teknologi besar menginvestasikan dana sangat besar untuk pelatihan model, tetapi SDK dan dokumentasi mereka berkualitas rendah sehingga menimbulkan kebingungan bagi pengguna
- MCP juga menunjukkan masalah serupa, dengan sebagian desain yang tidak masuk akal serta kekurangan spesifikasi, contoh, dan panduan
Pembahasan protokol transport
Metode transport stdio
- Stdio adalah cara tradisional yang menghubungkan server dan klien MCP secara lokal melalui pipe(
stdout, stdin) secara langsung
- Metode ini memiliki lebih sedikit penanganan socket yang rumit maupun isu spesifik OS, dan memungkinkan konfigurasi lingkungan yang ringkas seperti variabel lingkungan serta stream input/output
Metode HTTP+SSE / Streamable HTTP
- Dengan niat untuk menyesuaikan diri pada era web, metode HTTP+SSE dan Streamable HTTP diadopsi agar juga mendukung basis HTTP
- Namun, meski ditujukan sebagai pengganti WebSocket, pendekatan ini justru memicu lebih banyak ambiguitas, kebingungan desain, dan kompleksitas
- Karena satu sesi dan koneksi dapat dibuat atau diakhiri melalui beberapa cara, hal ini menjadi beban besar bagi server dari sisi manajemen status dan keamanan
Kesulitan dalam contoh implementasi server/klien MCP
- Dukungan yang kurang memadai di berbagai bahasa sangat menonjol, termasuk ketiadaan SDK Go resmi
- Karena dokumentasi dan spesifikasinya tidak jelas, dalam banyak kasus implementasi nyata harus dilakukan melalui reverse engineering
- Meski server contoh kebanyakan berbasis Python, JavaScript, penerapannya di lingkungan kerja nyata sulit karena isu dependensi dan portabilitas
- Saat mengimplementasikan server, SSE/Streamable HTTP berusaha menyamar sebagai socket, tetapi pada praktiknya sulit mempertahankan sesi dan status koneksi secara konsisten, serta memerlukan infrastruktur tambahan seperti message queue
Struktur dan masalah HTTP+SSE serta Streamable HTTP
Mode HTTP+SSE
- Klien membuka sesi SSE dengan server, lalu saat melakukan permintaan tulis ke endpoint terpisah, server mengembalikan respons 202 dan mengirimkan jawaban melalui koneksi SSE yang sudah ada
- Diperlukan sinkronisasi koneksi sesi dan pemeliharaan status, tetapi proses ini juga kurang terdokumentasi dan kompleksitas operasionalnya sangat tinggi
Mode Streamable HTTP
- Pembuatan sesi, pembukaan SSE, dan pengiriman respons semuanya bercampur dalam berbagai cara sehingga alur satu permintaan~respons tidak konsisten
- Berbagai bentuk manajemen status, endpoint, dan header bercampur sehingga menimbulkan hambatan serius bagi implementasi nyata dan skalabilitas
Implikasi umum
- Seiring meningkatnya kompleksitas teknis, beban kognitif dan pemeliharaan bagi pengembang ikut membesar, dan di antara berbagai implementasi server/klien muncul masalah ketidakcocokan kompatibilitas serta perilaku yang tak dapat diprediksi
- Server harus melacak semua status dan kondisi koneksi, dan di lingkungan terdistribusi, penskalaan yang efisien serta sinkronisasi status menjadi jauh lebih sulit
Implikasi keamanan
- Cara koneksi/sesi yang sangat beragam dan terperinci meningkatkan kerentanan keamanan manajemen status seperti session hijacking, replay attack, dan denial of service (DoS)
- Banyaknya titik masuk dan cara merespons memperluas permukaan serangan, serta memungkinkan aktivitas berbahaya disamarkan melalui alur yang tidak diinginkan
Kebingungan dalam protokol manajemen otorisasi
- Spesifikasi saat ini menerapkan aturan yang tidak konsisten, misalnya OAuth2 hanya diwajibkan saat menggunakan transport HTTP, sementara transport STDIO secara bebas memakai variabel lingkungan
- Muncul kebingungan dan ketidakwajaran, seperti mengapa hanya transport HTTP yang dipaksa menerapkan OAuth2 yang rumit
Usulan perbaikan
- Perlu penyederhanaan ke satu protokol JSON RPC, dengan metode transport yang pada dasarnya hanya berfokus pada Stdio dan WebSocket
- Pendekatan yang diinginkan adalah memetakan variabel pada lingkungan Stdio ke header di lingkungan HTTP, serta input dan output masing-masing ke stream dua arah milik WebSocket
- Dengan begitu, pelacakan sesi yang tidak perlu, manajemen status, dan banyak penanganan kasus pengecualian bisa dihilangkan
- WebSocket seharusnya menjadi pilihan standar untuk semua transport berbasis HTTP, dan juga dapat menyelesaikan isu sinkronisasi status yang rumit
Perbandingan dengan protokol alternatif dan tren pasar
- ACP dari IBM dan A2A dari Google menawarkan desain transport yang lebih ringkas dan fungsi penemuan agen dari sisi interoperabilitas agen
- Namun pada dasarnya, kebanyakan masih berada pada tingkat yang dapat diintegrasikan sebagai alat terpisah di dalam lingkungan pembangunan MCP
- Fenomena terus munculnya protokol baru berisiko mengarah pada banjir standar, sehingga memprioritaskan kesederhanaan transport penting bagi pertumbuhan industri
1 komentar
Komentar Hacker News
agents.jsondi web root lalu para agen menyelesaikannya sendiri melalui percakapan semantik secara otomatis. Hasilnya, HTTP menjadi standar input/output agen