Skip to main content
Glama

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:

Version

Directory

Status

Installation

TypeScript

/typescript

✅ Recommended (Smithery)

npm install -g postgresql-mcp

Python

/python

✅ Stable

pipx 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

# 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

Full Installation Guide - Includes database permissions setup, remote connections, and troubleshooting.

Configuration

Environment Variables

Variable

Required

Default

Description

POSTGRES_HOST

localhost

Database host

POSTGRES_PORT

5432

Database port

POSTGRES_USER

Database user

POSTGRES_PASSWORD

Database password

POSTGRES_DB

Database name

POSTGRES_SSLMODE

prefer

SSL mode

ALLOW_WRITE_OPERATIONS

false

Enable INSERT/UPDATE/DELETE

QUERY_TIMEOUT

30

Query timeout (seconds)

MAX_ROWS

1000

Maximum 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

Tool

Description

query

Execute read-only SQL queries against the database

execute

Execute write operations (INSERT/UPDATE/DELETE) when enabled

explain_query

Get EXPLAIN plan for query optimization

Schema Exploration

Tool

Description

list_schemas

List all schemas in the database

list_tables

List tables in a specific schema

describe_table

Get table structure (columns, types, constraints)

list_views

List views in a schema

describe_view

Get view definition and columns

list_functions

List functions and procedures

Performance & Analysis

Tool

Description

table_stats

Get table statistics (row count, size, bloat)

list_indexes

List indexes for a table

list_constraints

List constraints (PK, FK, UNIQUE, CHECK)

Database Info

Tool

Description

get_database_info

Get database version and connection info

search_columns

Search for columns by name across all tables

MCP Prompts

Guided workflows that help Claude assist you effectively:

Prompt

Description

explore_database

Comprehensive database exploration and overview

query_builder

Help building efficient queries for a table

performance_analysis

Analyze table performance and suggest optimizations

data_dictionary

Generate documentation for a schema

MCP Resources

Browsable database structure:

Resource URI

Description

postgres://schemas

List all schemas

postgres://schemas/{schema}/tables

Tables in a schema

postgres://schemas/{schema}/tables/{table}

Table details

postgres://database

Database 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

License

MIT

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/JaviMaligno/postgres-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server