Langsung ke konten utama

Pengantar

Server MCP memungkinkan lo menghubungkan sumber data kustom dan membuatnya bisa dipakai langsung di dalam Cursor. Ini khususnya berguna saat lo butuh konteks dari tempat seperti browser, database, atau log error dan sistem. Menyiapkan server MCP itu straightforward, dan dengan Cursor bisa dilakukan cepat. Di panduan ini, kita bakal ngebahas cara bikin server MCP buat Postgres. Tujuan kita adalah memungkinkan Cursor ngejalanin query SQL langsung ke database Postgres dan ngekspos skema tabel secara terstruktur.
Tutorial ini dirancang buat ngajarin fundamental membangun server MCP.

Apa itu MCP Server?

MCP server adalah proses yang berkomunikasi dengan Cursor dan menyediakan akses ke data atau tindakan eksternal. Ini bisa diimplementasikan dengan beberapa cara, tapi di sini kita bakal pakai metode paling sederhana: server yang berjalan lokal di komputermu lewat stdio (aliran standar input/output). Ini menghindari pertimbangan keamanan yang rumit dan memungkinkan kita fokus pada logika MCP itu sendiri. Salah satu use case paling umum untuk MCP adalah akses database. Saat membangun dashboard, menjalankan analisis, atau membuat migrasi, sering kali perlu menjalankan query dan menginspeksi database. Postgres MCP server kita akan mendukung dua kapabilitas inti: menjalankan query sewenang-wenang dan menampilkan daftar skema tabel. Walaupun kedua tugas ini bisa dilakukan dengan SQL biasa, MCP menawarkan fitur yang bikin keduanya lebih kuat dan lebih umum berguna. Tools menyediakan cara untuk mengekspos tindakan seperti mengeksekusi query, sementara resources memungkinkan kita berbagi konteks terstandardisasi seperti informasi skema. Nanti di panduan ini kita juga akan melihat prompts, yang memungkinkan alur kerja yang lebih canggih. Di balik layar, kita akan mengandalkan paket postgres dari npm untuk mengeksekusi pernyataan SQL ke database. MCP SDK akan berfungsi sebagai pembungkus di sekitar pemanggilan ini, memungkinkan kita mengintegrasikan fungsionalitas Postgres secara mulus ke dalam Cursor.

Cara Membangun Server MCP

Langkah pertama untuk membangun server adalah menyiapkan proyek baru. Kita mulai dengan membuat folder baru dan menginisialisasi proyek Bun
> mkdir postgres-mcp-server
> Bun init
Dari sini, kita bakal pilih proyek Blank. Setelah boilerplate siap, kita perlu install dependency yang diperlukan. zod wajib buat nentuin skema i/o di MCP SDK
bun add postgres @modelcontextprotocol/sdk zod
Dari sini, kita bakal masuk ke repositori masing-masing library dan ambil tautan ke konten mentah dari README masing-masing. Ini bakal kita pakai sebagai konteks waktu ngebangun server Sekarang, kita bakal nentuin gimana perilaku yang kita pengin dari server. Untuk itu, kita bakal bikin spec.md dan nulis tujuan tingkat-tingginya
# Spesifikasi

- Izinkan mendefinisikan DATABASE_URL lewat konfigurasi env MCP
- Query data Postgres lewat tool
  - Secara default, buat hanya-baca (readonly)
  - Izinkan operasi tulis dengan menyetel ENV `DANGEROUSLY_ALLOW_WRITE_OPS=true|1`
- Akses tabel sebagai `resources`
- Gunakan Zod untuk definisi skema
Seperti yang bisa kamu lihat, ini spesifikasi yang cukup ringan. Bebas tambahkan detail lain sesuai kebutuhan. Bersama tautan README, kita bakal menyusun prompt final
Baca yang berikut dan ikuti @spec.md untuk ngerti apa yang kita mau. Semua dependensi yang diperlukan sudah diinstal
- @https://raw.githubusercontent.com/modelcontextprotocol/typescript-sdk/refs/heads/main/README.md
- @https://raw.githubusercontent.com/porsager/postgres/refs/heads/master/README.md
Dengan tiga komponen ini (spesifikasi, dokumentasi MCP SDK, dan dokumentasi pustaka Postgres), kita bisa pakai Cursor untuk membuat scaffold implementasi server. Cursor bakal bantu kita menyatukan bagiannya, menghasilkan kode yang menghubungkan MCP SDK dengan Postgres. Setelah beberapa kali prompt bolak-balik, sekarang kita punya versi pertama server MCP yang berjalan. Buat nyoba, kita bisa pakai MCP Inspector
npx @modelcontextprotocol/inspector bun run index.ts

Menguji Server MCP

Setelah implementasi awal selesai, kita bisa mengujinya pakai MCP Inspector. Inspector memberi cara untuk melihat apa saja yang diekspos server dan memverifikasi bahwa tool dan resource berperilaku sesuai ekspektasi. Pastikan query bisa dijalankan dan informasi skema dikembalikan dengan benar. Antarmuka MCP Inspector Kalau semuanya sudah oke, kita bisa menyambungkan server ke Cursor langsung dan mengujinya di lingkungan nyata. Pada tahap ini, Cursor bisa menggunakan server MCP Postgres seolah fitur bawaan, sehingga kita bisa menjalankan query dan menelusuri database secara langsung.

Langkah Selanjutnya

Menjalankan server MCP secara lokal lewat stdio itu titik awal yang bagus, tapi tim sering butuh akses bersama ke database yang sama lewat server MCP mereka. Dalam skenario ini, men-deploy server MCP sebagai layanan HTTP terpusat jadi perlu. Server MCP yang di-deploy punya beberapa keunggulan dibanding instance stdio individual:
  • Akses database bersama: Banyak anggota tim bisa menjalankan query ke instance database yang sama lewat Cursor
  • Konfigurasi terpusat: Pembaruan skema dan perubahan izin dikelola di satu tempat
  • Keamanan yang lebih baik: Autentikasi yang tepat, rate limiting, dan kontrol akses bisa diterapkan
  • Observability: Pola penggunaan dan metrik kinerja bisa dipantau di seluruh tim
Untuk mencapai ini, kamu bakal mengganti metode transport dari stdio ke HTTP. Walau kita nggak bakal membahas seluruh setup, ini prompt awal yang bagus yang bisa kamu kasih ke Cursor
Berdasarkan server MCP yang sudah ada, buat file baru yang mengimplementasikan protokol HTTP.

Pindahkan logika yang digunakan bersama ke mcp-core, dan beri nama setiap implementasi transport sesuai jenisnya (mcp-server-stdio, mcp-server-http)

@https://raw.githubusercontent.com/modelcontextprotocol/typescript-sdk/refs/heads/main/README.md 
Hasil final bisa dilihat di sini: pg-mcp-server
I