Giriş

MCP sunucuları, özel veri kaynaklarına bağlanmana ve bunları Cursor içinde kullanılabilir hale getirmeni sağlar. Bu, özellikle tarayıcılar, veritabanları veya hata ve sistem günlükleri gibi yerlerden bağlama ihtiyaç duyduğunda faydalıdır. Bir MCP sunucusu kurmak basittir ve Cursor ile hızla yapılabilir. Bu kılavuzda, 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ğlamak.
Bu eğitim, MCP sunucuları oluşturmanın temellerini öğretmek için tasarlandı.

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: stdio (standart giriş/çıkış akışları) üzerinden bilgisayarında yerel olarak çalışan bir sunucu. Bu yaklaşım, karmaşık güvenlik konularını devre dışı bırakır ve doğrudan MCP mantığına odaklanmamızı sağlar. MCP’nin en yaygın kullanım alanlarından biri veritabanı erişimidir. Panolar (dashboard’lar) oluştururken, analizler çalıştırırken veya geçişler (migration’lar) yaparken sık sık bir veritabanını sorgulamak ve incelemek gerekir. Postgres MCP sunucumuz iki temel yetenek sunacak: keyfi sorgular çalıştırmak ve tablo şemalarını listelemek. Bu görevlerin ikisi de düz SQL ile yapılabilse de, MCP bunları daha güçlü ve genel olarak daha kullanışlı kılan özellikler sunar. Tools, sorgu yürütme gibi eylemleri dışa açmanın bir yolunu sağlarken; resources, şema bilgisi gibi standartlaştırılmış bağlamı paylaşmamıza imkân tanır. Bu rehberin ilerleyen bölümlerinde, daha gelişmiş iş akışlarını mümkün kılan prompts konusuna da bakacağız. Kaputun altında, veritabanında SQL ifadelerini yürütmek için postgres npm paketini kullanacağız. MCP SDK, bu çağrıların etrafında bir sarmalayıcı görevi görerek Postgres işlevselliğini Cursor’a sorunsuzca entegre etmemizi sağlar. [Yer tutucu: Tools ve resources ile MCP sunucusunun görselleştirmesi]

MCP Sunucusu Nasıl Oluşturulur

Sunucu oluşturmanın ilk adımı yeni bir proje kurmak. 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. İskelet hazırlandıktan sonra gerekli bağımlılıkları kurmamız gerekiyor. MCP SDK içinde g/ç (i/o) ş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ısını alacağız. Sunucuyu oluştururken bağlam olarak bunları 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

- DATABASE_URL değerini MCP ortam (env) yapılandırmasıyla tanımlamaya izin ver
- Postgres verisini bir araç üzerinden sorgula
  - Varsayılan olarak salt-okunur yap
  - ENV `DANGEROUSLY_ALLOW_WRITE_OPS=true|1` ayarlanarak yazma işlemlerine izin ver
- Tablolara `resources` olarak eriş
- Şema tanımları için Zod kullan
Gördüğün gibi bu oldukça hafif bir spesifikasyon. Gerekirse daha fazla detay eklemekten çekinme. README bağlantılarıyla birlikte nihai istemi oluşturacağız
Read the following and follow @spec.md to understand what we want. All necessary dependencies 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, Cursor’ı kullanarak sunucu uygulamasının iskeletini çıkarabiliriz. Cursor parçaları bir araya getirmemize yardımcı olacak ve MCP SDK ile Postgres’i birbirine bağlayan kodu üretecek. Biraz ileri geri istemden sonra artık MCP sunucusunun ilk sürümü çalışır halde. Denemek için MCP Inspector kullanabiliriz
npx @modelcontextprotocol/inspector bun run index.ts

MCP Sunucusunu Test Etme

İlk uygulama tamamlandıktan sonra, bunu MCP Inspector ile test edebiliriz. Inspector, sunucunun hangi uçları/özellikleri 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ü doğrulamalıyız. MCP Inspector arayüzü Her şey yolundaysa, sunucuyu doğrudan 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 harika bir başlangıç, ama ekipler genellikle MCP sunucuları üzerinden aynı veritabanına ortak erişime ihtiyaç duyar. Bu senaryolarda MCP sunucusunu merkezi bir HTTP servisi olarak dağıtmak gerekir. Dağıtılmış bir MCP sunucusu, tekil stdio örneklerine kıyasla birkaç avantaj 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 çevirirsin. Tüm kurulumu anlatmayacağız, ama Cursor’a verebileceğin iyi bir başlangıç istemi burada
Based on the existig 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