Giriş

MCP sunucuları, özel veri kaynaklarına bağlanmana ve bunları Cursor içinde kullanılabilir hale getirmene olanak tanır. Bu, özellikle tarayıcılar, veritabanları ya da hata ve sistem günlükleri gibi yerlerden bağlama ihtiyaç duyduğunda işe yarar. Bir MCP sunucusu kurmak basittir ve Cursor ile hızlıca yapılabilir. Bu rehberde, Postgres için bir MCP sunucusunun nasıl oluşturulacağını adım adım göstereceğiz. Amacımız, Cursor’ın SQL sorgularını doğrudan bir Postgres veritabanında çalıştırabilmesini ve tablo şemalarını yapılandırılmış bir şekilde ortaya koymasını sağlamaktır.
Bu eğitim, MCP sunucuları oluşturmanın temellerini öğretmek için tasarlanmıştır.

MCP Sunucusu nedir?

Bir MCP sunucusu, Cursor’la iletişim kuran ve harici veri ya da eylemlere erişim sağlayan bir süreçtir. Birkaç şekilde uygulanabilir, ama burada en basit yöntemi kullanacağız: bilgisayarında yerel olarak stdio (standart giriş/çıkış akışları) üzerinden çalışan bir sunucu. Bu, karmaşık güvenlik konularını devreye sokmadan işimizi görür ve MCP mantığının kendisine odaklanmamızı sağlar. MCP’nin en yaygın kullanım alanlarından biri veritabanı erişimidir. Dashboard’lar oluştururken, analizler çalıştırırken veya migration’lar oluştururken çoğu zaman bir veritabanını sorgulamak ve incelemek gerekir. Postgres MCP sunucumuz iki temel yetenek sunacak: rastgele sorgular çalıştırma ve tablo şemalarını listeleme. Bu görevlerin ikisi de düz SQL’le yapılabilse de MCP, onları daha güçlü ve genel olarak daha kullanışlı hale getiren özellikler sunar. Tools, sorgu çalıştırma gibi eylemleri dışa açmanın bir yolunu sağlarken; resources, şema bilgisi gibi standartlaştırılmış bağlamı paylaşmamıza olanak tanır. Bu rehberde ayrıca, daha gelişmiş iş akışlarını mümkün kılan prompts’a da bakacağız. Kaputun altında, veritabanında SQL ifadelerini yürütmek için postgres npm paketine güveneceğiz. MCP SDK, bu çağrıların etrafında bir sarmalayıcı görevi görerek Postgres işlevselliğini Cursor’a sorunsuz şekilde entegre etmemizi sağlayacak.

MCP Sunucusunu Nasıl Kurarsın

Sunucuyu kurmanın ilk adımı yeni bir proje oluşturmak. Yeni bir klasör oluşturup bir Bun projesi başlatarak başlayacağız
> mkdir postgres-mcp-server
> Bun init
Buradan Blank projeyi seçeceğiz. Hazır şablon kurulduktan sonra gerekli bağımlılıkları yüklememiz gerekiyor. MCP SDK içinde girdi/çıktı şemalarını tanımlamak için zod gerekli
bun add postgres @modelcontextprotocol/sdk zod
Sonrasında her bir kütüphanenin deposuna gidip ilgili README dosyalarının ham içerik bağlantılarını alacağız. Sunucuyu oluştururken bunları bağlam olarak kullanacağız Şimdi sunucunun nasıl davranmasını istediğimizi tanımlayacağız. Bunun için bir spec.md oluşturup üst düzey hedefleri yazacağız
# 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
Gördüğün gibi bu oldukça hafif bir spec. Gerekirse daha fazla detay eklemekten çekinme. README bağlantılarıyla birlikte son prompt’u oluşturacağız
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
Bu üç bileşen (spesifikasyon, MCP SDK dokümantasyonu ve Postgres kütüphanesi dokümantasyonu) hazır olduğunda, sunucu implementasyonunun iskeletini çıkarmak için Cursor’u kullanabiliriz. Cursor parçaları bir araya getirmemize yardımcı olacak, MCP SDK ile Postgres’i bağlayan kodu üretecek. Biraz ileri geri prompt’lamanın ardından artık çalışan ilk sürüm bir MCP sunucumuz var. Bunu denemek için MCP Inspector kullanabilirsin
npx @modelcontextprotocol/inspector bun run index.ts

MCP Sunucusunu Test Etme

İlk uygulama tamamlandığında, bunu MCP Inspector ile test edebiliriz. Inspector, sunucunun neleri sunduğunu görmeni ve araçlar ile kaynakların beklendiği gibi davranıp davranmadığını doğrulamanı sağlar. Sorguların çalıştırılabildiğini ve şema bilgisinin doğru şekilde döndürüldüğünü onaylamalıyız. MCP Inspector arayüzü Her şey yolunda görünüyorsa, sunucuyu Cursor’a bağlayıp gerçek bir ortamda test edebiliriz. Bu noktada Cursor, Postgres MCP sunucusunu yerleşik bir yetenekmiş gibi kullanabilecek ve veritabanını doğrudan sorgulayıp incelemene izin verecek.

Sonraki Adımlar

MCP sunucusunu yerelde stdio üzerinden çalıştırmak güzel bir başlangıç, ama ekipler genelde MCP sunucuları üzerinden aynı veritabanına ortak erişim ister. Bu senaryolarda MCP sunucusunu merkezi bir HTTP servisi olarak dağıtmak gerekir. Dağıtılmış bir MCP sunucusu, tekil stdio örneklerine göre çeşitli avantajlar sunar:
  • Ortak veritabanı erişimi: Birden fazla ekip üyesi Cursor üzerinden aynı veritabanı örneğini sorgulayabilir
  • Merkezi yapılandırma: Şema güncellemeleri ve yetki değişiklikleri tek bir yerden yönetilir
  • Gelişmiş güvenlik: Doğru kimlik doğrulama, hız sınırlama ve erişim kontrolleri uygulanabilir
  • Gözlemlenebilirlik: Kullanım kalıpları ve performans metrikleri ekip genelinde izlenebilir
Bunu yapmak için taşıma yöntemini stdio’dan HTTP’ye çevirmen yeterli. Tüm kurulumu anlatmayacağız, ama Cursor’a verebileceğin iyi bir başlangıç istemi burada
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 
Nihai sonuçları burada görebilirsin: pg-mcp-server