postgres_mcp

JaviMaligno/postgres_mcp

3.3

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 dayong@mcphub.com.

The PostgreSQL MCP Server is a Model Context Protocol server designed to facilitate database querying, schema exploration, and table management for PostgreSQL databases.

Tools
4
Resources
0
Prompts
0

PostgreSQL MCP Server

CI PyPI version npm version License: MIT

MCP server for PostgreSQL database operations. Works with Claude Code, Claude Desktop, Cursor, and any MCP-compatible client.

Language Versions

This repository contains both TypeScript and Python implementations:

VersionDirectoryStatusInstallation
TypeScript/typescript✅ Recommended (Smithery)npm install -g postgresql-mcp
Python/python✅ Stablepipx install postgresql-mcp

Note: The TypeScript version is used for Smithery deployments. Both versions provide identical functionality.

Features

  • Query Execution: Execute SQL queries with read-only protection by default
  • Schema Exploration: List schemas, tables, views, and functions
  • Table Analysis: Describe structure, indexes, constraints, and statistics
  • Performance Tools: EXPLAIN queries and analyze table health
  • Security First: SQL injection prevention, credential protection, read-only by default
  • MCP Prompts: Guided workflows for exploration, query building, and documentation
  • MCP Resources: Browsable database structure as markdown

Quick Start

TypeScript (Recommended for Smithery)

# Install globally
npm install -g postgresql-mcp

# Or run directly with npx
npx postgresql-mcp

Python

# Install
pipx install postgresql-mcp

# Configure Claude Code
claude mcp add postgres -s user \
  -e POSTGRES_HOST=localhost \
  -e POSTGRES_USER=your_user \
  -e POSTGRES_PASSWORD=your_password \
  -e POSTGRES_DB=your_database \
  -- postgresql-mcp

- Includes database permissions setup, remote connections, and troubleshooting.

Configuration

Environment Variables

VariableRequiredDefaultDescription
POSTGRES_HOSTlocalhostDatabase host
POSTGRES_PORT5432Database port
POSTGRES_USERDatabase user
POSTGRES_PASSWORDDatabase password
POSTGRES_DBDatabase name
POSTGRES_SSLMODEpreferSSL mode
ALLOW_WRITE_OPERATIONSfalseEnable INSERT/UPDATE/DELETE
QUERY_TIMEOUT30Query timeout (seconds)
MAX_ROWS1000Maximum rows returned

Claude Code CLI

# TypeScript version
claude mcp add postgres -s user \
  -e POSTGRES_HOST=localhost \
  -e POSTGRES_USER=your_user \
  -e POSTGRES_PASSWORD=your_password \
  -e POSTGRES_DB=your_database \
  -- npx postgresql-mcp

# Python version
claude mcp add postgres -s user \
  -e POSTGRES_HOST=localhost \
  -e POSTGRES_USER=your_user \
  -e POSTGRES_PASSWORD=your_password \
  -e POSTGRES_DB=your_database \
  -- postgresql-mcp

Cursor IDE

Add to ~/.cursor/mcp.json:

{
  "mcpServers": {
    "postgres": {
      "command": "npx",
      "args": ["postgresql-mcp"],
      "env": {
        "POSTGRES_HOST": "localhost",
        "POSTGRES_PORT": "5432",
        "POSTGRES_USER": "your_user",
        "POSTGRES_PASSWORD": "your_password",
        "POSTGRES_DB": "your_database"
      }
    }
  }
}

Available Tools (14 total)

Query Execution

ToolDescription
queryExecute read-only SQL queries against the database
executeExecute write operations (INSERT/UPDATE/DELETE) when enabled
explain_queryGet EXPLAIN plan for query optimization

Schema Exploration

ToolDescription
list_schemasList all schemas in the database
list_tablesList tables in a specific schema
describe_tableGet table structure (columns, types, constraints)
list_viewsList views in a schema
describe_viewGet view definition and columns
list_functionsList functions and procedures

Performance & Analysis

ToolDescription
table_statsGet table statistics (row count, size, bloat)
list_indexesList indexes for a table
list_constraintsList constraints (PK, FK, UNIQUE, CHECK)

Database Info

ToolDescription
get_database_infoGet database version and connection info
search_columnsSearch for columns by name across all tables

MCP Prompts

Guided workflows that help Claude assist you effectively:

PromptDescription
explore_databaseComprehensive database exploration and overview
query_builderHelp building efficient queries for a table
performance_analysisAnalyze table performance and suggest optimizations
data_dictionaryGenerate documentation for a schema

MCP Resources

Browsable database structure:

Resource URIDescription
postgres://schemasList all schemas
postgres://schemas/{schema}/tablesTables in a schema
postgres://schemas/{schema}/tables/{table}Table details
postgres://databaseDatabase connection info

Example Usage

Once configured, ask Claude to:

Schema Exploration:

  • "List all tables in the public schema"
  • "Describe the users table structure"
  • "What views are available?"

Querying:

  • "Show me 10 rows from the orders table"
  • "Find all customers who placed orders last week"
  • "Count records grouped by status"

Performance Analysis:

  • "What indexes exist on the orders table?"
  • "Analyze the performance of the users table"
  • "Explain this query: SELECT * FROM orders WHERE created_at > '2024-01-01'"

Documentation:

  • "Generate a data dictionary for this database"
  • "What columns contain 'email' in their name?"

Security

This MCP server implements multiple security layers:

Read-Only by Default

Write operations (INSERT, UPDATE, DELETE) are blocked unless explicitly enabled via ALLOW_WRITE_OPERATIONS=true.

SQL Injection Prevention

  • All queries are validated before execution
  • Dangerous operations (DROP DATABASE, etc.) are always blocked
  • Multiple statements are not allowed
  • SQL comments are blocked

Credential Protection

  • Passwords stored using secure string types
  • Credentials never appear in logs or error messages

Query Limits

  • Results limited by MAX_ROWS (default: 1000)
  • Query timeout configurable via QUERY_TIMEOUT

Development

TypeScript

cd typescript
npm install
npm run build
npm run dev  # Watch mode

Python

cd python
uv sync
uv run pytest -v --cov=postgres_mcp

Running Tests

# Python unit tests (no database required)
cd python
uv run pytest tests/test_security.py tests/test_settings.py -v

# Integration tests (requires PostgreSQL)
docker-compose up -d
uv run pytest tests/test_integration.py -v

Troubleshooting

Connection Issues

# Verify PostgreSQL is running
pg_isready -h localhost -p 5432

# Test connection with psql
psql -h localhost -U your_user -d your_database

Permission Denied

Ensure your database user has SELECT permissions:

GRANT SELECT ON ALL TABLES IN SCHEMA public TO your_user;

MCP Server Not Connecting

# Check server status
claude mcp get postgres

# Test server directly
postgresql-mcp  # Should wait for MCP messages

Links

License

MIT