Skip to main content

Add your description here

Project description

MCP PostgreSQL Operations Server

A professional MCP server for PostgreSQL database server operations, monitoring, and management. Provides advanced performance analysis capabilities using pg_stat_statements and pg_stat_monitor extensions.

Features

  • PostgreSQL Monitoring: Performance analysis based on pg_stat_statements and pg_stat_monitor
  • Structure Exploration: Database, table, and user listing
  • Performance Analysis: Slow query identification and index usage analysis
  • Capacity Management: Database and table size analysis
  • Configuration Retrieval: PostgreSQL configuration parameter verification
  • Safe Read-Only: All operations are read-only and safe

Quick start

  1. Environment Setup
# Check and modify .env file
cp .env.example .env
# Configure PostgreSQL connection information:
# POSTGRES_HOST=host.docker.internal
# POSTGRES_PORT=5432
# POSTGRES_USER=postgres
# POSTGRES_PASSWORD=your-password
# POSTGRES_DB=postgres
  1. Install Dependencies
uv venv --python 3.11 --seed
uv sync
  1. Run Server
# Development & Testing (recommended)
./scripts/run-mcp-inspector-local.sh

# Direct execution for debugging
python -m src.mcp_postgresql_ops.mcp_main --log-level DEBUG

Available Tools

📊 Server Information & Status

  • get_server_info - PostgreSQL server information and extension status
  • get_active_connections - Current active connections and session information
  • get_postgresql_config - PostgreSQL configuration parameters with keyword search capability

🗄️ Structure Exploration

  • get_database_list - All database list and size information
  • get_table_list - Table list and size information
  • get_user_list - Database user list and permissions

⚡ Performance Monitoring

  • get_pg_stat_statements_top_queries - Slow query analysis based on performance statistics
  • get_pg_stat_monitor_recent_queries - Real-time query monitoring
  • get_index_usage_stats - Index usage rate and efficiency analysis

💾 Capacity Management

  • get_database_size_info - Database capacity analysis
  • get_table_size_info - Table and index size analysis
  • get_vacuum_analyze_stats - VACUUM/ANALYZE status and history

Usage Examples

Claude Desktop Integration

Add to your Claude Desktop configuration file:

{
  "mcpServers": {
    "postgresql-ops": {
      "command": "uv",
      "args": ["run", "python", "-m", "src.mcp_postgresql_ops.mcp_main"],
      "cwd": "/path/to/MCP-PostgreSQL-Ops",
      "env": {
        "POSTGRES_HOST": "host.docker.internal",
        "POSTGRES_PORT": "5432",
        "POSTGRES_USER": "postgres",
        "POSTGRES_PASSWORD": "your-password",
        "POSTGRES_DB": "postgres"
      }
    }
  }
}

Command Line Usage

# HTTP mode for testing
python -m src.mcp_postgresql_ops.mcp_main \
  --type streamable-http \
  --host 127.0.0.1 \
  --port 8080 \
  --log-level DEBUG

Configuration Search Examples

The get_postgresql_config tool supports flexible parameter searching:

# Search for specific parameter
"Show the shared_buffers configuration"

# Search by keyword for related parameters
"Find all memory-related configuration settings"
"Show logging configuration parameters" 
"Display connection-related settings"
"Find all timeout configurations"

# Browse all configurations
"Show all PostgreSQL configuration parameters"

Environment Variables

Variable Description Default Example
MCP_LOG_LEVEL Logging level INFO DEBUG
FASTMCP_TYPE Transport type stdio streamable-http
FASTMCP_HOST HTTP host address 127.0.0.1 0.0.0.0
FASTMCP_PORT HTTP port number 8080 9090
POSTGRES_HOST PostgreSQL host localhost host.docker.internal
POSTGRES_PORT PostgreSQL port 5432 5432
POSTGRES_USER PostgreSQL user postgres your-user
POSTGRES_PASSWORD PostgreSQL password `` your-password
POSTGRES_DB PostgreSQL database postgres your-db

Prerequisites

Required PostgreSQL Extensions

For full functionality, your PostgreSQL instance should have these extensions installed:

-- Query performance statistics (required)
CREATE EXTENSION IF NOT EXISTS pg_stat_statements;

-- Advanced monitoring (optional)
CREATE EXTENSION IF NOT EXISTS pg_stat_monitor;

Minimum Requirements

  • PostgreSQL 12+ (tested with PostgreSQL 16)
  • Python 3.11
  • Network access to PostgreSQL server
  • Read permissions on system catalogs

Sample Prompts

🔍 Server Health Check

  • "Check PostgreSQL server status"
  • "Verify if extensions are installed"
  • "Show current active connection count"

📊 Performance Analysis

  • "Show top 20 slowest queries"
  • "Find unused indexes"
  • "Analyze recent query activity"

💾 Capacity Management

  • "Check database sizes"
  • "Find largest tables"
  • "Show tables that need VACUUM"

Example Queries

This section provides comprehensive usage examples for all available tools with their parameters.

📖 View Complete Example Queries →

Quick Examples

Server Status & Configuration

# Check server info and extensions
"Check PostgreSQL server version and connection status"

# Find specific configuration
"Show PostgreSQL configuration parameter for shared_buffers: get_postgresql_config(config_name='shared_buffers')"

# Search configurations by keyword
"Find all memory-related configuration settings: get_postgresql_config(filter_text='memory')"

Performance Monitoring

# Analyze slow queries
"Show top 10 slowest queries: get_pg_stat_statements_top_queries(limit=10)"

# Multi-database performance analysis
"Analyze slow queries in specific database: get_pg_stat_statements_top_queries(limit=20, database_name='production')"

# Index usage analysis
"Check index efficiency in specific database: get_index_usage_stats(database_name='production')"

Capacity & Structure Analysis

# Multi-database table analysis
"Check table sizes in specific database schema: get_table_size_info(schema_name='inventory', database_name='ecommerce')"

# Cross-database comparison
"List tables in specific database: get_table_list(database_name='testdb')"

# Maintenance status check
"Check maintenance status in specific database: get_vacuum_analyze_stats(database_name='production')"

💡 Pro Tip: All tools support multi-database operations using the database_name parameter. This allows PostgreSQL superusers to analyze and monitor multiple databases from a single MCP server instance.

Troubleshooting

Connection Issues

  1. Check PostgreSQL server status
  2. Verify connection parameters in .env file
  3. Ensure network connectivity
  4. Check user permissions

Extension Errors

  1. Run get_server_info to check extension status
  2. Install missing extensions:
    CREATE EXTENSION pg_stat_statements;
    CREATE EXTENSION pg_stat_monitor;
    
  3. Restart PostgreSQL if needed

Performance Issues

  1. Use limit parameters to reduce result size
  2. Run monitoring during off-peak hours
  3. Check database load before running analysis

Development

Testing & Development

# Test with MCP Inspector
./scripts/run-mcp-inspector-local.sh

# Direct execution for debugging
python -m src.mcp_postgresql_ops.mcp_main --log-level DEBUG

# Run tests (if you add any)
uv run pytest

Security Notes

  • All tools are read-only - no data modification capabilities
  • Sensitive information (passwords) are masked in outputs
  • No direct SQL execution - only predefined queries
  • Follows principle of least privilege

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

mcp_postgresql_ops-0.0.4.tar.gz (17.6 kB view details)

Uploaded Source

Built Distribution

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

mcp_postgresql_ops-0.0.4-py3-none-any.whl (16.1 kB view details)

Uploaded Python 3

File details

Details for the file mcp_postgresql_ops-0.0.4.tar.gz.

File metadata

  • Download URL: mcp_postgresql_ops-0.0.4.tar.gz
  • Upload date:
  • Size: 17.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.12.9

File hashes

Hashes for mcp_postgresql_ops-0.0.4.tar.gz
Algorithm Hash digest
SHA256 9b2fba88bb432ba085aaeae65b2a37b2dde98870cb755059d6ef56b654714f4d
MD5 dfbdf6e2b88bdf2c55c749b457aee2fb
BLAKE2b-256 a33fd0271efd5b9ccbcbfcdd0546c1c280526b0bff05fb5bced6b67a8667f688

See more details on using hashes here.

Provenance

The following attestation bundles were made for mcp_postgresql_ops-0.0.4.tar.gz:

Publisher: pypi-publish.yml on call518/MCP-PostgreSQL-Ops

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_postgresql_ops-0.0.4-py3-none-any.whl.

File metadata

File hashes

Hashes for mcp_postgresql_ops-0.0.4-py3-none-any.whl
Algorithm Hash digest
SHA256 c5455185aff66a118745121de596f78ccbdb52f50dc2ce23dae97d2e2bc92dd1
MD5 80abee67047ccbd298ea9adab53f23dc
BLAKE2b-256 65495055dc6572d8a80d98860b8fbbbd7358fa34bff8b0287acff33e9fc48fd7

See more details on using hashes here.

Provenance

The following attestation bundles were made for mcp_postgresql_ops-0.0.4-py3-none-any.whl:

Publisher: pypi-publish.yml on call518/MCP-PostgreSQL-Ops

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