Couldn't load this page.

← Blog
Engineering

Postgres MCP: Verbinden Sie Ihren KI-Agenten mit einer Datenbank

Yura Oak

Ein Postgres MCP-Server lässt einen KI-Agenten ein PostgreSQL-Schema untersuchen und Abfragen über das Model Context Protocol ausführen. Sie geben dem Server eine Datenbankverbindung. Ihr Agent ruft dessen Werkzeuge auf, um Tabellen zu lesen und Fragen zu den Daten zu beantworten.

Diese Anleitung verbindet Cursor mit einer Beispieldatenbank. Sie verwendet Postgres MCP Pro, eine separate Datenbankrolle und einen eingeschränkten Zugriffsmodus. Das Endergebnis ist leicht zu überprüfen: Der Agent sollte zwei aktive Projekte mit einem gemeinsamen monatlichen Budget von 68 $ finden. Er sollte scheitern, wenn er versucht, diese Zeilen zu ändern.

Sie können die Datenbank mit Managed Postgres auf Lizard erstellen. Der MCP-Prozess läuft auf Ihrem Computer. Die gleichen SQL-Befehle funktionieren auch mit einer lokalen PostgreSQL-Instanz unter Ihrer Kontrolle.

Wie sich Postgres MCP mit Ihrer Datenbank verbindet

Der Agent sendet einen Werkzeugaufruf an den MCP-Server. Der Server verbindet sich mit PostgreSQL, führt die Abfrage aus und gibt das Ergebnis zurück. PostgreSQL prüft die Berechtigungen der Datenbankrolle der Verbindung.

Cursor verbindet sich über Postgres MCP Pro als mcp_reader mit Managed Postgres.

Wir verwenden Postgres MCP Pro, ein unabhängiges Open-Source-Projekt. Es stellt Werkzeuge bereit, um Schemata aufzulisten, Tabellendetails zu lesen und SQL auszuführen. Lizard stellt in diesem Setup die Datenbank bereit.

Die lokale Verbindung zwischen Cursor und dem MCP-Prozess nutzt stdio. Ihr Computer muss den Datenbank-Endpunkt erreichen können. Abfrageergebnisse können in den Kontext Ihres KI-Anbieters gelangen. Daher verwendet diese Anleitung erfundene Projektnamen und Budgets.

Was Sie benötigen

  • Eine neue PostgreSQL-Instanz oder eine separate Datenbank für diesen Test mit einem Eigentümerkonto, das eine Datenbank und eine Rolle erstellen kann.
  • psql auf Ihrem Computer.
  • uv, das das festgelegte Python-Paket ausführt.
  • Cursor mit aktivierten benutzerdefinierten MCP-Servern.

Wir haben die SQL- und MCP-Aufrufe mit PostgreSQL 14.20, Python 3.12.10, postgres-mcp==0.3.0 und mcp==1.30.0 getestet. Die Ergebnistabelle unten dokumentiert den Umfang dieser Prüfungen.

1. Erstellen Sie eine Postgres-Beispieldatenbank

Fügen Sie in einem neuen Lizard-Projekt Managed Postgres über das Dashboard hinzu. Wenn Sie bereits Lizard CLI verwenden und das neue Projekt verknüpft haben, führen Sie dies aus:

lizard add postgres

Das Dashboard liefert Host, Port, Datenbank und Anmeldedaten. Folgen Sie der Managed Postgres Verbindungsanleitung, um sich mit psql zu verbinden. Verwenden Sie für diese Einrichtung das Eigentümerkonto. Der Agent erhält ein anderes Konto.

Erstellen Sie in psql eine neue Datenbank und wechseln Sie dorthin:

CREATE DATABASE mcp_demo;
\connect mcp_demo

\connect ist ein psql-Befehl. Wenn Sie einen SQL-Editor verwenden, wählen Sie mcp_demo aus, bevor Sie den nächsten Block ausführen. Wenn der Datenbankname bereits existiert, wählen Sie einen anderen Namen und aktualisieren Sie die späteren Beispiele.

Erstellen Sie eine Tabelle mit drei Zeilen:

CREATE SCHEMA demo;

CREATE TABLE demo.projects (
  id integer PRIMARY KEY,
  name text NOT NULL,
  status text NOT NULL CHECK (status IN ('active', 'paused')),
  monthly_budget_usd numeric(10, 2) NOT NULL
);

INSERT INTO demo.projects VALUES
  (1, 'Atlas', 'active', 49.00),
  (2, 'Beacon', 'active', 19.00),
  (3, 'Cedar', 'paused', 0.00);

Diese Beträge gehören zu den Beispieldaten. Es sind keine Preise von Lizard.

2. Geben Sie dem Agenten eine Rolle, die die Beispieltabelle lesen kann

Erstellen Sie ein Login ohne Administratorrechte:

CREATE ROLE mcp_reader LOGIN
  NOSUPERUSER NOCREATEDB NOCREATEROLE NOREPLICATION NOINHERIT;

Führen Sie dann diesen psql-Befehl aus, um das Passwort festzulegen, ohne es im SQL-Verlauf zu speichern:

\password mcp_reader

Die folgenden Berechtigungen gelten für die neue mcp_demo-Datenbank. Der Entzug von Rechten für PUBLIC betrifft andere Rollen, die diese Datenbank nutzen. Fügen Sie diesen Block daher nicht in eine bestehende, gemeinsam genutzte Anwendungsdatenbank ein.

REVOKE ALL ON DATABASE mcp_demo FROM PUBLIC;
REVOKE CREATE ON SCHEMA public FROM PUBLIC;

GRANT CONNECT ON DATABASE mcp_demo TO mcp_reader;
GRANT USAGE ON SCHEMA demo TO mcp_reader;
GRANT SELECT ON demo.projects TO mcp_reader;

ALTER ROLE mcp_reader IN DATABASE mcp_demo
  SET default_transaction_read_only = on;
ALTER ROLE mcp_reader IN DATABASE mcp_demo
  SET statement_timeout = '5s';

mcp_reader darf demo.projects lesen, aber keine Zeilen ändern oder Tabellen erstellen.

Dies gewährt Zugriff auf eine Tabelle. Eine Tabelle, die Sie später erstellen, benötigt eine eigene Berechtigung. PostgreSQL kann Objektnamen weiterhin über Systemkataloge preisgeben. Tabellenberechtigungen steuern den Zugriff auf die Zeilen. Siehe die GRANT-Referenz von PostgreSQL.

Die schreibgeschützte Standardeinstellung hilft, Fehler zu vermeiden. Ein Client kann diese Einstellung jedoch ändern. Die Tabellenberechtigungen verhindern, dass diese Rolle in demo.projects schreibt. Wir haben überprüft, dass ein Update auch nach dem Deaktivieren der Standardeinstellung fehlschlägt.

3. Speichern Sie die Leseverbindung außerhalb Ihres Quellcodes

Erstellen Sie eine Verbindungs-URL mit der neuen Rolle und der mcp_demo-Datenbank. Behalten Sie Host, Port und die erforderlichen TLS-Einstellungen aus den Verbindungsanweisungen Ihres Anbieters bei. Kodieren Sie Sonderzeichen im Passwort mit Prozentzeichen, wenn Sie es in eine URL einfügen. PostgreSQL dokumentiert das Verbindungs-URI-Format.

Für einen gehosteten Endpunkt, der TLS erfordert, sieht das Format so aus:

postgresql://mcp_reader:URL_ENCODED_PASSWORD@DB_HOST:DB_PORT/mcp_demo?sslmode=require

sslmode=require erfordert Verschlüsselung. Wenn Ihr Anbieter ein CA-Zertifikat und einen Hostnamen für vollständige Zertifikatsprüfungen bereitstellt, verwenden Sie dessen verify-full-Konfiguration. Ein Zertifikatsfehler erfordert eine passende Host- und Vertrauenskonfiguration. Lösen Sie ihn nicht, indem Sie TLS bei einer gehosteten Verbindung deaktivieren.

Fügen Sie .env.mcp zur .gitignore Ihres Projekts hinzu. Erstellen Sie diese Datei dann im Stammverzeichnis des Projekts:

DATABASE_URI=postgresql://mcp_reader:URL_ENCODED_PASSWORD@DB_HOST:DB_PORT/mcp_demo?sslmode=require

Ersetzen Sie jeden Platzhalter durch die Werte Ihrer Leseverbindung. Der Name lautet DATABASE_URI: Das erwartet Postgres MCP Pro. Die Anwendung-Verbindungsvariable von Lizard heißt DATABASE_URL. Die alleinige Übergabe dieses Namens konfiguriert diesen MCP-Server nicht.

Halten Sie die Eigentümerverbindung aus dieser Datei heraus. Beschränken Sie unter macOS oder Linux den Zugriff auf die Lesedatei:

chmod 600 .env.mcp

4. Konfigurieren Sie Postgres MCP in Cursor

Erstellen Sie .cursor/mcp.json im selben Projekt. Wenn die Datei bereits andere Server enthält, fügen Sie postgres-demo in das bestehende mcpServers-Objekt ein.

{
  "mcpServers": {
    "postgres-demo": {
      "type": "stdio",
      "command": "uvx",
      "args": [
        "--python", "3.12",
        "--with", "mcp==1.30.0",
        "--from", "postgres-mcp==0.3.0",
        "postgres-mcp", "--access-mode=restricted"
      ],
      "envFile": "${workspaceFolder}/.env.mcp"
    }
  }
}

Cursor unterstützt die Projekt-MCP-Konfiguration und envFile für lokale stdio-Server. Siehe die MCP-Konfigurationsreferenz. Wenn Cursor uvx nicht finden kann, ersetzen Sie den Befehl durch den vollständigen Installationspfad.

Die beiden Versionsfestlegungen sind wichtig. Bei unserer Prüfung wählte die Installation von postgres-mcp==0.3.0 ohne MCP-SDK-Einschränkung mcp==2.2.0 aus. Der Server konnte dann mcp.server.fastmcp nicht importieren. Mit mcp==1.30.0 startete er und schloss die unten stehenden Tests ab.

Um den Paketstart vor dem Öffnen einer Datenbankverbindung zu überprüfen, führen Sie dies aus:

uvx --python 3.12 --with 'mcp==1.30.0' \
  --from 'postgres-mcp==0.3.0' postgres-mcp --help

Aktivieren oder starten Sie postgres-demo in den MCP-Einstellungen von Cursor neu. Lassen Sie die Werkzeugfreigabe aktiviert, während Sie die Einrichtung überprüfen. Untersuchen Sie die SQL-Argumente, bevor Sie einen Aufruf zulassen.

5. Überprüfen Sie die Werkzeuge und die Antwort

Beginnen Sie mit einer Schema-Frage:

Use postgres-demo to inspect the demo schema. List its tables and the columns
of demo.projects. Show the tool results. Do not change the database.

Der Server sollte list_schemas, list_objects, get_object_details und execute_sql bereitstellen. Bestätigen Sie, dass der Agent die Werkzeuge aufruft und id, name, status und monthly_budget_usd aus der Tabelle meldet.

Fragen Sie dann:

Using demo.projects, how many projects are active and what is their total
monthly budget in USD? Show the SQL and the database result.

Eine Abfrage für diese Antwort lautet:

SELECT
  count(*) AS active_projects,
  sum(monthly_budget_usd) AS total_budget_usd
FROM demo.projects
WHERE status = 'active';

Die erwarteten Werte sind:

active_projectstotal_budget_usd
268.00

Überprüfen Sie abschließend die Einschränkung für diese Beispieltabelle. Die WHERE false-Bedingung stellt sicher, dass die Abfrage keine passenden Zeilen hat:

Use execute_sql to run exactly:
UPDATE demo.projects SET name = name WHERE false;
Report the tool response. Do not retry with another tool or connection.

In unserem Test gab der eingeschränkte Modus Error: Error validating query zurück. Eine separate direkte Verbindung mit mcp_reader gab permission denied for table projects zurück, selbst nachdem wir die schreibgeschützte Standardeinstellung deaktiviert hatten. Die MCP-Prüfung und die Datenbankberechtigungen lehnten den Vorgang jeweils ab.

Was wir getestet haben

Am 24. September 2026 haben wir die Beispiel-SQL- und echten MCP-Aufrufe gegen eine neue lokale PostgreSQL 14.20-Instanz mit synthetischen Daten ausgeführt. Wir verwendeten Python 3.12.10, Postgres MCP Pro 0.3.0 und MCP SDK 1.30.0.

PrüfungErgebnis
Verbinden als mcp_readerVerbunden mit mcp_demo; schreibgeschützter Standard an
Schema, Tabelle und Spalten über MCP auflistenGab das Beispielschema und die Tabellenfelder zurück
Aktive Projekte direkt und über MCP abfragenBeide gaben 2 Projekte und 68,00 $ zurück
Ein Update im eingeschränkten MCP-Modus versuchenWährend der Abfragevalidierung abgelehnt
Ein Update direkt ohne schreibgeschützten Standard versuchenDurch PostgreSQL-Tabellenberechtigungen abgelehnt
Eine Tabelle in einem nicht freigegebenen Testschema lesenDurch PostgreSQL-Schemaberechtigungen abgelehnt
Rechte für Tabellen im Schema public und für temporäre Tabellen prüfenBeides nicht gewährt

Diese Prüfungen decken die SQL-Berechtigungen und das MCP-Protokoll ab. Wir haben für diesen Test weder den Cursor-UI-Ablauf ausgeführt noch eine neue Lizard-Datenbank bereitgestellt. Führen Sie die obigen Prüfungen gegen Ihren eigenen Endpunkt durch. Eine verbundene MCP-Anzeige allein beweist nicht, dass die Datenbankwerkzeuge funktionieren.

Häufige Postgres MCP-Verbindungsfehler beheben

SymptomWas zu prüfen ist
No module named mcp.server.fastmcpVerwenden Sie die getestete mcp==1.30.0-Festlegung mit Postgres MCP Pro 0.3.0. Starten Sie den Server nach Änderung seiner Argumente neu.
uvx nicht gefundenInstallieren Sie uv und verwenden Sie bei Bedarf den vollständigen Pfad zu uvx in Cursor.
Fehlende Datenbank-URLBestätigen Sie, dass .env.mcp DATABASE_URI enthält und dass envFile auf das richtige Projekt verweist.
Passwortauthentifizierung fehlgeschlagenVerwenden Sie das Passwort für mcp_reader, prüfen Sie die URL-Kodierung und bestätigen Sie den Endpunkt.
Zeitüberschreitung oder Verbindung abgelehntPrüfen Sie Host, Port, Netzwerkzugriff und ob die Datenbank läuft. Ein privater Service-Hostname wird möglicherweise von Ihrem Laptop aus nicht aufgelöst.
Zertifikatsüberprüfung fehlgeschlagenGleichen Sie den Hostnamen des Anbieters, das CA-Zertifikat und die TLS-Einstellungen ab.
Zugriff auf Schema oder Tabelle verweigertPrüfen Sie USAGE auf dem vorgesehenen Schema und SELECT auf der vorgesehenen Tabelle. Gewähren Sie nur den Zugriff, den das Beispiel benötigt.
Leere TabellenlisteBestätigen Sie den Datenbanknamen und das Schema. Diese Anleitung legt die Tabelle in demo ab, nicht in public.

Benötigen Sie PostgreSQL-Erweiterungen?

Die Schema- und Datenabfragen in dieser Anleitung benötigen keine zusätzliche Erweiterung. Postgres MCP Pro bietet auch Leistungswerkzeuge, die andere Anforderungen haben.

Die Analyse aufwendiger Abfragen verwendet pg_stat_statements. Die hypothetische Indexanalyse verwendet hypopg. Prüfen Sie, ob die Erweiterungen verfügbar sind und ob Serverkonfiguration und Rollenberechtigungen passen. Das Erstellen einer Erweiterung kann eine Aktion des Eigentümers oder eine Serveränderung erfordern. Prüfen Sie die Erweiterungsanforderungen des Projekts, bevor Sie diese Werkzeuge verwenden.

Beginnen Sie mit den Schema- und SELECT-Prüfungen. Ein erweiterungsbedingter Fehler in einem Tuning-Werkzeug bedeutet nicht automatisch, dass die grundlegende MCP-Verbindung defekt ist.

FAQ

Ist Postgres MCP dasselbe wie Lizard MCP?

Nein. Dieses Beispiel verwendet Postgres MCP Pro, um eine PostgreSQL-Datenbank abzufragen. Managed Postgres stellt diese Datenbank bereit. Der Konnektor ist ein separates Projekt.

Kann ich einen anderen KI-Agenten verwenden?

Ja, wenn sein Client lokale MCP-Server über stdio unterstützt. Verwenden Sie denselben festgelegten Prozess, die Lese-Anmeldedaten und den eingeschränkten Modus. Folgen Sie dann dem Konfigurationsformat dieses Clients. Das obige JSON ist für Cursor.

Ersetzt der eingeschränkte Modus Datenbankberechtigungen?

Verwenden Sie beides. Der eingeschränkte Modus prüft Abfragen im MCP-Server. Die Berechtigungen von PostgreSQL begrenzen, was die Verbindungsrolle tun kann, selbst über einen anderen Client. Behalten Sie das Eigentümerkonto für Migrationen und Verwaltung.

Wird es Tabellen für mich erstellen oder Migrationen ausführen?

Diese Einrichtung gibt der Leserolle Zugriff auf die Beispieltabelle. Die Rolle kann das Schema Ihrer Anwendung nicht erstellen oder ändern. Führen Sie überprüfte Migrationen mit Ihrem normalen Anwendungsbereitstellungsprozess aus.

Verbinden Sie als Nächstes die Datenbank mit Ihrer App

Sobald der Agent das Beispielschema untersuchen und die erwartete Antwort zurückgeben kann, haben Sie eine funktionierende Basis für Datenbankfragen während der Entwicklung. Halten Sie die Lese-Anmeldedaten des Agenten von den Anmeldedaten Ihrer Anwendung getrennt, wenn Sie Tabellen hinzufügen.

Erstellen Sie Managed Postgres für Ihr Projekt, folgen Sie der Datenbank-Verbindungsanleitung oder fahren Sie mit dem Cursor-App-Bereitstellungsbeispiel fort. Für die Bereitstellung eines MCP-Dienstes, der von mehreren Clients gemeinsam genutzt wird, siehe die separate Anleitung für Remote-MCP-Server.

Mit KI entwickeln. Mit Lizard ausliefern.

Du brauchst kein Plattform-Team, um live zu gehen. Deine ganze Cloud ist nur einen CLI-Befehl entfernt.

Kostenlos testen
Workspaces
—
Dienste
—
Add-ons
—
Bereitstellungen
—

Wir verwenden Cookies für grundlegende Website-Funktionen und Analysen. Lies unsere Cookie-Richtlinie.