Postgres MCP
PostgreSQL veritabanına doğrudan MCP üzerinden sorgu çalıştıran sunucu — schema inspection, read-only query execution, tablo ve view keşfi. Analiz ve rapor için doğru araç.
İçerik
Postgres MCP
PostgreSQL veritabanına AI'ın read-only erişimini sağlar. Schema keşfi, tablo örnekleme, karmaşık SELECT sorguları. Veri analizi, ad-hoc rapor, schema incelemesi için ideal.
Ne işe yarar?
- Veri keşfi: Yeni bir veritabanıyla tanışırken AI'a "bu DB'de ne var?" sordurmak
- Ad-hoc analiz: "Son 7 gün en çok satan 10 ürün neler?" gibi soruları SQL'e çevirip çalıştır
- Schema dokümantasyonu: Tabloları ve kolonları oku → markdown dokümantasyon üret
- Query yazma: AI'a karmaşık analytic query'yi yazdırıp sonucu hemen test ettir
- Veri kalite kontrolü: NULL oranları, duplicate, outlier tespiti
- Rapor promptları: Rapor Uzmanı agent'ı ile birleştir — AI veri çeker + analiz eder
Yetenekler
| Tool / Resource | Açıklama |
|---|---|
query tool |
SELECT çalıştırır, sonucu döner. Diğer statement'lar (INSERT/UPDATE/DELETE/DDL) reddedilir. |
postgres://... resources |
Her tablo bir resource — schema'sı (kolonlar, tipler) okunabilir |
Read-only enforcement server tarafında — AI SQL injection ile bile write yapamaz.
Kurulum
Connection URL formatı
postgresql://<user>:<password>@<host>:<port>/<database>?<options>
Örnek:
postgresql://analyst:pass@db.prod.internal:5432/orders?sslmode=require
Claude Code
claude mcp add postgres -- \
npx -y @modelcontextprotocol/server-postgres \
"postgresql://analyst:pass@localhost:5432/mydb"
Claude Desktop / Cursor
{
"mcpServers": {
"postgres": {
"command": "npx",
"args": [
"-y",
"@modelcontextprotocol/server-postgres",
"postgresql://analyst:pass@localhost:5432/mydb"
]
}
}
}
Birden çok DB
Aynı server binary'yi farklı isimlerle tekrar tanımla:
{
"mcpServers": {
"postgres-prod": {
"command": "npx",
"args": ["-y", "@modelcontextprotocol/server-postgres", "postgresql://.../prod"]
},
"postgres-staging": {
"command": "npx",
"args": ["-y", "@modelcontextprotocol/server-postgres", "postgresql://.../staging"]
}
}
}
Güvenlik
- Read-only kullanıcı zorunlu. AI'ın erişim izni olan kullanıcı:
CREATE USER ai_reader WITH PASSWORD '...'; GRANT CONNECT ON DATABASE mydb TO ai_reader; GRANT USAGE ON SCHEMA public TO ai_reader; GRANT SELECT ON ALL TABLES IN SCHEMA public TO ai_reader; ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT SELECT ON TABLES TO ai_reader; - PII ve hassas tablolar: erişim kısıtla. AI'ın okumaması gereken tabloları GRANT'lama.
- SSL zorunlu (internet üzerinden bağlanıyorsan):
sslmode=requireveyaverify-full. - Production'da tünel: doğrudan prod'a değil, bastion veya SSH tunnel üzerinden.
- Sorgu logları:
pg_stat_statementsile AI'ın ne sorduğunu izlemek mümkün. - Timeout: Uzun sürecek query'leri
statement_timeoutile kes (DB seviyesinde):ALTER ROLE ai_reader SET statement_timeout = '30s';
Örnek kullanımlar
Schema keşfi
"
ordersveritabanında hangi tablolar var, aralarındaki ilişki ne?"
AI postgres:// resource'larını listeler, her birinin schema'sını okur, mermaid ER diyagramı üretir.
Ad-hoc analiz
"Son 30 günde en yüksek ortalama sepet değeri olan müşteri segmenti hangisi? Üst 10 müşteri ile birlikte göster."
AI query yazar → çalıştırır → sonucu tablo olarak döner → yorumlar.
Veri kalite raporu
"
userstablosunda hangi kolonda NULL oranı yüksek? Her kolon için %'sini listele."
Rapor + SQL kombine
Rapor Uzmanı agent'ı ile:
"Son çeyrek ciro raporu hazırla. Bölge/kategori breakdown'ı, haftalık trend, MoM değişim."
Sınırlar
- Sadece SELECT — data mutation, schema change, admin komut yok
- BLOB / büyük text sonuçlar truncate edilebilir —
LIMITile kendini sınırla - pg_dump / backup yapamaz — ayrı araç
- Stored procedure çağrısı:
SELECT func()formatıyla olur - Parallel query tool tarafında sıralı çalışır — çoklu query için AI birden fazla tool call yapar
Sorun giderme
| Belirti | Sebep | Çözüm |
|---|---|---|
connection refused |
DB ulaşılamıyor | Host/port doğru mu, firewall, SSH tunnel aç |
password authentication failed |
Credentials yanlış | URL'deki encode (@ → %40, : → %3A) |
permission denied for table X |
GRANT eksik | GRANT SELECT ON TABLE X TO ai_reader |
canceling statement due to statement timeout |
Query çok uzun | WHERE ekle, LIMIT koy, index kontrol |
| Tablo görünmüyor | Schema farklı | search_path ayarla: ALTER ROLE ai_reader SET search_path = public, audit |
Doğrulama
Kurduktan sonra AI'a:
"Bu Postgres DB'sinde kaç tablo var, 3 tanesinin adını ver."
query tool'u ile SELECT COUNT(*) FROM information_schema.tables WHERE table_schema = 'public' çalıştırmalı.
Resmi repo: github.com/modelcontextprotocol/servers · Anthropic maintained