Skip to main content
Glama

PostgreSQL MCP Server

by compilotbv
README.md6.68 kB
# PostgreSQL MCP Server Model Context Protocol server for PostgreSQL with HTTP/SSE transport for remote deployment. Built with Python, FastAPI, and Docker for Elestio or any cloud platform. ## Features - **HTTP/SSE Transport**: Remote access via HTTPS - **API Key Authentication**: Secure access control - **Query Execution**: Execute SELECT queries with natural language - **Schema Management**: Create, alter, and drop tables and indexes - **Data Manipulation**: Insert, update, and delete data - **User Management**: Create users and manage permissions - **Database Maintenance**: VACUUM, backups, and connection management - **Secure**: Read-only mode, connection pooling, and query timeouts ## Quick Start ### 1. Build the Docker Image ```bash docker build -t postgresql-mcp-server . ``` ### 2. Configure Environment Generate API key: ```bash python3 -c "import secrets; print(secrets.token_urlsafe(32))" ``` Copy `.env.example` to `.env` and update: ```bash cp .env.example .env # Edit .env with your PostgreSQL and API key ``` ### 3. Run with Docker Compose ```bash docker-compose up -d ``` Server will be available at `http://localhost:3000` ### 4. Configure Cursor IDE Add to Cursor MCP settings: ```json { "mcpServers": { "postgresql": { "url": "https://your-server.com:3000", "headers": { "Authorization": "Bearer your_api_key" } } } } ``` See [ELESTIO_DEPLOY.md](ELESTIO_DEPLOY.md) for deployment guide. ## Available Tools ### Query Tools - `execute_query` - Run SELECT queries - `execute_explain` - Get query execution plans - `list_databases` - List all databases - `list_tables` - List tables in schema - `list_columns` - Show column information - `get_table_info` - Get detailed table metadata - `get_database_size` - Get database and table sizes ### Schema Management (DDL) - `create_table` - Create new tables - `drop_table` - Remove tables - `alter_table` - Modify table structure - `create_index` - Create indexes - `drop_index` - Remove indexes - `get_table_ddl` - Generate CREATE TABLE statements ### Data Operations (DML) - `insert_data` - Insert single row - `bulk_insert` - Insert multiple rows - `update_data` - Update rows - `delete_data` - Delete rows ### User Management (DCL) - `list_users` - List database users - `create_user` - Create new users - `grant_permissions` - Grant privileges - `revoke_permissions` - Revoke privileges - `list_permissions` - Show user permissions ### Maintenance - `vacuum_analyze` - Run VACUUM ANALYZE - `backup_database` - Create pg_dump backup - `restore_database` - Restore from backup - `kill_connections` - Terminate connections - `get_active_connections` - Show active connections - `test_connection` - Test database connection ## Usage Examples Once configured in Cursor, interact with your database naturally: ``` "Show me all tables in the database" "What's the structure of the users table?" "Find the top 10 customers by order count" "Create a products table with id, name, and price columns" "Insert a new user with email test@example.com" "Show me all database users and their permissions" ``` ## Configuration Options Environment variables: - `POSTGRES_HOST` - Database host (default: localhost) - `POSTGRES_PORT` - Database port (default: 5432) - `POSTGRES_DB` - Database name - `POSTGRES_USER` - Database user - `POSTGRES_PASSWORD` - Database password - `POSTGRES_READONLY` - Read-only mode (default: false) - `POSTGRES_SSLMODE` - SSL mode (default: prefer) - `POSTGRES_POOL_MIN` - Min connections (default: 1) - `POSTGRES_POOL_MAX` - Max connections (default: 10) - `QUERY_TIMEOUT` - Query timeout in seconds (default: 30) ## Security Best Practices 1. **Use environment variables** for credentials, never hardcode 2. **Enable read-only mode** for exploration: `POSTGRES_READONLY=true` 3. **Create dedicated users** with minimal required privileges 4. **Use SSL connections** for production: `POSTGRES_SSLMODE=require` 5. **Set query timeouts** to prevent long-running queries 6. **Limit connection pools** based on your database capacity ## Deployment Options ### Option 1: Using Docker Compose (Recommended) Edit `.env` with your PostgreSQL credentials: ```bash docker-compose up -d ``` ### Option 2: Direct Docker Run ```bash docker run -i --rm \ -e POSTGRES_HOST=your_host \ -e POSTGRES_PORT=5432 \ -e POSTGRES_DB=your_db \ -e POSTGRES_USER=your_user \ -e POSTGRES_PASSWORD=your_password \ postgresql-mcp-server ``` ## Project Structure ``` mcpg/ ├── src/postgresql_mcp_server/ │ ├── __init__.py │ ├── server.py # Main MCP server │ ├── db_manager.py # Connection management │ ├── query_executor.py # Query execution │ ├── schema_manager.py # DDL operations │ ├── data_manager.py # DML operations │ ├── user_manager.py # User management │ └── maintenance_manager.py # Maintenance tools ├── Dockerfile ├── docker-compose.yml ├── requirements.txt ├── .env.example ├── cursor-mcp-config.json ├── CURSOR_SETUP.md └── README.md ``` ## Troubleshooting ### Connection Issues 1. Verify PostgreSQL is accessible: ```bash docker run -it --rm postgres:16-alpine psql -h host.docker.internal -U user -d db ``` 2. Check Docker network settings for container-to-container communication 3. Review Cursor logs for MCP errors ### Permission Errors - Verify database user has required privileges - Check PostgreSQL pg_hba.conf for access rules - Use `test_connection` tool to diagnose ### Docker Issues - Ensure Docker daemon is running - Check for port conflicts (5432) - Verify image is built: `docker images | grep postgresql-mcp-server` ## Development ### Requirements - Python 3.11+ - PostgreSQL 12+ - Docker 20.10+ ### Local Development ```bash # Install dependencies pip install -r requirements.txt # Set environment variables export POSTGRES_HOST=localhost export POSTGRES_PORT=5432 # ... other vars # Run directly python -m src.postgresql_mcp_server.server ``` ## License MIT License - see LICENSE file for details ## Contributing Contributions welcome! Please open an issue or PR. ## Support For issues and questions: - Check [CURSOR_SETUP.md](CURSOR_SETUP.md) for setup help - Review [Troubleshooting](#troubleshooting) section - Open a GitHub issue ## Additional Documentation - [Cursor Setup Guide](CURSOR_SETUP.md) - Detailed Cursor IDE integration - [MCP Protocol](https://modelcontextprotocol.io/) - MCP specification - [PostgreSQL Docs](https://www.postgresql.org/docs/) - PostgreSQL documentation

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/compilotbv/mcpg'

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