Podłącz PostgreSQL do Claude Code przez MCP, skonfiguruj konto tylko do odczytu z kontrolą uprawnień — Claude sam czyta schematy, pisze zapytania i analizuje dane.
Po podłączeniu bazy danych Claude Code działa inaczej. Nie trzeba wklejać struktury tabel do promptu ani tłumaczyć nazw pól — Claude łączy się bezpośrednio, sam czyta schemat, pisze zapytania i analizuje wyniki.
Artykuł używa PostgreSQL jako przykładu i omawia cały proces od konfiguracji do realnego użycia.
Oficjalny @modelcontextprotocol/server-postgres obsługuje:
Tylko odczyt. Ten Server służy wyłącznie do zapytań — nie wykonuje INSERT, UPDATE ani DELETE.
npm install -g @modelcontextprotocol/server-postgres
Edytuj .claude/settings.json (poziom projektu):
{
"mcpServers": {
"db": {
"command": "npx",
"args": ["-y", "@modelcontextprotocol/server-postgres",
"postgresql://readonly_user:password@localhost:5432/myapp_production"]
}
}
}
Aby nie przechowywać hasła w pliku konfiguracyjnym, użyj zmiennej środowiskowej przez pole env. Wrażliwą konfigurację umieść w .claude/settings.local.json i dodaj do .gitignore.
CREATE USER claude_readonly WITH PASSWORD 'your_password';
GRANT CONNECT ON DATABASE myapp_production TO claude_readonly;
GRANT USAGE ON SCHEMA public TO claude_readonly;
GRANT SELECT ON ALL TABLES IN SCHEMA public TO claude_readonly;
ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT SELECT ON TABLES TO claude_readonly;
Uruchom ponownie Claude Code i zapytaj: „Wylistuj wszystkie tabele w bazie danych". Jeśli Claude zwróci listę — MCP działa.
Zrozumieć strukturę danych: „Jaka jest relacja między tabelami users i orders? Czy są ograniczenia klucza obcego?"
Analiza danych: „Z użytkowników zarejestrowanych w ostatnich 30 dniach, jaki procent złożył co najmniej jedno zamówienie? Z podziałem na kanał rejestracji."
Debugowanie: „Znajdź zamówienia ze status = 'pending' starsze niż 7 dni. Ile ich jest i kiedy zostało utworzone ostatnie?"
Wsparcie deweloperskie: „Chcę dodać kolumnę last_login_at do tabeli users. Napisz SQL migracji i sprawdź, czy istniejące indeksy wystarczą."
-- Konkretne tabele
GRANT SELECT ON TABLE users, orders, products TO claude_readonly;
-- View do filtrowania wrażliwych pól
CREATE VIEW users_safe AS SELECT id, email, created_at, plan, status FROM users;
GRANT SELECT ON users_safe TO claude_readonly;
ssh -L 5433:localhost:5432 [email protected] -N
Najbardziej zauważalna zmiana: rozmowy o danych nie wymagają już wstępu. Nie trzeba tłumaczyć schematu ani typów pól — mówisz co potrzebujesz, Claude sam to wyszukuje. Szczególnie przydatne przy debugowaniu: zamiast samemu robić zapytanie i kopiować wyniki, opisujesz problem — Claude odpytuje bezpośrednio i od razu daje wnioski.