Claude Code mit einer Datenbank verbinden: Echte Daten mit MCP abfragen

PostgreSQL über MCP mit Claude Code verbinden, Read-only-Account mit Berechtigungskontrolle einrichten — Claude liest Schemas, schreibt Abfragen und analysiert Daten direkt, kein manuelles Einfügen mehr.


Sobald eine Datenbank angebunden ist, verändert sich die Arbeitsweise von Claude Code grundlegend. Tabellenstrukturen müssen nicht mehr ins Prompt kopiert werden, Feldnamen müssen nicht erklärt werden — Claude verbindet sich direkt, liest das Schema selbst, schreibt Abfragen und analysiert die Ergebnisse.

Dieser Artikel verwendet PostgreSQL als Beispiel und geht den gesamten Prozess von der Konfiguration bis zur praktischen Nutzung durch.

Welcher MCP Server

Das offizielle @modelcontextprotocol/server-postgres unterstützt:

  • Schema aller Tabellen lesen (Feldnamen, Typen, Constraints)
  • SQL-Abfragen ausführen und Ergebnisse zurückgeben
  • Mehrere Schemas

Nur Lesezugriff. Dieser Server ist für Abfragen konzipiert — kein INSERT, UPDATE oder DELETE.

Installation

npm install -g @modelcontextprotocol/server-postgres

Konfiguration

.claude/settings.json (Projektebene) bearbeiten:

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

Format des Connection Strings: postgresql://USER:PASSWORD@HOST:PORT/DATABASE

Um das Passwort nicht in der Konfigurationsdatei zu hinterlegen, Umgebungsvariable verwenden:

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

Wenn .claude/settings.json in git landet, sicherstellen, dass kein Klartext-Passwort enthalten ist. Sensible Konfiguration in .claude/settings.local.json ablegen und in .gitignore aufnehmen.

Zuerst einen Read-only-Account anlegen

Keinen Account mit Schreibrechten an Claude geben. In PostgreSQL einen Read-only-Benutzer anlegen:

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;

Tabellen, die Claude nicht sehen soll (sessions, audit_logs usw.), einfach nicht berechtigen oder in ein separates Schema verschieben.

Verbindung prüfen

Claude Code neu starten und fragen:

Liste alle Tabellen in der Datenbank auf

Gibt Claude eine Tabellenliste zurück statt „ich habe keinen Datenbankzugriff", funktioniert die MCP-Verbindung.

Praxisbeispiele

Szenario 1: Datenstruktur verstehen

Was ist die Beziehung zwischen den Tabellen users und orders?
Gibt es Fremdschlüssel-Constraints?

Szenario 2: Datenanalyse

Von den Nutzern, die sich in den letzten 30 Tagen registriert haben:
Wie viel Prozent haben mindestens eine Bestellung aufgegeben?
Nach Registrierungskanal aufgeschlüsselt.

Szenario 3: Fehlersuche

Orders mit status = 'pending', die älter als 7 Tage sind — wie viele gibt es,
wann wurde die jüngste erstellt?

Szenario 4: Entwicklungsunterstützung

Ich möchte eine Spalte last_login_at zur Tabelle users hinzufügen.
Schreib das Migrations-SQL und prüf, ob die vorhandenen Indizes ausreichen.

Steuern, was Claude sehen kann

Auf Tabellenebene

GRANT SELECT ON TABLE users, orders, products TO claude_readonly;

Sensible Felder per View ausblenden

CREATE VIEW users_safe AS
  SELECT id, email, created_at, plan, status FROM users;
GRANT SELECT ON users_safe TO claude_readonly;

Remote-Datenbank verbinden

SSH-Tunnel verwenden:

ssh -L 5433:localhost:5432 [email protected] -N

Dann den lokalen Port in der Konfiguration nutzen.

Was sich in der Praxis ändert

Die auffälligste Änderung: Gespräche über Daten brauchen keine Einleitung mehr. Kein Schema erklären, keine Feldtypen beschreiben — einfach das Anliegen nennen, Claude kümmert sich um den Rest. Besonders wertvoll beim Debugging: statt selbst abfragen, kopieren und einfügen, das Problem beschreiben — Claude fragt direkt ab und liefert Schlussfolgerungen.