pg-mcp

pg-mcp

A Model Context Protocol server for PostgreSQL that enables database operations like querying, schema inspection, performance analysis, and administration through a JSON-RPC 2.0 interface.

Category
Visit Server

README

Docker Image CI

PostgreSQL Model Context Protocol (MCP) Server

A comprehensive Model Context Protocol (MCP) Server built with FastAPI that provides full PostgreSQL database operations through a standardized JSON-RPC 2.0 interface. This server can be integrated with VS Code and other MCP-compatible tools for seamless database management.

Features

šŸš€ Core MCP Functionality

  • JSON-RPC 2.0 compliant API
  • VS Code integration ready
  • Authentication with API key
  • Comprehensive error handling
  • Auto-fallback to mock service when PostgreSQL is unavailable

šŸ—„ļø PostgreSQL Operations

Basic Operations

  • Connection Testing - Test database connectivity and get server info
  • Query Execution - Execute any SQL query (SELECT, INSERT, UPDATE, DELETE, etc.)
  • Schema Information - Get complete database schema with tables and columns
  • Table Information - Detailed table metadata, columns, indexes, and row counts

Advanced Operations

  • Query Performance Analysis - EXPLAIN ANALYZE for query optimization
  • Database Size Information - Database and table size statistics
  • Table Statistics - Column statistics, null fractions, distinct values
  • Active Connections - Monitor current database connections
  • Locks Information - View database locks and blocking queries
  • Slow Queries Analysis - Identify performance bottlenecks (requires pg_stat_statements)

Administrative Operations

  • Table Backup - Create table copies with or without data
  • Index Creation - Create indexes on tables (regular or unique)
  • Table Optimization - VACUUM and ANALYZE tables for performance

Utility Operations

  • Echo Tool - Simple echo for testing connectivity

Available Tools

Tool Name Description Parameters
echo Echo back input message message (string)
postgres_connection_test Test PostgreSQL connection None
postgres_query Execute SQL query query (string), params (array, optional)
postgres_schema Get database schema None
postgres_table_info Get table information table_name (string), schema (string, default: "public")
postgres_query_analyze Analyze query performance query (string)
postgres_database_size Get database size info None
postgres_table_stats Get table statistics table_name (string), schema (string, default: "public")
postgres_active_connections Get active connections None
postgres_backup_table Backup table source_table (string), backup_table (string), schema (string), include_data (boolean)
postgres_create_index Create table index table_name (string), column_names (array), index_name (string, optional), schema (string), unique (boolean)
postgres_slow_queries Get slow queries limit (integer, default: 10)
postgres_optimize_table Optimize table table_name (string), schema (string, default: "public")
postgres_locks_info Get database locks None

Installation

  1. Clone the repository:
git clone <repository-url>
cd pg-mcp
  1. Install dependencies:
pip install -r requirements.txt
# or using pyproject.toml
pip install -e .
  1. Configure PostgreSQL connection: Edit app/config.py with your PostgreSQL settings:
POSTGRES_DB_CONFIG = {
    "host": "localhost",
    "port": "5432", 
    "dbname": "your_database",
    "user": "your_username",
    "password": "your_password"
}
  1. Set API key: Update MCP_API_KEY in app/config.py or set environment variable.

Usage

Start the Server

# Development
uvicorn app.main:app --reload --host 0.0.0.0 --port 8000

# Production
uvicorn app.main:app --host 0.0.0.0 --port 8000

VS Code Integration

  1. Install MCP extension in VS Code
  2. Configure MCP settings in .vscode/mcp.json:
{
  "mcpServers": {
    "postgres-mcp": {
      "name": "PostgreSQL MCP Server",
      "url": "http://localhost:8000/mcp",
      "apiKey": "your-secret-mcp-api-key"
    }
  }
}

Direct API Usage

Test connection:

curl -X GET http://localhost:8000/mcp \
  -H "Authorization: Bearer your-secret-mcp-api-key"

Execute query:

curl -X POST http://localhost:8000/mcp \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer your-secret-mcp-api-key" \
  -d '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/call",
    "params": {
      "name": "postgres_query",
      "arguments": {
        "query": "SELECT version()"
      }
    }
  }'

Testing

Comprehensive Test Suite

# Run unit tests
pytest test/

# Run comprehensive integration test
python test_postgres_mcp_comprehensive.py

Individual Tool Testing

# Test specific functionality
python test_postgres_mcp.py

Architecture

pg-mcp/
ā”œā”€ā”€ app/
│   ā”œā”€ā”€ main.py              # FastAPI application entry point
│   ā”œā”€ā”€ mcp.py               # MCP server implementation
│   ā”œā”€ā”€ postgres_service.py  # PostgreSQL service layer
│   ā”œā”€ā”€ postgres_mock.py     # Mock service for testing
│   ā”œā”€ā”€ json_rpc.py          # JSON-RPC 2.0 implementation
│   ā”œā”€ā”€ auth.py              # Authentication middleware
│   ā”œā”€ā”€ config.py            # Configuration settings
│   └── logger.py            # Logging configuration
ā”œā”€ā”€ test/                    # Test files
ā”œā”€ā”€ .vscode/
│   └── mcp.json            # VS Code MCP configuration
└── pyproject.toml          # Project dependencies

Key Features

šŸ”’ Security

  • API key authentication for all requests
  • SQL injection protection through parameterized queries
  • Error sanitization to prevent information leakage

šŸš€ Performance

  • Connection pooling for database connections
  • Async/await support throughout
  • Query optimization tools and analysis

šŸ› ļø Development

  • Auto-reload support for development
  • Comprehensive logging for debugging
  • Mock service for testing without real database
  • Type hints throughout codebase

šŸ”§ Reliability

  • Automatic fallback to mock service
  • Comprehensive error handling
  • Connection retry logic
  • Graceful degradation

Examples

Query Execution

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "postgres_query",
    "arguments": {
      "query": "SELECT * FROM users WHERE active = $1",
      "params": ["true"]
    }
  }
}

Table Backup

{
  "jsonrpc": "2.0", 
  "id": 2,
  "method": "tools/call",
  "params": {
    "name": "postgres_backup_table",
    "arguments": {
      "source_table": "users",
      "backup_table": "users_backup_20240115",
      "schema": "public",
      "include_data": true
    }
  }
}

Index Creation

{
  "jsonrpc": "2.0",
  "id": 3, 
  "method": "tools/call",
  "params": {
    "name": "postgres_create_index",
    "arguments": {
      "table_name": "users",
      "column_names": ["email", "status"], 
      "index_name": "idx_users_email_status",
      "unique": false
    }
  }
}

Contributing

  1. Fork the repository
  2. Create a feature branch
  3. Make your changes
  4. Add tests for new functionality
  5. Ensure all tests pass
  6. Submit a pull request

License

MIT License - see LICENSE file for details.

Support

For issues and questions:

  • Create an issue on GitHub
  • Check the test files for usage examples
  • Review the comprehensive test suite for full API coverage

Recommended Servers

playwright-mcp

playwright-mcp

A Model Context Protocol server that enables LLMs to interact with web pages through structured accessibility snapshots without requiring vision models or screenshots.

Official
Featured
TypeScript
Magic Component Platform (MCP)

Magic Component Platform (MCP)

An AI-powered tool that generates modern UI components from natural language descriptions, integrating with popular IDEs to streamline UI development workflow.

Official
Featured
Local
TypeScript
Audiense Insights MCP Server

Audiense Insights MCP Server

Enables interaction with Audiense Insights accounts via the Model Context Protocol, facilitating the extraction and analysis of marketing insights and audience data including demographics, behavior, and influencer engagement.

Official
Featured
Local
TypeScript
VeyraX MCP

VeyraX MCP

Single MCP tool to connect all your favorite tools: Gmail, Calendar and 40 more.

Official
Featured
Local
graphlit-mcp-server

graphlit-mcp-server

The Model Context Protocol (MCP) Server enables integration between MCP clients and the Graphlit service. Ingest anything from Slack to Gmail to podcast feeds, in addition to web crawling, into a Graphlit project - and then retrieve relevant contents from the MCP client.

Official
Featured
TypeScript
Kagi MCP Server

Kagi MCP Server

An MCP server that integrates Kagi search capabilities with Claude AI, enabling Claude to perform real-time web searches when answering questions that require up-to-date information.

Official
Featured
Python
E2B

E2B

Using MCP to run code via e2b.

Official
Featured
Neon Database

Neon Database

MCP server for interacting with Neon Management API and databases

Official
Featured
Exa Search

Exa Search

A Model Context Protocol (MCP) server lets AI assistants like Claude use the Exa AI Search API for web searches. This setup allows AI models to get real-time web information in a safe and controlled way.

Official
Featured
Qdrant Server

Qdrant Server

This repository is an example of how to create a MCP server for Qdrant, a vector search engine.

Official
Featured