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 simpel, dan dengan Cursor lo bisa ngerjainnya cepat. Di panduan ini, kita bakal ngebahas cara bikin server MCP untuk Postgres. Tujuan kita adalah bikin Cursor bisa ngejalanin query SQL langsung ke database Postgres dan mengekspose skema tabel secara terstruktur.
Tutorial ini dirancang buat ngajarin fundamental dalam membangun server MCP.

Apa itu MCP Server?

Server MCP 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 (stream masukan/keluaran standar). Ini menghindari pertimbangan keamanan yang rumit dan memungkinkan kita fokus ke 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 kita perlu melakukan query dan menginspeksi database. Postgres MCP server kita akan mendukung dua kapabilitas inti: menjalankan query arbitrer dan menampilkan daftar skema tabel. Walaupun kedua tugas ini bisa dilakukan dengan SQL biasa, MCP menawarkan fitur yang membuatnya lebih powerful dan lebih umum berguna. Tools menyediakan cara untuk mengekspos tindakan seperti mengeksekusi query, sementara resources memungkinkan kita berbagi konteks yang distandardisasi seperti informasi skema. Nanti di panduan ini kita juga bakal melihat prompts, yang memungkinkan workflow yang lebih advanced. Di balik layar, kita akan mengandalkan package npm postgres untuk mengeksekusi statement SQL ke database. MCP SDK akan berfungsi sebagai wrapper di sekitar panggilan tersebut, memungkinkan kita mengintegrasikan fungsionalitas Postgres ke Cursor secara mulus. [Placeholder: Ilustrasi server MCP dengan tools dan resources]

Cara Membangun MCP Server

Langkah pertama membangun server adalah menyiapkan proyek baru. Kita mulai dengan bikin folder baru dan inisialisasi proyek Bun
> mkdir postgres-mcp-server
> Bun init
Dari sini, pilih proyek Blank. Setelah boilerplate siap, kita perlu menginstal dependensi yang diperlukan. zod dibutuhkan untuk mendefinisikan schema I/O di MCP SDK
bun add postgres @modelcontextprotocol/sdk zod
Selanjutnya, kita bakal buka repository masing-masing library dan ambil tautan ke konten mentah (raw) dari file README masing-masing. Ini bakal kita pakai sebagai konteks waktu ngebangun server Sekarang, kita bakal mendefinisikan perilaku server yang kita mau. Untuk itu, bikin spec.md dan tulis tujuan tingkat tinggi
# Spec

- Allow defining DATABASE_URL through MCP env configuration
- Query postgres data through tool
  - By default, make it readonly
  - Allow write ops by setting ENV `DANGEROUSLY_ALLOW_WRITE_OPS=true|1`
- Access tables as `resources`
- Use Zod for schema definitions
Seperti yang kamu lihat, ini spesifikasi yang cukup ringan. Silakan tambah detail sesuai kebutuhan. Bareng tautan README, kita bakal nyusun prompt final
Read the following and follow @spec.md to understand what we want. All necesary dependeies are installed
- @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 library Postgres), kita bisa pakai Cursor buat nge-scaffold implementasi server. Cursor bakal bantu nyatuin bagian-bagiannya, ngehasilkan kode yang menghubungkan MCP SDK dengan Postgres. Setelah beberapa kali iterasi prompt, sekarang kita punya versi pertama MCP server yang jalan. Buat nyobain, kamu bisa pakai MCP Inspector
npx @modelcontextprotocol/inspector bun run index.ts

Menguji Server MCP

Setelah implementasi awal selesai, kita bisa mengujinya menggunakan MCP Inspector. Inspector menyediakan cara untuk melihat apa saja yang diekspos oleh server dan untuk memverifikasi bahwa alat dan sumber daya berperilaku seperti yang diharapkan. Kita perlu memastikan bahwa kueri bisa dijalankan dan informasi skema dikembalikan dengan benar. Antarmuka MCP Inspector Kalau semuanya sudah oke, kita bisa menghubungkan server ke Cursor langsung dan mengujinya di lingkungan nyata. Pada titik ini, Cursor akan bisa menggunakan server MCP Postgres seolah-olah itu adalah kemampuan bawaan, sehingga kita bisa menjalankan kueri dan menginspeksi database secara langsung.

Langkah Selanjutnya

Menjalankan server MCP secara lokal lewat stdio adalah titik awal yang bagus, tapi tim sering butuh akses bersama ke database yang sama lewat server MCP mereka. Dalam skenario ini, nge-deploy server MCP sebagai layanan HTTP terpusat jadi perlu. Server MCP yang dideploy menawarkan beberapa keunggulan dibanding instance stdio terpisah:
  • Akses database bersama: Banyak anggota tim bisa nge-query instance database yang sama lewat Cursor
  • Konfigurasi terpusat: Pembaruan skema dan perubahan izin dikelola di satu tempat
  • Keamanan yang lebih baik: Autentikasi, rate limiting, dan kontrol akses yang tepat bisa diterapkan
  • Observabilitas: Pola penggunaan dan metrik performa bisa dipantau di seluruh tim
Untuk mencapai ini, kamu tinggal ganti metode transport dari stdio ke HTTP. Walaupun kita nggak bahas seluruh setup, ini prompt awal yang bagus yang bisa kamu kasih ke Cursor
Based on the existing MCP server, create a new file that implements the HTTP protocol.

Move shared logic to mcp-core, and name each transport implementation by name (mcp-server-stdio, mcp-server-http)

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