postgres-mcp

wongjingping/postgres-mcp

3.2

If you are the rightful owner of postgres-mcp and would like to certify it and/or have it hosted online, please leave a comment on the right or send an email to henry@mcphub.com.

A Model Context Protocol server for querying PostgreSQL databases with tools for data retrieval and schema inspection.

Tools
  1. query_database

    Execute SELECT queries (with SQL injection protection)

  2. get_table_schema

    Get table column information and constraints

  3. list_tables

    List all database tables

MCP Postgres Server

A Model Context Protocol server for querying PostgreSQL databases with tools for data retrieval and schema inspection.

Setup

Prerequisites: Python 3.11+ and PostgreSQL

# Install dependencies
pip install -r requirements.txt

# Configure database connection (defaults shown)
export POSTGRES_HOST=localhost
export POSTGRES_PORT=5432
export POSTGRES_USER=postgres
export POSTGRES_PASSWORD=postgres
export POSTGRES_DB=housing

Usage

Development

Run the following command to start the server in development mode and launch the MCP Inspector:

mcp dev main.py

MCP Client Integration

You can also add the following to your MCP client configuration to use the server:

{
  "mcpServers": {
    "postgres": {
      "command": "python",
      "args": ["main.py"],
      "env": {
        "POSTGRES_HOST": "localhost",
        "POSTGRES_PORT": "5432",
        "POSTGRES_USER": "postgres",
        "POSTGRES_PASSWORD": "postgres",
        "POSTGRES_DB": "housing"
      }
    }
  }
}

See for an example of how to add the server in Cursor IDE.

Available Tools

  • query_database - Execute SELECT queries (with SQL injection protection)
  • get_table_schema - Get table column information and constraints
  • list_tables - List all database tables
  • postgres://schema - Access complete database schema (resource)

Comparison with Official MCP Postgres Server

This implementation differs from the official @modelcontextprotocol/server-postgres in several key ways:

FeatureThis Server (Python)Official Server (TypeScript)
SafetyGuards against SQL injectionNo protection
Connection Pooling✅ Built-in (asyncpg)❌ Single connection

Security

  • Only SELECT statements allowed
  • Parameterized queries supported
  • Environment-based configuration (no hardcoded credentials)

Next Steps

  • Implement auth for postgres - currently I'm still relying on env variables which doesn't seem very secure
  • Extend this to run on multiple databases and potentially multiple postgres instances as well
  • Implement table / column pruning