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
.envfile 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:
.envfiles.confand.inifiles.jsonand.yamlfiles- 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
.envfiles - 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
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file mcp_postgresql_server-1.0.0.tar.gz.
File metadata
- Download URL: mcp_postgresql_server-1.0.0.tar.gz
- Upload date:
- Size: 19.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.7.13
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
a65d11a716c0adc60ac133c843824e134d9ae14e19a95c2386144bbd96675fde
|
|
| MD5 |
799ddb651a3a04358ef25e13408b143f
|
|
| BLAKE2b-256 |
eceaeee43e7d94f55d8b09694ab5c342e7538c1034d30e6f29bdbb641c1147bb
|
File details
Details for the file mcp_postgresql_server-1.0.0-py3-none-any.whl.
File metadata
- Download URL: mcp_postgresql_server-1.0.0-py3-none-any.whl
- Upload date:
- Size: 19.3 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.7.13
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
21f9d7f8260ce2d58106465ffb59bf496400acd722f746a6d9331c45a6b001f4
|
|
| MD5 |
d65e48909a9765068ff98e5bad25944e
|
|
| BLAKE2b-256 |
f9a4bc708e8476e48926af6c0784012cefcbab73b1ca36818773bcb8ec3b4b5c
|