PostgreSQL MCP Server

PostgreSQL MCP Server

Provides comprehensive PostgreSQL database access with 36 tools for querying, managing schemas, JSONB operations, and database administration. Includes security features like query validation, rate limiting, SSL/TLS support, and optional write operations.

Category
Visit Server

README

PostgreSQL MCP Server

A comprehensive Model Context Protocol (MCP) server for PostgreSQL database access. Provides 36 tools for querying, managing, and interacting with PostgreSQL databases through the MCP interface.

Features

  • 36 Database Tools: Complete set of read-only and write operations
  • PostgreSQL-Specific Features: Schema support, JSONB operations, extensions, functions, triggers, views, sequences
  • Full SSL/TLS Support: CA certificates, client certificates, configurable TLS versions
  • Security First: Query validation, rate limiting, blocked dangerous operations
  • Connection Pooling: Efficient connection management with configurable limits
  • Audit Logging: Track all database operations

Installation

# Clone or copy to your tools directory
cd /path/to/tools/mav-postgresql-mcp-server

# Install dependencies
npm install

# Build the server
npm run build

Configuration

Copy .env.example to .env and configure your PostgreSQL connection:

cp .env.example .env

Required Settings

Variable Description Default
PG_HOST PostgreSQL server hostname localhost
PG_PORT PostgreSQL server port 5432
PG_USER Database username postgres
PG_PASSWORD Database password -
PG_DATABASE Target database name -
PG_SCHEMA Default schema public

SSL Configuration

Variable Description Options
PG_SSL_MODE SSL connection mode disable, require, verify-ca, verify-full
PG_SSL_REJECT_UNAUTHORIZED Reject self-signed certs true, false
PG_SSL_CA_PATH Path to CA certificate -
PG_SSL_CERT_PATH Path to client certificate -
PG_SSL_KEY_PATH Path to client key -
PG_SSL_MIN_VERSION Minimum TLS version TLSv1.2, TLSv1.3

Security Settings

Variable Description Default
ALLOW_WRITE_OPERATIONS Enable INSERT/UPDATE/DELETE false
CONNECTION_LIMIT Max pool connections 10
QUERY_TIMEOUT Query timeout (ms) 30000
MAX_RESULTS Maximum rows returned 1000

Rate Limiting

Variable Description Default
RATE_LIMIT_PER_MINUTE Queries per minute 60
RATE_LIMIT_PER_HOUR Queries per hour 1000
RATE_LIMIT_CONCURRENT Concurrent queries 10

Usage

With Claude Desktop

Add to your Claude Desktop configuration (~/Library/Application Support/Claude/claude_desktop_config.json on macOS):

{
  "mcpServers": {
    "postgresql": {
      "command": "node",
      "args": ["/path/to/mav-postgresql-mcp-server/build/index.js"],
      "env": {
        "PG_HOST": "localhost",
        "PG_PORT": "5432",
        "PG_USER": "your_user",
        "PG_PASSWORD": "your_password",
        "PG_DATABASE": "your_database",
        "PG_SCHEMA": "public",
        "ALLOW_WRITE_OPERATIONS": "false"
      }
    }
  }
}

With MCP Inspector

npx @anthropic/mcp-inspector node build/index.js

Available Tools

Core Read-Only Tools (7)

Tool Description
query Execute SELECT queries
list_tables List all tables in schema
describe_table Get table structure and columns
database_info Get database version and settings
show_indexes List indexes on a table
explain_query Get query execution plan
show_constraints List table constraints

PostgreSQL-Specific Read-Only Tools (14)

Tool Description
list_schemas List all schemas in database
get_current_schema Get current search path
list_extensions List installed extensions
extension_info Get detailed extension information
list_functions List user-defined functions
list_triggers List triggers on a table
list_views List views in schema
list_sequences List sequences in schema
table_stats Get table statistics
connection_info Get current connection details
database_size Get database/table sizes
jsonb_query Query JSONB columns
jsonb_path_query Execute JSON path queries

Write Operation Tools (15)

Requires ALLOW_WRITE_OPERATIONS=true

Tool Description
insert Insert a single row
update Update rows with conditions
delete Delete rows with conditions
create_table Create a new table
alter_table Modify table structure
drop_table Drop a table
bulk_insert Insert multiple rows
execute_procedure Call stored procedures
add_index Create an index
drop_index Remove an index
rename_table Rename a table
set_search_path Change schema search path
create_schema Create a new schema
drop_schema Drop a schema
jsonb_update Update JSONB fields
vacuum_analyze Optimize table statistics

MCP Resources

The server exposes database schema as MCP resources:

  • pg://database/schema - List all tables and columns
  • pg://database/info - Database information
  • pg://table/{schema}.{table} - Individual table schema

Security Features

Blocked Operations

The server blocks dangerous operations by default:

  • File system operations (COPY FROM/TO, pg_read_file, etc.)
  • Permission modifications (GRANT, REVOKE, ALTER ROLE)
  • Administrative commands (CREATE ROLE, DROP DATABASE, etc.)
  • System catalog modifications

Protected Tables

Access to sensitive system tables is blocked:

  • pg_catalog.pg_authid
  • pg_catalog.pg_shadow
  • pg_catalog.pg_auth_members

Query Validation

  • All identifiers are validated (max 63 characters, safe characters only)
  • Query timeouts prevent long-running operations
  • Rate limiting prevents abuse

Setting Up a Read-Only User

For production use, create a dedicated read-only PostgreSQL user:

# Run as PostgreSQL superuser
psql -U postgres -f setup-readonly-user.sql

Or manually:

-- Create user
CREATE USER mcp_readonly WITH PASSWORD 'secure_password';

-- Grant connect
GRANT CONNECT ON DATABASE your_database TO mcp_readonly;

-- Grant schema usage
GRANT USAGE ON SCHEMA public TO mcp_readonly;

-- Grant read access to all tables
GRANT SELECT ON ALL TABLES IN SCHEMA public TO mcp_readonly;

-- Set default privileges for future tables
ALTER DEFAULT PRIVILEGES IN SCHEMA public
    GRANT SELECT ON TABLES TO mcp_readonly;

Development

# Run in development mode
npm run dev

# Build for production
npm run build

# Type checking
npm run typecheck

Troubleshooting

Connection Issues

  1. Verify PostgreSQL is running: pg_isready -h localhost -p 5432
  2. Check credentials: psql -h localhost -U your_user -d your_database
  3. Enable debug mode: MCP_DEBUG=true

SSL Issues

  1. Verify certificate paths are correct
  2. Check certificate permissions (readable by the user running the server)
  3. Try PG_SSL_MODE=require first, then upgrade to verify-ca or verify-full

Rate Limiting

If you're hitting rate limits:

  1. Increase RATE_LIMIT_PER_MINUTE and RATE_LIMIT_PER_HOUR
  2. Batch operations where possible
  3. Use more specific queries to reduce call volume

License

MIT

Recommended Servers

playwright-mcp

playwright-mcp

A Model Context Protocol server that enables LLMs to interact with web pages through structured accessibility snapshots without requiring vision models or screenshots.

Official
Featured
TypeScript
Magic Component Platform (MCP)

Magic Component Platform (MCP)

An AI-powered tool that generates modern UI components from natural language descriptions, integrating with popular IDEs to streamline UI development workflow.

Official
Featured
Local
TypeScript
Audiense Insights MCP Server

Audiense Insights MCP Server

Enables interaction with Audiense Insights accounts via the Model Context Protocol, facilitating the extraction and analysis of marketing insights and audience data including demographics, behavior, and influencer engagement.

Official
Featured
Local
TypeScript
VeyraX MCP

VeyraX MCP

Single MCP tool to connect all your favorite tools: Gmail, Calendar and 40 more.

Official
Featured
Local
Kagi MCP Server

Kagi MCP Server

An MCP server that integrates Kagi search capabilities with Claude AI, enabling Claude to perform real-time web searches when answering questions that require up-to-date information.

Official
Featured
Python
graphlit-mcp-server

graphlit-mcp-server

The Model Context Protocol (MCP) Server enables integration between MCP clients and the Graphlit service. Ingest anything from Slack to Gmail to podcast feeds, in addition to web crawling, into a Graphlit project - and then retrieve relevant contents from the MCP client.

Official
Featured
TypeScript
E2B

E2B

Using MCP to run code via e2b.

Official
Featured
Neon Database

Neon Database

MCP server for interacting with Neon Management API and databases

Official
Featured
Exa Search

Exa Search

A Model Context Protocol (MCP) server lets AI assistants like Claude use the Exa AI Search API for web searches. This setup allows AI models to get real-time web information in a safe and controlled way.

Official
Featured
Qdrant Server

Qdrant Server

This repository is an example of how to create a MCP server for Qdrant, a vector search engine.

Official
Featured