MCP server for PostgreSQL database operations
Project description
PostgreSQL MCP Server
A Model Context Protocol (MCP) server for PostgreSQL database operations. This server provides AI assistants with the ability to perform CRUD operations and manage PostgreSQL databases through a standardized interface.
Project Status: ✅ COMPLETED - Fully implemented, tested, and published to PyPI
Features
- Entity CRUD Operations: Create, read, update, and delete entities in PostgreSQL tables
- Dynamic Table Support: Work with any table in your database without pre-configuration
- Secure Connection Management: Environment variable-based configuration with validation
- Parameterized Queries: Protection against SQL injection attacks
- Flexible Querying: Support for complex conditions and result limiting
- Table Management: Create, alter, and drop tables dynamically
- Schema Information: Get detailed table schemas and database metadata
- Comprehensive Testing: Unit tests, integration tests, and Docker test environment
Available Tools
CRUD Operations
create_entity: Insert new rows into tablesread_entity: Query tables with optional conditionsupdate_entity: Update existing rows based on conditionsdelete_entity: Remove rows from tables
Table Management Operations
create_table: Create new tables with specified schemaalter_table: Modify existing table structuresdrop_table: Remove tables from database
Schema Operations
get_tables: Get list of all tables in the databaseget_table_schema: Get detailed schema information for a specific tableget_database_info: Get database metadata and version information
Available Resources
Database Resources
database://tables: List of all tables in the databasedatabase://info: Database metadata and version informationdatabase://schema/{table_name}: Schema information for specific tables
Project Configuration (pyproject.toml)
This project uses the pyproject.toml file for configuration management. This is the latest Python package management standard that provides the following features:
Main Configuration Sections
Project Basic Information:
- Package name:
mcp-postgres-duwenji - Version:
1.2.1 - Required Python version:
>=3.10
Dependency Management:
- Required dependencies: MCP protocol, PostgreSQL connection, configuration management, etc.
- Development dependencies: Testing, linting, formatting tools, etc.
Build System:
- uv build: Fast package building and dependency resolution
- Entry point:
mcp_postgres_duwenjicommand to start the server
Development Tool Configuration:
- Black: Automatic code formatting (88 characters per line)
- Mypy: Strict type checking
- Pytest: Test framework
- Flake8: Code quality checking
Practical Usage
# Install dependencies
uv sync --group dev
# Start server
uv run mcp_postgres_duwenji
# Run tests
uv run pytest
# Code formatting
uv run black src/
# Type checking
uv run mypy src/
Quick Start
Prerequisites
- Python 3.10 or higher
- PostgreSQL database (version 12 or higher)
- uv package manager (latest version)
Installation
-
Install from PyPI:
uvx mcp-postgres-duwenji -
Configure your MCP client (e.g., Claude Desktop): Add the server configuration to your MCP client settings using
uvx:Claude Desktop Configuration Example:
{ "mcpServers": { "postgres-mcp": { "command": "uvx", "args": ["mcp-postgres-duwenji"], "env": { "POSTGRES_HOST": "localhost", "POSTGRES_PORT": "5432", "POSTGRES_DB": "your_database", "POSTGRES_USER": "your_username", "POSTGRES_PASSWORD": "your_password", "POSTGRES_SSL_MODE": "prefer" } } } }
Usage Examples
Once configured, you can use the MCP tools through your AI assistant:
Create a new user:
{
"table_name": "users",
"data": {
"name": "John Doe",
"email": "john@example.com",
"age": 30
}
}
Read users with conditions:
{
"table_name": "users",
"conditions": {
"age": 30
},
"limit": 10
}
Update user information:
{
"table_name": "users",
"conditions": {
"id": 1
},
"updates": {
"email": "newemail@example.com"
}
}
Delete users:
{
"table_name": "users",
"conditions": {
"id": 1
}
}
Development
Project Structure
mcp-postgres/
├── src/
│ └── mcp_postgres_duwenji/ # Main package
│ ├── __init__.py # Package initialization
│ ├── main.py # MCP server entry point
│ ├── config.py # Configuration management
│ ├── database.py # Database connection and operations
│ ├── resources.py # Resource management
│ └── tools/ # MCP tool definitions
│ ├── __init__.py
│ ├── crud_tools.py # CRUD operation tools
│ ├── schema_tools.py # Schema operation tools
│ └── table_tools.py # Table management tools
├── test/ # Testing related
│ ├── unit/ # Unit tests
│ ├── integration/ # Integration tests
│ ├── docker/ # Docker test environment
│ └── docs/ # Test documentation
├── docs/ # Project documentation
│ ├── code-quality-checks-guide.md # Code quality tools guide
│ ├── linting-and-type-checking-guide.md # Linting and type checking guide
│ ├── pypi-publishing-guide.md # PyPI publishing guide
│ └── github/ # GitHub workflows and guides
├── examples/ # Configuration examples
├── scripts/ # Utility scripts
├── memory-bank/ # Project memory bank
├── pyproject.toml # Project configuration and dependencies
├── uv.lock # uv dependency lock file
├── .env.example # Environment variables template
├── README.md # English README
└── README_ja.md # Japanese README
Running the Server
To run the server directly for testing:
uvx mcp-postgres-duwenji
Code Quality Tools
This project uses comprehensive code quality tools:
- Black: Code formatting
- Flake8: Linting and style checking
- MyPy: Static type checking
- Bandit: Security scanning
See docs/code-quality-checks-guide.md and docs/linting-and-type-checking-guide.md for detailed usage instructions.
Adding New Tools
- Create a new tool definition in
src/mcp_postgres_duwenji/tools/ - Add the tool handler function
- Register the tool in the appropriate handler function
- The tool will be automatically available through the MCP interface
Security Considerations
- Always use environment variables for sensitive connection information
- The server uses parameterized queries to prevent SQL injection
- Limit database user permissions to only necessary operations
- Consider using SSL/TLS for database connections in production
License
Apache 2.0
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_postgres_duwenji-1.2.7.tar.gz.
File metadata
- Download URL: mcp_postgres_duwenji-1.2.7.tar.gz
- Upload date:
- Size: 27.8 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
5b9eddddd29d6f2bac34073bcac51384a62ce2fc14baf50fa05be11383804074
|
|
| MD5 |
4aec4e68cd01f1b27666609eaa72b2be
|
|
| BLAKE2b-256 |
0d08586401fc6fe8bf9d3f7132dab16e77b90f76573970c99eb63da91efee9f6
|
Provenance
The following attestation bundles were made for mcp_postgres_duwenji-1.2.7.tar.gz:
Publisher:
publish.yml on duwenji/mcp-postgres
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
mcp_postgres_duwenji-1.2.7.tar.gz -
Subject digest:
5b9eddddd29d6f2bac34073bcac51384a62ce2fc14baf50fa05be11383804074 - Sigstore transparency entry: 660839034
- Sigstore integration time:
-
Permalink:
duwenji/mcp-postgres@4d82edaa3e0d6134e79a888ea6d446ff1eded98a -
Branch / Tag:
refs/heads/main - Owner: https://github.com/duwenji
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@4d82edaa3e0d6134e79a888ea6d446ff1eded98a -
Trigger Event:
workflow_dispatch
-
Statement type:
File details
Details for the file mcp_postgres_duwenji-1.2.7-py3-none-any.whl.
File metadata
- Download URL: mcp_postgres_duwenji-1.2.7-py3-none-any.whl
- Upload date:
- Size: 36.4 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
5cf718e1f6b8228e237a980a809628c24ece0775b591a2956c0c815904567a9e
|
|
| MD5 |
6bc3b2696c441719dce49bd2fe49f2d3
|
|
| BLAKE2b-256 |
9fc87838ecb6bab6cf74eaa8b57eaf72778e493350751f0a25f845a257054eda
|
Provenance
The following attestation bundles were made for mcp_postgres_duwenji-1.2.7-py3-none-any.whl:
Publisher:
publish.yml on duwenji/mcp-postgres
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
mcp_postgres_duwenji-1.2.7-py3-none-any.whl -
Subject digest:
5cf718e1f6b8228e237a980a809628c24ece0775b591a2956c0c815904567a9e - Sigstore transparency entry: 660839039
- Sigstore integration time:
-
Permalink:
duwenji/mcp-postgres@4d82edaa3e0d6134e79a888ea6d446ff1eded98a -
Branch / Tag:
refs/heads/main - Owner: https://github.com/duwenji
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@4d82edaa3e0d6134e79a888ea6d446ff1eded98a -
Trigger Event:
workflow_dispatch
-
Statement type: