Skip to main content

A secure, read-only PostgreSQL Model Context Protocol (MCP) server for AI assistant integration with automatic database discovery and connection management

Project description

PostgreSQL MCP Server

A secure, read-only PostgreSQL Model Context Protocol (MCP) server for AI assistant integration with automatic database discovery and connection management.

What It Does

This tool provides two main components:

  • Query Executor (execute_query.py): Interactive PostgreSQL query execution with support for direct queries, file input, and interactive mode
  • MCP Server (mcp_postgresql_server.py): AI assistant integration that allows natural language database interactions through Claude Desktop and other MCP clients

Key Features

  • Automatic Database Discovery: Scans project files for database configurations and presents options for selection
  • Read-Only Safety: Blocks write operations by default (configurable)
  • Interactive Configuration: Guides users through database setup with automatic .env file management
  • Connection Pooling: Efficient PostgreSQL connection management
  • AI Integration: Works seamlessly with Claude Desktop and Cursor IDE

Quick Start

Prerequisites: Ensure you have uv installed.

Using uvx (Recommended)

Run directly without installation:

# MCP Server for AI integration
uvx mcp-postgresql-server

# Query executor
uvx --from mcp-postgresql-server execute-query "SELECT version()"

Configuration

Set your database connection:

export MCP_DATABASE="postgres://username:password@hostname:port/database"

Or create a .env file:

MCP_DATABASE=postgres://username:password@hostname:port/database
MCP_READ_ONLY=true

Usage Examples

Query Executor

Using uvx (recommended):

# Interactive mode
uvx --from mcp-postgresql-server execute-query

# Direct query
uvx --from mcp-postgresql-server execute-query "SELECT COUNT(*) FROM users"

# From file
uvx --from mcp-postgresql-server execute-query --file queries.sql

Using Python directly:

# Interactive mode
python3 execute_query.py

# Direct query
python3 execute_query.py "SELECT COUNT(*) FROM users"

# From file
python3 execute_query.py --file queries.sql

MCP Server with Claude Code (globally)

Add to ~/.claude.json:

{
  "mcpServers": {
    "mcp-postgres": {
      "command": "uvx",
      "args": ["mcp-postgresql-server"],
      "env": {
        "CLIENT_CWD": "${PWD}"
      }
    }
  }
}

Alternative: Setup from GitHub directly:

{
  "mcpServers": {
    "mcp-postgres": {
      "command": "uvx",
      "args": ["--from", "https://github.com/sebcbi1/mcp-postgresql-server.git", "mcp-postgresql-server"],
      "env": {
        "CLIENT_CWD": "${PWD}"
      }
    }
  }
}

Then ask Claude:

  • "Show me all tables in the database"
  • "Execute SELECT COUNT(*) FROM properties"
  • "Help me write a query to find recent orders"

Cursor IDE Integration

Create mcp.json in your project root:

{
  "mcpServers": {
    "mcp-postgres": {
      "command": "uvx",
      "args": ["mcp-postgresql-server"],
      "env": {
        "CLIENT_CWD": "."
      }
    }
  }
}

Alternative: Setup from GitHub directly:

{
  "mcpServers": {
    "mcp-postgres": {
      "command": "uvx",
      "args": ["--from", "https://github.com/sebcbi1/mcp-postgresql-server.git", "mcp-postgresql-server"],
      "env": {
        "CLIENT_CWD": "."
      }
    }
  }
}

Configuration Discovery

The server automatically discovers database configurations from:

  • .env files
  • .conf and .ini files
  • .json and .yaml files
  • Individual parameter files (db.host, db.user, etc.)

When multiple configurations are found, it presents an interactive selection menu. Saved configurations are stored in a .env file for future use using MCP_DATABASE variable.

Environment Variables

Variable Description Default
MCP_DATABASE PostgreSQL connection URI Required
MCP_READ_ONLY Enable read-only mode true
SENTRY_DSN Error tracking (optional) None
CLIENT_CWD path of the client working directory .

Security

  • Read-only by default: Blocks INSERT, UPDATE, CREATE, ALTER, DROP operations
  • Connection validation: Validates all database connections before use
  • Credential protection: Supports environment variables and .env files
  • Error handling: Comprehensive error reporting without exposing sensitive data

Common Issues

Connection errors: Verify MCP_DATABASE format: postgres://user:password@host:port/database

Permission issues: Ensure database user has appropriate SELECT permissions

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

mcp_postgresql_server-1.0.0.tar.gz (19.1 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

mcp_postgresql_server-1.0.0-py3-none-any.whl (19.3 kB view details)

Uploaded Python 3

File details

Details for the file mcp_postgresql_server-1.0.0.tar.gz.

File metadata

File hashes

Hashes for mcp_postgresql_server-1.0.0.tar.gz
Algorithm Hash digest
SHA256 a65d11a716c0adc60ac133c843824e134d9ae14e19a95c2386144bbd96675fde
MD5 799ddb651a3a04358ef25e13408b143f
BLAKE2b-256 eceaeee43e7d94f55d8b09694ab5c342e7538c1034d30e6f29bdbb641c1147bb

See more details on using hashes here.

File details

Details for the file mcp_postgresql_server-1.0.0-py3-none-any.whl.

File metadata

File hashes

Hashes for mcp_postgresql_server-1.0.0-py3-none-any.whl
Algorithm Hash digest
SHA256 21f9d7f8260ce2d58106465ffb59bf496400acd722f746a6d9331c45a6b001f4
MD5 d65e48909a9765068ff98e5bad25944e
BLAKE2b-256 f9a4bc708e8476e48926af6c0784012cefcbab73b1ca36818773bcb8ec3b4b5c

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page