PostgreSQL MCP
Transforms PostgreSQL databases from "I have tables and I don't know what they do" into "I understand the entire database structure, relationships, and best practices"
PostgreSQL MCP Server
Transforms PostgreSQL databases from "I have tables and I don't know what they do" into "I understand the entire database structure, relationships, and best practices"
Overview
This is an MCP (Model Context Protocol) server that provides intelligent analysis, documentation, and complete CRUD operations for PostgreSQL databases. It combines deterministic schema extraction with AI-powered reasoning and secure data manipulation operations to help users and AI agents understand and interact with complex database structures.
Performance Optimized & Extended: Started at 38 tools, optimized to 19 tools (~50% reduction), then strategically extended to 27 tools with high-value query optimization, data management, transactions, and monitoring capabilities.
Key Features
- Comprehensive Coverage: 27 carefully designed tools covering all PostgreSQL operations
- Schema Extraction: Automatically extract tables, columns, relationships, and constraints
- Intelligent Analysis: Detect junction tables, implicit relationships, and suggest optimal joins
- AI-Powered Insights: Leverage Ollama/LLM to generate business explanations and recommendations
- Complete CRUD Operations: Unified tools for all data manipulation with SQL injection prevention
- Query Optimization: Execution plan analysis, combined index analysis (suggest + unused detection)
- Data Management: Import/export (CSV/JSON/SQL), full-text search
- Transaction Support: Atomic multi-operation transactions with rollback
- Monitoring: Database statistics, cache metrics, slow queries, connection tracking
- Multiple Output Formats:
- Mermaid ER diagrams (with SVG rendering)
- Mermaid relationship flowcharts (with SVG rendering)
- Comprehensive Markdown documentation
- Visual diagram files (SVG, PNG, PDF)
- Query Assistance: Smart join type recommendations (INNER vs LEFT)
- Modular Architecture: Clean, extensible design organized by capability
- Diagram Rendering: Auto-generate visual database structure diagrams
- Security: Parameterized queries, input validation, SQL injection prevention
Tool Evolution
Phase 1-2 (Core): 19 tools - Foundation CRUD + Schema + Analysis
Phase 3-6 (Extended): +8 tools - Query optimization, data management, transactions, monitoring
Result: 27 highly strategic tools that cover real-world PostgreSQL operations
Project Structure
PostgreSQL-MCP/
├── src/
│ ├── __init__.py # Package initialization
│ ├── config.py # Configuration management (DB, Ollama, App)
│ ├── database/
│ │ ├── __init__.py
│ │ └── connection.py # PostgreSQL connection utilities
│ ├── schema/
│ │ ├── __init__.py
│ │ └── extractor.py # Schema extraction logic
│ ├── analysis/
│ │ ├── __init__.py
│ │ └── detector.py # Junction table & relationship detection
│ ├── generation/
│ │ ├── __init__.py
│ │ ├── mermaid_gen.py # ER diagram generation
│ │ ├── markdown_gen.py # Documentation generation
│ │ └── diagram_renderer.py # SVG diagram rendering
│ ├── llm/
│ │ ├── __init__.py
│ │ └── ollama_client.py # Ollama/LLM integration
│ ├── crud/
│ │ ├── __init__.py # CRUD operations export
│ │ ├── crud_manager.py # Core CRUD operations (20 operations)
│ │ └── crud_validator.py # Input validation & security
│ ├── schema_mod/
│ │ ├── __init__.py # Schema modification export
│ │ ├── mod_manager.py # Schema alteration operations
│ │ └── mod_validator.py # Schema modification validation
│ ├── query/ # NEW - Phase 3A
│ │ ├── __init__.py
│ │ └── query_optimizer.py # Query analysis & optimization
│ ├── data/ # NEW - Phase 4A & 4B
│ │ ├── __init__.py
│ │ └── data_manager.py # Import/export & data quality
│ ├── transaction/ # NEW - Phase 5A
│ │ ├── __init__.py
│ │ └── transaction_manager.py # Transactions & backups
│ └── monitoring/ # NEW - Phase 6A
│ ├── __init__.py
│ └── monitor.py # Database statistics & monitoring
├── postgresql_server.py # MCP server with all 27 tools exposed
├── client.py # MCP client for testing
├── main.py # Entry point placeholder
├── pyproject.toml # Python project configuration
├── .env # Environment variables (not in repo)
├── PHASE3-6_RECOMMENDATIONS.md # Design rationale for new tools
├── PHASE3-6_IMPLEMENTATION_SUMMARY.md # Implementation details
├── PHASE3-6_QUICK_REFERENCE.md # Quick reference for new tools
└── README.md # This file
Module Breakdown
config.py
Centralized configuration for:
- DatabaseConfig: PostgreSQL connection parameters
- OllamaConfig: LLM (Ollama) settings
- AppConfig: Application-level settings (logging, debug mode)
src/database/connection.py
get_connection(): Create PostgreSQL connections with pooling- Connection error handling and timeout management
src/schema/extractor.py
extract_schema(): Full schema extractionget_table_info(): Single table detailsget_tables_list(): List all tables- Handles all information_schema queries
src/analysis/detector.py
detect_junction_tables(): Find many-to-many association tablessuggest_joins(): Recommend JOIN types based on nullabilitydetect_implicit_relationships(): Find potential undeclared FKs (*_id columns)
src/crud/crud_manager.py
Core CRUD operations (20 total):
- Create: Insert records, batch operations, create tables/views/indexes
- Read: Query data, get records with filters, count, distinct values, pagination
- Update: Update records, batch updates, rename tables/columns
- Delete: Delete records, truncate, drop tables
- All operations use parameterized queries to prevent SQL injection
src/crud/crud_validator.py
Security and validation layer:
validate_table_name(): Identifier format and reserved keyword checkingvalidate_column_name(): Column name validationvalidate_column_type(): PostgreSQL data type validationvalidate_where_clause(): SQL injection pattern detectionvalidate_values_dict(): Data structure validationvalidate_primary_key(): Primary key constraint validationvalidate_foreign_key(): Foreign key relationship validation
src/generation/mermaid_gen.py
generate_mermaid_erd(): Entity-Relationship Diagram in Mermaid syntaxgenerate_mermaid_flowchart(): Relationship flowchart visualization- Supports table relationships, constraints, and cardinality
src/generation/diagram_renderer.py
render_database_diagrams(): Convert Mermaid diagrams to visual formats- SVG rendering (recommended for API usage)
- PNG/PDF support (requires mermaid-cli)
src/generation/markdown_gen.py
generate_markdown(): Full database documentation in Markdowngenerate_table_documentation(): Single table documentation- Includes schema details, relationships, and constraints
src/llm/ollama_client.py
OllamaAnalyzer: Interface to Ollama LLM for AI analysisexplain_schema(): Get business-level database analysisget_available_models(): List deployed LLM modelsis_available(): Check Ollama service status
src/query/query_optimizer.py (NEW - Phase 3A)
Query performance analysis and optimization:
explain_query(): Get EXPLAIN/EXPLAIN ANALYZE output with execution plansanalyze_indexes(): Combined index analysis — suggest missing indexes or find unused ones (mode="suggest"|"unused"|"all")
src/data/data_manager.py (NEW - Phase 4A & 4B)
Data import/export and quality tools:
export_data(): Export to CSV/JSON/SQL formats with filteringimport_data(): Import from CSV/JSON with column mapping and conflict resolutionsearch_data(): Full-text search with ILIKE, LIKE, or fuzzy matching
src/transaction/transaction_manager.py (NEW - Phase 5A)
Transaction management and safety:
execute_transaction(): Atomic multi-operation transactions with rollbackbackup_table(): Quick table backup with indexes and restore SQL
src/monitoring/monitor.py (NEW - Phase 6A)
Database monitoring and statistics:
get_database_stats(): Comprehensive monitoring (size, connections, cache, slow queries, locks)
Getting Started
Prerequisites
- Python 3.11+
- PostgreSQL database
- Ollama server (optional, for AI explanations)
uvpackage manager
Installation
-
Clone repository and install dependencies:
cd PostgreSQL-MCP uv sync -
Set environment variables (create
.env):# PostgreSQL DB_HOST=localhost DB_PORT=5432 DB_NAME=your_database DB_USER=postgres DB_PASSWORD=your_password # Ollama/LLM OLLAMA_BASE_URL=http://192.168.1.143:11434 OLLAMA_MODEL=deepseek-r1:14b # App DEBUG=False
Running the Server
# Start MCP server
uv run postgresql_server.py
Available MCP Tools (27 Total)
Category 1: Analysis & Schema Tools (5 tools)
1. analyze_database()
Comprehensive schema analysis without LLM.
- Full schema structure (tables, columns, keys, data types)
- Junction tables detected
- Implicit relationships discovered
- Join suggestions (INNER vs LEFT)
- Mermaid ER diagram
- Mermaid relationship flowchart
- Comprehensive Markdown documentation
2. explain_database()
AI-powered database analysis using Ollama LLM.
- Business explanation of database purpose
- Detected relationships and join recommendations
- Improved Mermaid ERD with AI insights
- Database quality recommendations
3. get_table_details(table_name: str)
Detailed analysis of a specific table.
- Table structure and relationships
- Column information and constraints
- Table-specific Markdown documentation
4. get_database_info(info_type: str = "tables")
NEW: Unified info retrieval tool - Consolidates list_tables, check_ollama_status
info_type="tables": List all tables with countinfo_type="ollama": Check Ollama/LLM service status and available modelsinfo_type="summary": Quick database statistics
5. render_database_diagrams(output_format: str = "svg")
Generate visual database structure diagrams.
- ER Diagram (erd_svg.svg)
- Flowchart (flowchart_svg.svg)
- SVG/PNG/PDF files in
diagrams/directory
Category 2: CRUD Create Operations (4 tools)
6. crud_insert(table_name: str, data: Dict | List[Dict])
NEW: Smart insert - Consolidates single and batch inserts
- Single insert: Pass Dict →
{"name": "John", "age": 30} - Batch insert: Pass List[Dict] →
[{"name": "John"}, {"name": "Jane"}] - Automatic detection of single vs batch mode
- Parameterized queries for SQL injection prevention
7. crud_create_table(table_name, columns, primary_key)
Create a new table with columns and constraints.
- Define columns with types:
{"name": "id", "type": "INTEGER", "nullable": False} - Optional primary key specification
- Full constraint support
8. crud_create_view(view_name, select_query, replace_if_exists)
Create database views from SELECT queries.
- Define virtual tables
- Optional view replacement
9. crud_create_index(index_name, table_name, columns, unique)
Create single or composite indexes.
- Single column:
columns=["email"] - Composite:
columns=["last_name", "first_name"] - Optional UNIQUE constraint
Category 3: CRUD Read Operations (2 tools)
10. crud_query(query, params, limit, offset)
NEW: Raw SQL query execution - For complex queries with JOINs and aggregations
- Execute any SELECT statement
- Parameterized values: Use
%splaceholders - Pagination support with limit/offset
- Example:
query="SELECT * FROM users WHERE age > %s", params=[30]
11. crud_get(table_name, mode, where_clause, where_params, options)
NEW: Unified high-level read - Consolidates 4 read operations
mode="records": Get filtered records (replaces crud_get_records)mode="count": Count records (replaces crud_get_record_count)mode="distinct": Get distinct values (replaces crud_distinct_values)mode="paginate": Paginated results with metadata (replaces crud_paginate_data)- Full WHERE clause, ordering, and filter support
Category 4: CRUD Update Operations (2 tools)
12. crud_update(table_name, values, where_clause, where_params, id_column, record_id)
NEW: Unified update - Consolidates single, batch, and column updates
- Single record: Provide
record_id+id_column - Batch update: Provide
where_clause+where_params - Column update: Single key-value in
valuesdict - Parameterized queries for security
13. crud_rename(object_type, old_name, new_name, table_name)
NEW: Rename anything - Consolidates table and column rename
object_type="table": Rename tableobject_type="column": Rename column (requirestable_name)- Safe renaming with validation
Category 5: CRUD Delete Operations (1 tool)
14. crud_delete(table_name, mode, where_clause, where_params, id_column, record_id, cascade)
NEW: Unified deletion - Consolidates 4 delete operations
mode="records": Delete specific records (single or batch)- Single: Provide
record_id+id_column - Batch: Provide
where_clause+where_params
- Single: Provide
mode="truncate": Clear all data (fast, resets sequences)mode="drop": Drop entire table (WARNING: destroys structure)- Optional
cascadefor dependent objects
Category 6: Schema Modification (5 tools)
15. mod_column(table_name, action, column_name, column_spec, cascade)
NEW: Unified column management - Consolidates 4 column operations
action="add": Add new column →column_spec={"name": "status", "type": "VARCHAR(50)"}action="modify_type": Change data type →column_spec={"new_type": "TEXT"}action="drop": Remove columnaction="set_nullable": Toggle NULL constraint →column_spec={"is_nullable": True}
16. mod_index(action, index_name, table_name, cascade)
NEW: Index management - Consolidates list and drop operations
action="list": List all indexes (optionally filtered by table)action="drop": Drop index with optional cascade
17. mod_constraint(action, table_name, constraint_name, cascade)
NEW: Constraint management - Consolidates list and drop operations
action="list": List all constraints (PK, FK, unique, check)action="drop": Drop constraint with optional cascade
18. mod_add_constraint(constraint_type, table_name, spec)
NEW: Add constraints - Consolidates primary key and foreign key addition
constraint_type="primary_key"+spec={"columns": ["id"]}constraint_type="foreign_key"+spec={"columns": ["user_id"], "ref_table": "users", "ref_columns": ["id"], "on_delete": "CASCADE"}
19. mod_view(action, view_name, cascade)
NEW: View management - Consolidates 3 view operations
action="list": List all viewsaction="get": Get view SQL definitionaction="drop": Drop view with optional cascade
Category 7: Phase 3-6 Extended Tools (8 tools)
20. query_explain(query, analyze, format)
Get EXPLAIN / EXPLAIN ANALYZE output for any SQL query.
analyze=False: Show estimated plan onlyanalyze=True: Run query and show actual row counts and timingsformat:"text"(default) or"json"
21. query_analyze_indexes(mode, table_name, min_size_mb)
Combined index analysis — suggest missing indexes or detect unused ones.
mode="suggest": Recommend indexes for FK columns and large tables (optionally scoped totable_name)mode="unused": Find indexes with zero/low scan counts abovemin_size_mbmode="all": Run both analyses and return a combined report
22. data_export(table_name, format, where_clause, where_params, columns, limit)
Export table data to CSV, JSON, or SQL INSERT format.
- Supports column selection, WHERE filtering, and row limits
- JSON output includes schema metadata
23. data_import(table_name, data, format, column_mapping, conflict_action)
Import data from CSV or JSON into a table.
conflict_action:"error"|"ignore"|"update"column_mapping: Rename incoming fields to match table columns
24. data_search(table_name, search_term, columns, search_type, limit)
Full-text search across specified columns.
search_type:"ilike"(case-insensitive),"like"(case-sensitive),"fuzzy"(similarity)- Searches all text columns when
columnsis omitted
25. transaction_execute(operations, rollback_on_error)
Run multiple SQL operations atomically in a single transaction.
- Each operation:
{"sql": "...", "params": [...]} - Auto-rollback on any failure when
rollback_on_error=True
26. transaction_backup_table(table_name, backup_name, include_indexes)
Create a quick snapshot backup of a table.
- Copies data and optionally recreates indexes on the backup
- Returns restore SQL to recover or diff against original
27. monitoring_database_stats(stat_type)
Comprehensive database health and performance monitoring.
stat_type:"summary"|"size"|"connections"|"cache_hit_ratio"|"slow_queries"|"locks"|"all"
Use OLLMCP client for locally testing with ollama providers
Security Features (All Operations):
- Parameterized queries (prevents SQL injection)
- Input validation (table/column name validation)
- Constraint checking (validates data types and constraints)
- Standardized response format with status and duration
🤝 Contributing
This project is OpenSource. Contributions are welcome
Related Servers
Claude Conversation Memory System
Provides searchable local storage for Claude conversation history, enabling context retrieval during sessions.
LoL Data MCP Server
Provides real-time, structured access to League of Legends game data, including champions, items, abilities, game mechanics, and patch information.
MySQL MCP Server
Provides tools for AI assistants to interact with a MySQL database.
Advanced Memory Bank MCP
An intelligent memory management server with 14 optimized tools. It provides AI-powered summaries, a clean interface, and supports an optional PostgreSQL database with pgvector.
Trino MCP Server
Securely interact with Trino databases to list tables, read data, and execute SQL queries.
Turso Cloud
Integrate with Turso databases for LLMs, featuring a two-level authentication system for secure operations.
VictoriaMetrics
A server for writing and querying time series data using the VictoriaMetrics API.
Supabase MCP Server
A server for querying and managing data in a Supabase database.
MySQL
A server for managing MySQL databases.
DuckDB Knowledge Graph Memory
An MCP memory server that uses a DuckDB backend for persistent knowledge graph storage.