mcp server
mcp-postgres-analytics
Read-only PostgreSQL analytics agent exposed as an MCP server. Lets Claude / ChatGPT / Cursor inspect query plans, surface slow queries, audit index usage, detect table bloat, and report vacuum status
Set up
Runs on your computer. Pick your agent and operating system.
Before you start
- uv (`curl -LsSf https://astral.sh/uv/install.sh | sh`)
{
"mcpServers": {
"mcp-postgres-analytics": {
"command": "uvx",
"args": [
"mcp-postgres-analytics"
]
}
}
}same format Cursor, GitHub Copilot CLI, Junie, JetBrains AI Assistant, Augment (Auggie CLI), Factory Droid, Kiro, Devin CLI +12
Values in angle brackets are placeholders. Restart Claude Desktop after editing its config.Claude Desktop docs
README
synced Oct 23, 2026Verified asset on Archimedes Market. View the full 4-dimension Trust Report (security · quality · license · complexity) and the curated catalog on the asset page.
MCP PostgreSQL Analytics
Read-only PostgreSQL analytics agent exposed as an MCP server. Designed to drop into a production database safely — no DDL, no DML, no writes ever.
Eight tools cover the observability surface most teams reach for during incident response and capacity planning:
query_plan—EXPLAIN (ANALYZE, BUFFERS, VERBOSE)against a query string, with annotated cost hot spotsslow_queries— top N queries by mean time / total time / call count frompg_stat_statementsindex_usage— index hit ratio, dead indexes, missing-index hints frompg_stat_user_indexestable_bloat— bloat estimation per table using the pgstattuple-equivalent heuristicvacuum_status— last vacuum / autovacuum / analyze per table, with wraparound risk flaggedconnection_stats— active sessions, idle-in-transaction, longest-running transactionslock_waits— blocked queries with the blocker chain resolvedsize_summary— database/schema/table/index size, sorted
Safety guarantees
The MCP server connects as a role with pg_read_all_stats and CONNECT only. The connection string in MCP_POSTGRES_DSN is validated at startup to refuse any role that has CREATE, INSERT, UPDATE, DELETE, TRUNCATE, ALTER, or DROP privileges on any schema. Refusal exits with a clear error rather than running with elevated rights.
query_plan accepts a query string but executes it inside EXPLAIN (...) only — the query itself is never run.
Quick start
pip install mcp-postgres-analytics
export MCP_POSTGRES_DSN="postgresql://reader@host:5432/db"
mcp-postgres-analytics serve
Claude Desktop config:
{
"mcpServers": {
"postgres-analytics": {
"command": "mcp-postgres-analytics",
"args": ["serve"],
"env": {
"MCP_POSTGRES_DSN": "postgresql://reader@host:5432/db"
}
}
}
}
Typical agent workflow
Agent: "Why is our /api/checkout endpoint slow this week?"
↓
1. slow_queries → top 5 queries by mean time
2. query_plan on the worst → spots a sequential scan
3. index_usage → confirms missing index hint
4. size_summary → confirms the table is 14GB
5. Output: "Index on orders(status, created_at) missing. ~150ms saved per call. Run during low-traffic window."
What it does NOT do
- No write operations of any kind
- No connection to non-PostgreSQL databases (use the DuckDB MCP for Parquet/CSV)
- No backup/restore (use pg_dump directly)
- No replication topology management
If you need write access for an agent workflow, use a separate MCP server with explicit gates. Mixing read-only analytics with write operations is exactly the kind of conflated tooling that this server was built to avoid.
License
MIT.