Skip to content

Konfigurasi MCP: Scope User atau Ikut Repo Proyek

Adityo Guni Waluyo

Lokasi konfigurasi MCP menentukan keamanan: scope proyek ikut ditinjau tim dan Workspace Trust, scope user tetap pribadi namun luput review.

Saat meninjau pembaruan konfigurasi di sebuah project portal, satu berkas menarik perhatian: definisi server Model Context Protocol (MCP) tersimpan di dalam direktori .vscode proyek. Temuan ini memicu pertanyaan yang lebih mendasar daripada sekadar kerapian repo. Server MCP lokal bisa mengeksekusi kode langsung di mesin pengembang, membaca berkas, atau menyambung ke layanan luar. Keputusan soal di mana konfigurasi MCP disimpan, scope user atau proyek, bukan preferensi pribadi. Itu penentuan batas keamanan.

Asumsi awal yang umum berbunyi begini: konfigurasi tingkat pengguna hanyalah fitur kenyamanan untuk menyimpan preferensi alat pribadi, sedangkan konfigurasi di proyek otomatis lebih baik karena ikut terbagi ke satu tim. Pemakaian nyata memperlihatkan kedua asumsi itu melewatkan konsekuensi di kedua arah.

Batas Keamanan dan Lokasi Konfigurasi

Dokumentasi resmi VS Code menjelaskan beberapa lokasi penyimpanan [5]. Konfigurasi tingkat workspace tersimpan di berkas .vscode/mcp.json atau format portabel .mcp.json di akar proyek. Konfigurasi tingkat pengguna tersimpan di profil editor, dan format portabelnya ada di mcp-config.json di bawah direktori konfigurasi Copilot pada folder home, aktif di semua workspace milik pengguna tersebut [5].

Konsekuensinya berbeda jauh. Konfigurasi workspace ikut ke dalam repo dan tersedia bagi semua orang yang membukanya. Konfigurasi user tetap pribadi dan tidak masuk riwayat commit. Dokumentasi GitHub Copilot merangkum pembagiannya dengan ringkas: konfigurasi di tingkat repositori dibagikan ke semua yang membuka proyek, sedangkan konfigurasi pribadi hanya terlihat oleh pemiliknya tetapi aktif di semua workspace [6].

Satu contoh memperjelas bedanya. Server MCP penyambung ke basis data development dengan kredensial tim cocok di scope proyek karena semua anggota memang butuh. Server pembaca kalender pribadi atau penyambung ke layanan berbayar pribadi tempatnya di scope user; memaksanya masuk repo berarti mengekspos jalur kredensial ke semua pembaca repo. Anggota tim baru yang mengkloning repo tidak akan sadar ada server tambahan yang ikut terdefinisi sampai editor menampilkannya.

Duplikasi juga perlu diwaspadai. Definisi server yang sama di dua lokasi bisa memicu konflik atau perilaku tak terduga. Kebiasaan yang sehat: satu server, satu lokasi, dan keputusan lokasinya dicatat di dokumentasi proyek agar semua anggota tahu mana yang resmi.

Konfigurasi di scope proyek bisa ditinjau lewat pull request. Tim dapat melihat server apa yang akan hidup di mesin setiap anggota dan menolak definisi yang mencurigakan sebelum kode apa pun berjalan. Konfigurasi di scope user melewati tinjauan itu sepenuhnya. Perlindungan untuk kredensial pribadi dibayar dengan hilangnya verifikasi tim terhadap alat yang dijalankan.

Sisi kepercayaan juga tidak simetris. Server MCP di workspace mewarisi Workspace Trust. Dalam restricted mode, konfigurasi workspace diblokir dan servernya tidak jalan. Dokumentasi VS Code menutup bagian ini dengan peringatan yang layak ditempel di dinding: tinjau konfigurasi MCP workspace sebelum memercayai sebuah repository, karena server MCP lokal dapat mengeksekusi kode di mesin [5].

LokasiJangkauanImplikasi
.vscode/mcp.json atau .mcp.jsonSeluruh tim yang membuka repoIkut ditinjau lewat pull request, tunduk Workspace Trust
mcp-config.json di profil userPengguna lokal sajaTanpa tinjauan tim, aktif di semua workspace

Kapan Perlu Verifikasi lewat Browser

Untuk server yang berinteraksi dengan antarmuka atau layanan eksternal, pengujian unit saja tidak memadai. Kriteria pembatasnya sederhana: jika server melakukan otentikasi ke layanan luar atau memanipulasi state browser, verifikasi harus lewat sesi browser nyata yang terisolasi. Server pembaca berkas statis di workspace bisa puas dengan pengujian unit.

Alur verifikasinya bisa dibangun sederhana. Jalankan satu skenario lengkap: buka aplikasi, picu tindakan yang memanggil server MCP, lalu periksa hasil akhir di layar, bukan hanya log. Temuan umum dari alur ini bukan kegagalan koneksi, melainkan perilaku yang menyimpang dari definisi, misalnya server yang mengubah data lebih luas dari yang dijanjikan definisinya.

Satu aturan terakhir yang tidak boleh dilanggar: tidak ada kredensial dalam konfigurasi workspace. Placeholder eksplisit dipakai di berkas proyek, nilai aslinya hidup di scope pengguna atau secret manager.

Sumber

Artikel terkait