Claude Code'u Veritabanına Bağlama: MCP ile Gerçek Veri Sorgulama

MCP aracılığıyla PostgreSQL'i Claude Code'a bağla, salt okunur hesap ve izin kontrolü kur; Claude şemayı doğrudan okusun, sorgu yazsın, veri analiz etsin.


Bir veritabanı bağlandıktan sonra Claude Code farklı çalışır. Tablo yapısını prompt'a kopyalamana ya da alan adlarını açıklamana gerek kalmaz — Claude doğrudan bağlanır, şemayı kendisi okur, sorguları yazar ve sonuçları analiz eder.

Bu makale PostgreSQL'i örnek alarak yapılandırmadan gerçek kullanıma kadar tüm süreci anlatıyor.

Hangi MCP Server Kullanılır

Resmi @modelcontextprotocol/server-postgres şunları destekler:

  • Tüm tabloların şemasını okuma (alan adları, türler, kısıtlamalar)
  • SQL sorguları çalıştırma ve sonuç döndürme
  • Çoklu şema desteği

Yalnızca okuma. Bu Server yalnızca sorgular için tasarlanmıştır; INSERT, UPDATE veya DELETE çalıştırmaz.

Kurulum

npm install -g @modelcontextprotocol/server-postgres

Yapılandırma

.claude/settings.json dosyasını (proje düzeyi) düzenle:

{
  "mcpServers": {
    "db": {
      "command": "npx",
      "args": [
        "-y",
        "@modelcontextprotocol/server-postgres",
        "postgresql://readonly_user:password@localhost:5432/myapp_production"
      ]
    }
  }
}

Bağlantı dizesi biçimi: postgresql://USER:PASSWORD@HOST:PORT/DATABASE

Parolayı yapılandırma dosyasına yazmak istemiyorsan ortam değişkeni kullan:

{
  "mcpServers": {
    "db": {
      "command": "npx",
      "args": ["-y", "@modelcontextprotocol/server-postgres"],
      "env": {
        "DATABASE_URL": "postgresql://readonly_user:password@localhost:5432/myapp_production"
      }
    }
  }
}

.claude/settings.json git'e commit edilecekse içinde düz metin parola olmadığından emin ol. Hassas yapılandırmayı .claude/settings.local.json dosyasına koy ve .gitignore'a ekle.

Önce Salt Okunur Bir Hesap Oluştur

Claude'a yazma yetkisi olan bir hesap verme. PostgreSQL'de salt okunur bir kullanıcı oluştur:

-- Salt okunur kullanıcı oluştur
CREATE USER claude_readonly WITH PASSWORD 'your_password';

-- Bağlantı yetkisi ver
GRANT CONNECT ON DATABASE myapp_production TO claude_readonly;

-- Şema kullanım yetkisi ver
GRANT USAGE ON SCHEMA public TO claude_readonly;

-- Tüm mevcut tablolara SELECT yetkisi ver
GRANT SELECT ON ALL TABLES IN SCHEMA public TO claude_readonly;

-- Gelecekte oluşturulacak tablolara da aynı yetkiyi uygula
ALTER DEFAULT PRIVILEGES IN SCHEMA public
  GRANT SELECT ON TABLES TO claude_readonly;

Claude'un görmesini istemediğin tablolar varsa (örneğin sessions veya audit_logs), o tablolara yetki vermemen yeterli; ya da ayrı bir şemaya taşı.

Bağlantıyı Doğrula

Claude Code'u yeniden başlat ve sor:

Veritabanındaki tüm tabloları listele

Claude "veritabanına erişimim yok" demek yerine tablo adlarını listeliyorsa MCP bağlantısı çalışıyor demektir.

Gerçek Kullanım Örnekleri

Yapılandırma tamamlandıktan sonra Claude çok daha fazlasını yapabilir. Birkaç pratik senaryo:

Senaryo 1: Veri yapısını anlama

users ve orders tabloları arasındaki ilişki nedir?
Yabancı anahtar kısıtlamaları var mı?

Claude, tablo yapısını ve kısıtlamaları okumak için doğrudan information_schema'yı sorgular ve sana net bir açıklama sunar — şemayı yapıştırman gerekmez.

Senaryo 2: Veri analizi

Son 30 günde kayıt olan kullanıcıların kaçı
en az bir sipariş verdi?
Kayıt kanalına göre grupla.

Claude SQL yazar, çalıştırır ve sonuçları analiz eder. Sorgu yanlışsa (alan adı uyuşmazlığı gibi), hatayı görüp kendisi düzeltir.

Senaryo 3: Hata ayıklama

orders tablosunda status = 'pending' olan ama
created_at 7 günü geçmiş kayıt var mı?
Kaç tane ve en yenisi ne zaman oluşturulmuş?

Bu tür anlık sorgular eskiden SQL yazmanı ya da bir veritabanı aracı açmanı gerektiriyordu. Artık sadece ne istediğini söylemen yeterli.

Senaryo 4: Geliştirme desteği

users tablosuna last_login_at sütunu eklemek istiyorum.
Migrasyon SQL'ini yaz ve mevcut indekslerin yeterli olup olmadığını kontrol et.

Claude mevcut tablo yapısını okur, migrasyonu yazar ve indeks durumunu analiz eder — hepsi tek seferde.

Claude'un Görebileceklerini Kontrol Et

Varsayılan olarak Claude, izin verdiğin tüm tabloların tam şemasına ve verilerine erişebilir. Bunu ihtiyacına göre kısıtla.

Tablo bazında kontrol

Yalnızca belirli tablolara yetki ver:

-- Tüm tablolar yerine belirli tablolar
GRANT SELECT ON TABLE users, orders, products TO claude_readonly;
-- sessions, payment_tokens, audit_logs erişim almaz

Görünümle hassas alanları filtrele

Tabloda hassas alanlar varsa (parola hash'i, API anahtarı, telefon numarası), bunları gizleyen bir görünüm oluştur:

CREATE VIEW users_safe AS
  SELECT id, email, created_at, plan, status
  FROM users;
  -- password_digest, phone, payment_method_id dahil değil

GRANT SELECT ON users_safe TO claude_readonly;
-- orijinal tabloya yetki verme

Claude yalnızca görünümü sorgulayabilir, orijinal alanları göremez.

Satır limiti

@modelcontextprotocol/server-postgres, sorgu sonuçlarına varsayılan olarak bir satır limiti uygular (genellikle 1.000 satır); bu Claude'un tüm tabloyu çekmesini önler. Bu limit makuldür — artırma.

Uzak Veritabanına Bağlanma

Üretim veritabanları genellikle portlarını doğrudan açmaz. SSH tüneli kullan:

# localhost:5433'ü uzak sunucunun 5432 portuna yönlendir
ssh -L 5433:localhost:5432 [email protected] -N

Yapılandırma dosyasında yerel portu kullan:

"postgresql://readonly_user:password@localhost:5433/myapp_production"

pgBouncer gibi bir bağlantı havuzu aracı da kullanabilirsin.

Birden Fazla Veritabanı

Proje birden fazla veritabanı kullanıyorsa (ana + analitik + önbellek), birden fazla MCP Server yapılandır:

{
  "mcpServers": {
    "main-db": {
      "command": "npx",
      "args": ["-y", "@modelcontextprotocol/server-postgres", "postgresql://...ana..."]
    },
    "analytics-db": {
      "command": "npx",
      "args": ["-y", "@modelcontextprotocol/server-postgres", "postgresql://...analitik..."]
    }
  }
}

Claude her ikisine de bağlanır. Hangisini sorgulamasını istediğini söylemen yeterli.

Pratikte Ne Değişir

Veritabanı bağlandıktan sonra en belirgin değişiklik: veri ile ilgili konuşmalar artık ön hazırlık gerektirmiyor. Şemayı açıklamana, alan türlerini anlatmana gerek yok — ne istediğini söyle, Claude kendisi araştırır.

Hata ayıklamada özellikle işe yarıyor. Eski akış: veritabanını sorgula → sonuçları kopyala → Claude'a yapıştır → analiz et. Yeni akış: sorunu açıkla → Claude doğrudan sorgular → sonuçları al.