Skip to main content
Glama

postgres-mcp

Multi-DB Postgres MCP Server für Cursor / andere MCP-Clients.
Unterstützt Schema-Exploration, sicheres SQL, EXPLAIN, Health-Checks und Index-Empfehlungen.

Voraussetzungen

  • Node.js 22+

  • Postgres-Zugang (Connection-URI)

  • Optional: Docker

Empfohlene Postgres-Extensions (für Slow-Queries / Index-Tuning):

CREATE EXTENSION IF NOT EXISTS pg_stat_statements;
CREATE EXTENSION IF NOT EXISTS hypopg;

pg_stat_statements muss zusätzlich in shared_preload_libraries aktiv sein und Postgres neu gestartet werden.

Related MCP server: postgres-mcp

Schnellstart (lokal)

npm install
npm run build

Eine DB:

DATABASE_URL='postgresql://user:pass@host:5432/dbname' \
ACCESS_MODE=restricted \
npm start

Mehrere DBs:

DB_STAGING_URL='postgresql://user:pass@host:5432/staging' \
DB_PROD_URL='postgresql://user:pass@host:5432/prod' \
DEFAULT_DB=staging \
ACCESS_MODE=restricted \
npm start

HTTP-Transport (für Docker / Remote):

npm run start:http
# -> http://0.0.0.0:8000/mcp
# Health: http://0.0.0.0:8000/health

Konfiguration

Datenbanken

Variable

Beschreibung

DATABASE_URL

Einzelne DB (Alias default)

DB_<NAME>_URL

Multi-DB, z. B. DB_STAGING_URL, DB_PROD_URL

DATABASES

Alternativ: staging|url,prod|url oder JSON {"staging":"url"}

DEFAULT_DB

Default-Alias, wenn mehrere DBs konfiguriert sind

Tools akzeptieren optional db (Alias aus list_databases). Ohne Angabe wird DEFAULT_DB verwendet.

Access Mode

Wert

Bedeutung

unrestricted

Read/Write (Default, für Dev)

restricted

Read-only, 30s Statement-Timeout, kein COMMIT/ROLLBACK

Setzen über Env oder CLI:

ACCESS_MODE=restricted
# oder
node dist/index.js --access-mode=restricted

Transport

Variable / Flag

Default

Beschreibung

TRANSPORT / --transport=

stdio

stdio oder http

BIND_HOST / --host=

0.0.0.0

HTTP Bind-Adresse (nicht HOST — Coolify/PaaS überschreibt das)

PORT / --port=

8000

HTTP Port

Cursor einbinden

Stdio (lokal)

In Cursor MCP Settings / mcp.json:

{
  "mcpServers": {
    "postgres": {
      "command": "node",
      "args": [
        "/ABSOLUTER/PFAD/postgres-mcp/dist/index.js",
        "--access-mode=restricted"
      ],
      "env": {
        "DB_STAGING_URL": "postgresql://user:pass@host:5432/staging",
        "DB_PROD_URL": "postgresql://user:pass@host:5432/prod",
        "DEFAULT_DB": "staging"
      }
    }
  }
}

Vorher einmal npm run build ausführen.

HTTP (Docker / Remote)

{
  "mcpServers": {
    "postgres": {
      "url": "http://localhost:8000/mcp"
    }
  }
}

Docker

Build:

docker build -t postgres-mcp .

Run:

docker run --rm -p 8000:8000 \
  -e ACCESS_MODE=restricted \
  -e DEFAULT_DB=staging \
  -e DB_STAGING_URL='postgresql://user:pass@host:5432/staging' \
  -e DB_PROD_URL='postgresql://user:pass@host:5432/prod' \
  postgres-mcp

Endpoints:

  • MCP: http://localhost:8000/mcp

  • Health: http://localhost:8000/health

Hinweis: Wenn Postgres auf dem Host läuft, localhost in der URI je nach OS durch host.docker.internal ersetzen.

Tools

Tool

Zweck

list_databases

Konfigurierte DB-Aliase anzeigen

list_schemas

Schemas listen

list_objects

Tables / Views / Sequences / Extensions

get_object_details

Spalten + Indexes eines Objekts

execute_sql

SQL ausführen (max. 50 Rows default)

explain_query

EXPLAIN / EXPLAIN ANALYZE / hypopg

get_top_queries

Slow Queries (pg_stat_statements)

analyze_workload_indexes

Index-Empfehlungen aus Workload

analyze_query_indexes

Index-Empfehlungen für konkrete Queries

analyze_db_health

Health: index, connection, vacuum, sequence, replication, buffer, constraint, all

Typischer KI-Flow:

  1. list_databases

  2. list_schemas / list_objects

  3. get_object_details

  4. execute_sql mit db: "staging"

Tests

Read-only Integrationstests gegen eine echte DB:

export TEST_DATABASE_URL='postgresql://user:pass@host:5432/dbname'
npm test

Die Tests laufen im restricted-Mode und prüfen alle Tools inkl. Multi-DB und Error-Cases.

Vorlage: .env.test.example

Entwicklung

npm install
npm run build
npm start
npm run start:http
npm test

Build-Output liegt in dist/.

Available Tools

10 tools
analyze_db_healthB

Health checks: index,connection,vacuum,sequence,replication,buffer,constraint,all

Inputs: db, health_type.

analyze_query_indexesB

Recommend indexes for up to 10 specific queries

Inputs: queries (required), db, max_index_size_mb.

analyze_workload_indexesB

Recommend indexes based on pg_stat_statements workload

Inputs: db, max_index_size_mb.

execute_sqlC

Execute SQL (max 50 rows returned)

Inputs: sql (required), db, limit.

explain_queryC

EXPLAIN a SQL query, optionally with hypothetical indexes

Inputs: sql (required), db, analyze, hypothetical_indexes.

get_object_detailsC

Columns and indexes for a table/view

Inputs: object_name (required), schema_name (required), db, object_type.

get_top_queriesC

Slow or resource-heavy queries from pg_stat_statements

Inputs: db, limit, sort_by.

list_databasesA

List configured database connections. Call first when unsure which db to use.

Inputs: no named parameters.

list_objectsB

List tables, views, sequences, or extensions in a schema

Inputs: schema_name (required), db, object_type.

list_schemasA

List schemas (user schemas only by default)

Inputs: db, include_system.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

Loading tool schema changelog…

    TDQS

    A3.5/5.0

    Scored across 10 tools

    Disambiguation5/5

    Each tool targets a distinct aspect of PostgreSQL introspection and analysis: listing databases/schemas/objects, fetching details, executing/explaining SQL, and performance tuning. Even the two index analysis tools are clearly differentiated by workload vs. specific queries.

    Naming Consistency5/5

    All tool names follow a consistent verb_noun pattern using lowercase with underscores (list_*, get_*, execute_sql, explain_query, analyze_*). The naming is predictable and easy to navigate.

    Tool Count5/5

    With 10 tools, the server is well-scoped for a PostgreSQL administration and performance analysis purpose. Each tool has a clear role without redundancy or bloat.

    Completeness5/5

    The tool set covers the full lifecycle of database inspection and optimization: discovery (databases, schemas, objects), exploration (details, SQL execution, explain), performance analysis (top queries, index recommendations), and health checks. No obvious gaps for its stated purpose.

    Maintenance

    ActivityInactive
    ResponsivenessNo recent community issues

    Related MCP Connectors

    Related MCP Servers

    • A
      license
      A
      quality
      B
      maintenance
      MCP server with 14 tools for PostgreSQL database operations. Query databases, explore schemas, analyze tables, with SQL injection prevention and read-only mode by default.
      14
      12
      MIT