Ana içeriğe atla

Giriş

MCP sunucuları, özel veri kaynaklarına bağlanmana ve bunları Cursor içinde kullanmana 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 sunmasını sağlamak.
Bu eğitim, MCP sunucuları oluşturmanın temellerini öğretmek üzere tasarlandı.

MCP Sunucusu nedir?

Bir MCP sunucusu, Cursor’la iletişim kuran ve harici verilere ya da işlemlere erişim sağlayan bir süreçtir. Birkaç farklı ş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, karmaşık güvenlik konularından kaçınmamıza ve doğrudan MCP mantığına odaklanmamıza imkan tanır. 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 yazarken sık sık bir veritabanını sorgulamak ve incelemek gerekir. Postgres MCP sunucumuz iki temel yetenek sunacak: keyfi sorgular çalıştırma ve tablo şemalarını listeleme. Her iki görev de düz SQL ile yapılabilse de, MCP bunları daha güçlü ve genel olarak daha kullanışlı hale getiren özellikler sunar. Tools, sorgu yürütme gibi eylemleri araçlar olarak dışa açmanın bir yolunu sağlarken; resources, şema bilgisi gibi standartlaştırılmış bağlamı paylaşmamıza imkan tanır. Bu rehberin ilerleyen bölümlerinde, daha gelişmiş iş akışlarını mümkün kılan prompts kavramına 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 sorunsuz şekilde entegre etmemizi sağlayacak.

MCP Sunucusunu Nasıl Kurarsın

Sunucu oluşturmaya başlamanın ilk adımı yeni bir proje ayarlamak. 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. Boilerplate kurulduktan sonra gerekli bağımlılıkları yüklememiz lazım. MCP SDK’de G/Ç şemalarını tanımlamak için zod gerekli
bun add postgres @modelcontextprotocol/sdk zod
Buradan, her bir kütüphanenin deposuna gidip ilgili README dosyalarının ham içerik bağlantılarını alacağız. Sunucuyu kurarken bunları bağlam olarak kullanacağız. Şimdi sunucunun nasıl davranmasını istediğimizi tanımlayacağız. Bunu yapmak için bir spec.md oluşturup üst düzey hedefleri yazacağız.
# Özellikler

- MCP ortam yapılandırmasıyla DATABASE_URL tanımlamayı destekle
- Aracı kullanarak Postgres verilerini sorgula
  - Varsayılan olarak salt okunur yap
  - ENV değişkeniyle yazma işlemlerine izin ver: `DANGEROUSLY_ALLOW_WRITE_OPS=true|1`
- Tablolara `resources` olarak eriş
- Şema tanımları için Zod kullan
Gördüğün gibi bu oldukça hafif bir spesifikasyon. Gerektikçe daha fazla ayrıntı eklemekten çekinme. README bağlantılarıyla birlikte nihai istemi oluşturacağız.
Ne istediğimizi anlamak için aşağıdakileri oku ve @spec.md dosyasını takip et. Gerekli tüm bağımlılıklar yüklü
- @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 hazır olduğunda (spesifikasyon, MCP SDK belgeleri ve Postgres kütüphanesi belgeleri), Cursor’ı sunucu uygulamasını iskeletlemek için kullanabiliriz. Cursor, parçaları birbirine bağlamamızda yardımcı olarak MCP SDK’yı Postgres’e bağlayan kodu üretecek. Biraz ileri geri yönergelerle çalıştıktan sonra artık çalışan ilk sürüm bir MCP sunucumuz var. Denemek için MCP Inspector’ı kullanabilirsin
npx @modelcontextprotocol/inspector bun run index.ts

MCP Sunucusunu Test Etme

İlk implementasyon tamamlandığında, bunu MCP Inspector ile test edebiliriz. Inspector, sunucunun neleri ortaya koyduğunu görmemizi ve araçlar ile kaynakların beklendiği gibi davrandığını doğrulamamızı 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 iyi görünüyorsa, sunucuyu doğrudan Cursor’a bağlayıp gerçek bir ortamda test edebiliriz. Bu noktada Cursor, Postgres MCP sunucusunu yerleşik bir yetenek gibi kullanabilecek ve veritabanını doğrudan sorgulayıp incelememize olanak tanıyacak.

Sonraki Adımlar

MCP sunucusunu yerelde stdio üzerinden çalıştırmak harika bir başlangıç, ama ekipler genelde MCP sunucuları üzerinden aynı veritabanına ortak erişime ihtiyaç duyar. Bu senaryolarda, MCP sunucusunu merkezi bir HTTP hizmeti olarak dağıtmak gerekli hale gelir. Dağıtılan bir MCP sunucusu, tekil stdio örneklerine göre 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 denetimleri 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 kurulumun tamamını ele almayacağız, ama Cursor’a verebileceğin iyi bir başlangıç istemi burada
Mevcut MCP sunucusunu temel alarak HTTP protokolünü uygulayan yeni bir dosya oluştur.

Ortak mantığı mcp-core’a taşı ve her bir aktarım uygulamasını ismiyle adlandır (mcp-server-stdio, mcp-server-http)

@https://raw.githubusercontent.com/modelcontextprotocol/typescript-sdk/refs/heads/main/README.md 
Sonuçların son hâlini burada görebilirsin: pg-mcp-server
I