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.
README
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
- Clone the repository:
git clone <repository-url>
cd pg-mcp
- Install dependencies:
pip install -r requirements.txt
# or using pyproject.toml
pip install -e .
- Configure PostgreSQL connection:
Edit
app/config.pywith your PostgreSQL settings:
POSTGRES_DB_CONFIG = {
"host": "localhost",
"port": "5432",
"dbname": "your_database",
"user": "your_username",
"password": "your_password"
}
- Set API key:
Update
MCP_API_KEYinapp/config.pyor 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
- Install MCP extension in VS Code
- 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
- Fork the repository
- Create a feature branch
- Make your changes
- Add tests for new functionality
- Ensure all tests pass
- 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
A Model Context Protocol server that enables LLMs to interact with web pages through structured accessibility snapshots without requiring vision models or screenshots.
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.
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.
VeyraX MCP
Single MCP tool to connect all your favorite tools: Gmail, Calendar and 40 more.
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.
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.
E2B
Using MCP to run code via e2b.
Neon Database
MCP server for interacting with Neon Management API and databases
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.
Qdrant Server
This repository is an example of how to create a MCP server for Qdrant, a vector search engine.