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
Example Usage
Quick start
- 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
- Install Dependencies
uv venv --python 3.11 --seed
uv sync
- 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 statusget_active_connections- Current active connections and session informationget_postgresql_config- PostgreSQL configuration parameters with keyword search capability
🗄️ Structure Exploration
get_database_list- All database list and size informationget_table_list- Table list and size informationget_user_list- Database user list and permissions
⚡ Performance Monitoring
get_pg_stat_statements_top_queries- Slow query analysis based on performance statisticsget_pg_stat_monitor_recent_queries- Real-time query monitoringget_index_usage_stats- Index usage rate and efficiency analysis
💾 Capacity Management
get_database_size_info- Database capacity analysisget_table_size_info- Table and index size analysisget_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
Environment Variables
| Variable | Description | Default | Project Default |
|---|---|---|---|
PYTHONPATH |
Python module search path for MCP server imports | /app/src |
/app/src |
MCP_LOG_LEVEL |
Server logging verbosity (DEBUG, INFO, WARNING, ERROR) | INFO |
INFO |
FASTMCP_TYPE |
MCP transport protocol (stdio for CLI, streamable-http for web) | stdio |
streamable-http |
FASTMCP_HOST |
HTTP server bind address (0.0.0.0 for all interfaces) | 127.0.0.1 |
0.0.0.0 |
FASTMCP_PORT |
HTTP server port for MCP communication | 8080 |
8080 |
PGSQL_VERSION |
PostgreSQL major version for Docker image selection | 16 |
15 |
POSTGRES_HOST |
PostgreSQL server hostname or IP address | localhost |
127.0.0.1 |
POSTGRES_PORT |
PostgreSQL server port number | 5432 |
15432 |
POSTGRES_USER |
PostgreSQL connection username (needs read permissions) | postgres |
postgres |
POSTGRES_PASSWORD |
PostgreSQL user password (supports special characters) | `` | changeme!@34 |
POSTGRES_DB |
Default database name for connections | postgres |
mcp_postgres_ops |
POSTGRES_MAX_CONNECTIONS |
PostgreSQL max_connections configuration parameter | 100 |
200 |
DOCKER_EXTERNAL_PORT_OPENWEBUI |
Host port mapping for Open WebUI container | 8080 |
3003 |
DOCKER_EXTERNAL_PORT_MCP_SERVER |
Host port mapping for MCP server container | 8080 |
18003 |
DOCKER_EXTERNAL_PORT_MCPO_PROXY |
Host port mapping for MCPO proxy container | 8000 |
8003 |
Note: POSTGRES_DB serves as the default target database for operations when no specific database is specified. In Docker environments, if set to a non-default name, this database will be automatically created during initial PostgreSQL startup.
Prerequisites
Required PostgreSQL Extensions
⚠️ Important: This MCP server requires pg_stat_statements for performance monitoring tools. Without it, several functions will not work properly.
-- Query performance statistics (required for get_pg_stat_statements_top_queries)
CREATE EXTENSION IF NOT EXISTS pg_stat_statements;
-- Advanced monitoring (optional for get_pg_stat_monitor_recent_queries)
CREATE EXTENSION IF NOT EXISTS pg_stat_monitor;
Quick Setup: For new PostgreSQL installations, add to postgresql.conf:
shared_preload_libraries = 'pg_stat_statements'
Then restart PostgreSQL and run the CREATE EXTENSION commands above.
Minimum Requirements
- PostgreSQL 12+ (tested with PostgreSQL 16)
- Python 3.11
- Network access to PostgreSQL server
- Read permissions on system catalogs
Example Queries
Server Status & Health Check
"Check PostgreSQL server status"
"Check PostgreSQL server version and connection status"
"Verify if extensions are installed"
"Show current active connection count"
Configuration Management
"Show the shared_buffers configuration"
"Show PostgreSQL configuration parameter for shared_buffers"
"Find all memory-related configuration settings"
"Show logging configuration parameters"
"Display connection-related settings"
"Find all timeout configurations"
"Show all PostgreSQL configuration parameters"
Performance Analysis
"Show top 10 slowest queries"
"Show top 20 slowest queries"
"Analyze slow queries in specific database"
"Find unused indexes"
"Analyze recent query activity"
"Check index efficiency in specific database"
Capacity & Structure Management
"Check database sizes"
"Find largest tables"
"Show tables that need VACUUM"
"Check table sizes in specific database schema"
"List tables in specific database"
"Check maintenance status in specific database"
💡 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.
📖 More Useful Example Queries →
Troubleshooting
Connection Issues
- Check PostgreSQL server status
- Verify connection parameters in
.envfile - Ensure network connectivity
- Check user permissions
Extension Errors
- Run
get_server_infoto check extension status - Install missing extensions:
CREATE EXTENSION pg_stat_statements; CREATE EXTENSION pg_stat_monitor;
- Restart PostgreSQL if needed
Performance Issues
- Use
limitparameters to reduce result size - Run monitoring during off-peak hours
- 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
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_postgresql_ops-1.0.1.tar.gz.
File metadata
- Download URL: mcp_postgresql_ops-1.0.1.tar.gz
- Upload date:
- Size: 18.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.12.9
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
a1b2271c3b97cff4eec8a1245090846955b6f86f4c0f2a4c701c8f8f39ca418d
|
|
| MD5 |
afce69737e527e123caa7ecf3bd942d6
|
|
| BLAKE2b-256 |
cb0f0295252712d635d8b316cea6b9a56cab8dbf219911d335d887d612375f8b
|
Provenance
The following attestation bundles were made for mcp_postgresql_ops-1.0.1.tar.gz:
Publisher:
pypi-publish.yml on call518/MCP-PostgreSQL-Ops
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
mcp_postgresql_ops-1.0.1.tar.gz -
Subject digest:
a1b2271c3b97cff4eec8a1245090846955b6f86f4c0f2a4c701c8f8f39ca418d - Sigstore transparency entry: 414633091
- Sigstore integration time:
-
Permalink:
call518/MCP-PostgreSQL-Ops@9babd08ee88797ef5855e56fd97e60b6ad37264f -
Branch / Tag:
refs/tags/1.0.1 - Owner: https://github.com/call518
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
pypi-publish.yml@9babd08ee88797ef5855e56fd97e60b6ad37264f -
Trigger Event:
push
-
Statement type:
File details
Details for the file mcp_postgresql_ops-1.0.1-py3-none-any.whl.
File metadata
- Download URL: mcp_postgresql_ops-1.0.1-py3-none-any.whl
- Upload date:
- Size: 16.4 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.12.9
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
c1c0c2ae206d853444894092df953a9047fb06106543c5896a2aeeb39468c0b7
|
|
| MD5 |
685743190aafaab428b1c186f994e089
|
|
| BLAKE2b-256 |
c2bd8b2f19c3a04cd35d54ec901a74e4b3211ab1ea13c7d62c3e64d9218e818e
|
Provenance
The following attestation bundles were made for mcp_postgresql_ops-1.0.1-py3-none-any.whl:
Publisher:
pypi-publish.yml on call518/MCP-PostgreSQL-Ops
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
mcp_postgresql_ops-1.0.1-py3-none-any.whl -
Subject digest:
c1c0c2ae206d853444894092df953a9047fb06106543c5896a2aeeb39468c0b7 - Sigstore transparency entry: 414633098
- Sigstore integration time:
-
Permalink:
call518/MCP-PostgreSQL-Ops@9babd08ee88797ef5855e56fd97e60b6ad37264f -
Branch / Tag:
refs/tags/1.0.1 - Owner: https://github.com/call518
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
pypi-publish.yml@9babd08ee88797ef5855e56fd97e60b6ad37264f -
Trigger Event:
push
-
Statement type: