Skip to main content

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.

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

Available Tools

CRUD Operations

  • create_entity: Insert new rows into tables
  • read_entity: Query tables with optional conditions
  • update_entity: Update existing rows based on conditions
  • delete_entity: Remove rows from tables

Schema Operations

  • get_tables: Get list of all tables in the database
  • get_table_schema: Get detailed schema information for a specific table
  • get_database_info: Get database metadata and version information

Available Resources

Database Resources

  • database://tables: List of all tables in the database
  • database://info: Database metadata and version information
  • database://schema/{table_name}: Schema information for specific tables

Quick Start

Prerequisites

  • Python 3.10 or higher
  • PostgreSQL database (version 12 or higher)
  • uv package manager (latest version)

Installation

  1. 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
├── test/                         # Testing related
│   ├── unit/                     # Unit tests
│   ├── integration/              # Integration tests
│   ├── docker/                   # Docker test environment
│   └── docs/                     # Test documentation
├── docs/                         # Project documentation
├── 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

Adding New Tools

  1. Create a new tool definition in src/mcp_postgres_duwenji/tools/
  2. Add the tool handler function
  3. Register the tool in get_crud_tools() and get_crud_handlers()
  4. 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


Download files

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

Source Distribution

mcp_postgres_duwenji-1.1.0.tar.gz (12.5 kB view details)

Uploaded Source

Built Distribution

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

mcp_postgres_duwenji-1.1.0-py3-none-any.whl (17.8 kB view details)

Uploaded Python 3

File details

Details for the file mcp_postgres_duwenji-1.1.0.tar.gz.

File metadata

  • Download URL: mcp_postgres_duwenji-1.1.0.tar.gz
  • Upload date:
  • Size: 12.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for mcp_postgres_duwenji-1.1.0.tar.gz
Algorithm Hash digest
SHA256 e9dbd9ff84b0f94366d7e8a66bcdd9fc131126f0dfd2b734fd5180b5bfa61a4d
MD5 d1c581964326ea3849211fe078939403
BLAKE2b-256 55fda501f52bcfeb6c50e5be454a0b67b551218181e34f7c91a0374d0d7b758f

See more details on using hashes here.

Provenance

The following attestation bundles were made for mcp_postgres_duwenji-1.1.0.tar.gz:

Publisher: publish.yml on duwenji/mcp-postgres

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file mcp_postgres_duwenji-1.1.0-py3-none-any.whl.

File metadata

File hashes

Hashes for mcp_postgres_duwenji-1.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 261e6e43025d5422a6802ff1e250d2afd766d256b4c191ab5558b4b955ed2828
MD5 21935aa794d0c8ac654304962bc3c10d
BLAKE2b-256 efb034ac2fed3ee9be10a3895a26392c486109b342d277694a1ba8c4864a53e9

See more details on using hashes here.

Provenance

The following attestation bundles were made for mcp_postgres_duwenji-1.1.0-py3-none-any.whl:

Publisher: publish.yml on duwenji/mcp-postgres

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

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