Query, monitor, and analyze your PostgreSQL databases directly from Claude.
MCP PostgreSQL
A Model Context Protocol (MCP) server for PostgreSQL integration with Claude Code. Query, monitor, and analyze your PostgreSQL databases directly from Claude.
Features
- Query Execution - Execute SELECT queries with parameterized inputs
- Schema Exploration - Browse tables, columns, procedures, and indexes
- Database Monitoring - Track active queries, blocking sessions, wait stats, and connections
- Performance Analysis - Identify missing indexes, unused indexes, and fragmentation
- Write Operations - INSERT, UPDATE, DELETE when enabled (READONLY=false)
Installation
Option 1: From npm (recommended)
npx @fabriciofs/mcp-postgres
Option 2: Global installation
npm install -g @fabriciofs/mcp-postgres
Option 3: Clone and build locally
git clone https://github.com/fabriciofs/mcp-postgres.git
cd mcp-postgres
npm install
npm run build
Configuration
Claude Code Integration
Add to your Claude Code MCP settings (~/.claude/settings.json or project .claude/settings.json):
{
"mcpServers": {
"postgres": {
"command": "npx",
"args": ["-y", "@fabriciofs/mcp-postgres"],
"env": {
"SQL_CONNECTION_URL": "postgres://user:password@localhost:5432/database",
"READONLY": "true"
}
}
}
}
Or with individual connection parameters:
{
"mcpServers": {
"postgres": {
"command": "npx",
"args": ["-y", "@fabriciofs/mcp-postgres"],
"env": {
"SQL_SERVER": "localhost",
"SQL_DATABASE": "mydb",
"SQL_USER": "postgres",
"SQL_PASSWORD": "yourpassword",
"SQL_PORT": "5432",
"SQL_SSL": "false",
"READONLY": "true"
}
}
}
}
Environment Variables
Connection (choose one method)
Method 1: Connection URL
SQL_CONNECTION_URL=postgres://user:password@host:port/database?ssl=false
Method 2: Individual Parameters
SQL_SERVER=localhost
SQL_DATABASE=mydb
SQL_USER=postgres
SQL_PASSWORD=yourpassword
SQL_PORT=5432 # Optional, default: 5432
SQL_SSL=false # Optional, default: false
Required Settings
| Variable | Description |
|---|---|
READONLY |
Required. Set to true for read-only mode or false to enable write operations |
Optional Settings
| Variable | Default | Description |
|---|---|---|
QUERY_TIMEOUT |
30000 |
Query timeout in milliseconds (max: 120000) |
MAX_ROWS |
1000 |
Maximum rows to return (max: 5000) |
POOL_MIN |
2 |
Minimum connection pool size |
POOL_MAX |
10 |
Maximum connection pool size |
LOG_LEVEL |
info |
Log level: debug, info, warn, error |
Available Tools
Query Tools
| Tool | Description |
|---|---|
sql_execute |
Execute SELECT queries with parameterized inputs |
Schema Tools
| Tool | Description |
|---|---|
schema_list_tables |
List all tables and views in the database |
schema_describe_table |
Get detailed table information (columns, indexes, foreign keys) |
schema_list_columns |
Search for columns across all tables |
schema_list_procedures |
List stored procedures |
schema_list_indexes |
List indexes with usage statistics |
Monitor Tools
| Tool | Description |
|---|---|
monitor_active_queries |
Monitor currently running queries |
monitor_blocking |
Monitor blocking sessions and lock chains |
monitor_wait_stats |
Monitor wait statistics for performance bottlenecks |
monitor_database_size |
Monitor database size and file usage |
monitor_connections |
Monitor active connections |
monitor_performance_counters |
Monitor PostgreSQL performance metrics |
Analysis Tools
| Tool | Description |
|---|---|
analyze_query |
Analyze query execution plan and statistics |
analyze_suggest_indexes |
Suggest missing indexes based on query patterns |
analyze_unused_indexes |
Find indexes that are not being used |
analyze_duplicate_indexes |
Find duplicate or overlapping indexes |
analyze_fragmentation |
Analyze index fragmentation levels |
Tools (17)
sql_executeExecute SELECT queries with parameterized inputsschema_list_tablesList all tables and views in the databaseschema_describe_tableGet detailed table information (columns, indexes, foreign keys)schema_list_columnsSearch for columns across all tablesschema_list_proceduresList stored proceduresschema_list_indexesList indexes with usage statisticsmonitor_active_queriesMonitor currently running queriesmonitor_blockingMonitor blocking sessions and lock chainsmonitor_wait_statsMonitor wait statistics for performance bottlenecksmonitor_database_sizeMonitor database size and file usagemonitor_connectionsMonitor active connectionsmonitor_performance_countersMonitor PostgreSQL performance metricsanalyze_queryAnalyze query execution plan and statisticsanalyze_suggest_indexesSuggest missing indexes based on query patternsanalyze_unused_indexesFind indexes that are not being usedanalyze_duplicate_indexesFind duplicate or overlapping indexesanalyze_fragmentationAnalyze index fragmentation levelsEnvironment Variables
READONLYrequiredSet to true for read-only mode or false to enable write operationsSQL_CONNECTION_URLPostgres connection string (Method 1)SQL_SERVERDatabase host (Method 2)SQL_DATABASEDatabase name (Method 2)SQL_USERDatabase user (Method 2)SQL_PASSWORDDatabase password (Method 2)QUERY_TIMEOUTQuery timeout in milliseconds (max: 120000)MAX_ROWSMaximum rows to return (max: 5000)Configuration
{
"mcpServers": {
"postgres": {
"command": "npx",
"args": ["-y", "@fabriciofs/mcp-postgres"],
"env": {
"SQL_CONNECTION_URL": "postgres://user:password@localhost:5432/database",
"READONLY": "true"
}
}
}
}