Skip to main content
Glama
derricksiawor

PostgreSQL MCP Server

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

-
security - not tested
A
license - permissive license
-
quality - not tested

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

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/derricksiawor/mav-postgresql-mcp-server'

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