A side-by-side look at the MCP Database Doctor and PostgreSQL Performance (read Only) MCP servers: transport, auth, tools, quality signals, and the config to install either one in Claude, Cursor, Windsurf or VS Code.
Verdict: choose MCP Database Doctor for databases work as a local process; choose PostgreSQL Performance (read Only) for databases over a hosted endpoint. You can also run both side by side in one mcpServers block.
CONTROL_PLANE_URL.analyze_query, check_migration, suggest_indexes.top_slow_queries, explain_query, suggest_indexes.Rows where the two servers differ are marked.
| Spec | ||
|---|---|---|
| Category | Databases | Databases |
| Quality signal | 56/100 · Good | 52/100 · Good |
| Install command | Confirmed | Confirmed |
| Transport | Local subprocess (stdio) | Remote HTTP/SSE |
| Auth | No auth required | Not declared |
| Pricing | Free | Not declared |
| Required env vars | CONTROL_PLANE_URL | None listed |
| Verified owner | Community listing | Community listing |
| GitHub stars | 0 | 0 |
| Directory activity | 0 views 0 installs 0 upvotes | 1 views 0 installs 0 upvotes |
| Tools | 5 | 8 |
| Full listing | View MCP Database Doctor | View PostgreSQL Performance (read Only) |
analyze_querySQL anti-patterns with severity and recommendationscheck_migrationDestructive DDL, index locking, constraints, rewrite and transaction riskssuggest_indexesConservative DDL candidates; not appliedexplain_planLarge sequential scans, row estimate errors, sort spills, high loopshealth_reportAggregate review of supplied artifacts onlytop_slow_queriesMost expensive statements from `pg_stat_statements`: normalized text, calls, total/mean/max ms, rows, cache hit ratio, share of total time. Order by `total_time`, `mean_time`, `calls` or `rows`.explain_querySummarized plan: 5 costliest nodes, seq scans on large tables, 10x row misestimates, disk sorts/hash spills, nested loops with many iterations. `analyze=true` adds real timings. `$1` placeholders get a generic plan.suggest_indexesCREATE INDEX CONCURRENTLY` candidates from filtered seq scans, join keys and `ORDER BY ... LIMIT`, each with a reason; validated with hypothetical indexes when `hypopg` is installed.unused_indexesIndexes with `idx_scan = 0`, largest first, excluding primary key, unique and constraint indexes; includes size, definition and a `DROP INDEX CONCURRENTLY` to review.table_healthLive/dead tuples, dead ratio, last (auto)vacuum/analyze, rows changed since analyze, seq vs index scans, sizes, with plain-language warnings.blocking_sessionsBlocked/blocking pairs via `pg_blocking_pids`, truncated query texts, wait time, lock type/mode/table, blocker state, root blockers.slow_functionsUser-defined functions (PL/pgSQL, SQL, ...) ranked by total, self or mean time or calls, from `pg_stat_user_functions`, with language and volatility.explain_functionLooks **inside** the functions a query calls: time per function, every statement executed inside them with calls, time and its own analyzed plan, and findings such as a seq scan inside a function, a function called once per row, or a read-only function left `VOLATILE`. Includes the function source.Paste either block (or both) into your client config, e.g. claude_desktop_config.json or ~/.cursor/mcp.json. We only show a config when the install command is confirmed.
{
"mcpServers": {
"mcp-database-doctor": {
"command": "npx",
"args": [
"-y",
"mcp-database-doctor"
],
"env": {
"CONTROL_PLANE_URL": "YOUR_CONTROL_PLANE_URL_HERE"
}
}
}
}
{
"mcpServers": {
"postgresql-performance-read-only": {
"url": "http://localhost:8080/mcp"
}
}
}