pgverdict
pgverdict is an MCP server that equips AI agents to act as Postgres performance engineers, emphasizing measurement over speculation. Its core tools include:
list_profiles: Show configured target databases (prerequisite for other tools).list_hotspots: Rank queries by total execution time to pinpoint bottlenecks (estimate_only).explain_query: Provide plain-language interpretation of a query's execution plan (estimate_only).find_dead_weight: Identify wasteful indexes like never-scanned or duplicate ones (estimate_only).propose_index: Simulate candidate indexes with HypoPG to estimate impact (simulated).verify_index: Perform a full measurement on a disposable clone—create an index, measure read/write performance, and check for regressions—to issue an ACCEPT/REJECT verdict (measured).recover_parameters: Extract real query parameter values fromauto_explainlogs to ground analyses.generate_migration: Generate a migration file (SQL, Alembic, etc.) from an ACCEPT verdict, embedding measured evidence.
Provisions disposable Docker containers as data-bearing clones of the target PostgreSQL database for safe, measured index verification without touching production data.
Analyzes PostgreSQL database performance: ranks hot queries from pg_stat_statements, explains query plans, proposes index candidates via HypoPG simulation, and performs measured index verification on disposable clones to produce migration files with embedded evidence.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@pgverdictwhat are the hotspots in the testbed profile?"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
pgverdict
pgverdict turns your AI agent into a Postgres performance engineer that refuses to guess.
It is an MCP server for Claude Code (or any MCP client). You ask "why is my app slow?" — the agent uses pgverdict to find the hot queries, propose an index, actually build it on a disposable clone of your data, measure it, check that it doesn't slow anything else down, and hand you a migration file with the proof embedded:
"This index reduced query X from 340 ms to 18 ms, costs ~0.02 ms per write across 3 400 writes/day, no regression across the top queries — here is the migration."
Classic index advisors stop at planner estimates. pgverdict treats an estimate as a hypothesis, not an answer: every output is labelled estimate_only, simulated, or measured, and only measured results can become a verdict. A recommendation without a measurement is a bug, not a feature.
Install & first result in a minute
You need uv (no Python setup required) and a Postgres with the pg_stat_statements extension. Docker is needed only for the measuring step.
1. Describe your database in ~/.config/pgverdict/profiles.toml — a read-only role is all it needs:
[profiles.myapp-prod]
prod_dsn = "postgresql://pgverdict_ro@localhost:5432/myapp" # password via ~/.pgpass
environment = "production"
clone_provider = "docker" # enables measured verification2. Register the server with Claude Code:
claude mcp add pgverdict -- uvx pgverdict3. Ask Claude:
"Use pgverdict: what are the worst queries in myapp-prod, and is any index worth adding — verified, not guessed?"
No database at hand? Demo with planted bugs
The repo ships a testbed: a Docker Postgres with a realistic multi-tenant schema and deliberately planted pathologies — a missing index, a dead index, duplicate indexes, a heavily skewed tenant. Every pathology doubles as an acceptance test: pgverdict must find it.
git clone https://github.com/Svaca33/pgverdict && cd pgverdict
docker compose -f testbed/docker-compose.yml up -d --wait
uv run pgverdict-workload --iterations 300
claude mcp add pgverdict --env PGVERDICT_PROFILES=./testbed/profiles.toml -- uv run pgverdictThen ask "what are the hotspots in the testbed profile?" — and let the agent walk the whole loop down to a measured verdict.
Related MCP server: Postgres MCP Pro
How it works — the verification loop
Identify — rank real hotspots from
pg_stat_statementsand table/index statisticsGround — recover realistic bind parameters: real values from
auto_explainlogs when available, otherwise synthesized frompg_stats(typical + worst case — three orders of magnitude can hide behind a$1)Simulate — HypoPG virtual index,
EXPLAINcost delta — estimates onlyMeasure — real
CREATE INDEXon a disposable data-bearing clone,EXPLAIN (ANALYZE, BUFFERS)before/after, plus a measured write-cost micro-benchmarkRegress — re-measure the top-N production queries with the index present
The verdict is arithmetic, not vibes: net_ms_per_day = Σ Δread × reads/day − Δwrite × writes/day, REJECT on any top-query regression. Accepted verifications become migration files (raw SQL / Alembic / EF Core) with the evidence embedded as a comment, so the proof travels into code review.
MCP tools
Tool | What it does | Evidence |
| The configured target databases; every other tool requires an explicit | — |
| Queries ranked by total execution time (frequency × cost) |
|
|
|
|
| Never-scanned indexes, exact duplicates, prefix-redundant pairs, low leaf density |
|
| Candidate indexes cost-simulated with HypoPG, grounded parameters — never a recommendation |
|
| Real index on a disposable clone: measured timings, write cost, regression check, ACCEPT/REJECT |
|
| Real production parameter values from an | — |
| Migration file from an ACCEPT verification; refuses unproven indexes, overrides are stamped |
|
There is also pgverdict-report, a cron-friendly CLI that writes a markdown digest (hotspots, dead weight, simulated candidates) — no server, no port:
pgverdict-report --profile myapp-prod --out reports/weekly.mdSafety posture
Local developer tool, stdio transport, no listening port
Production is opened read-only (read-only transactions, 5 s statement / 1 s lock timeouts on every statement); no code path writes to the analysed database
Clones are provisioned per verification and always destroyed — your data never leaves your machine, and never lingers on it either
Generated migrations are files, never executed
Database-derived text is treated as data, never as instructions; text values sampled from statistics are redacted by default (
redact = falseper profile to opt out)Every response echoes
profile+environment, so the transcript always shows which database was touched; production profiles carry a warning banner
Status
0.1.0 — first functional release. The whole loop works end-to-end and is exercised in CI against the testbed (CHANGELOG). Honest caveat: real-world validation is testbed-grade so far — if you run pgverdict against a real database, your feedback is exactly what this release is for. Planned next: Neon / Database Lab clone providers for large databases, and automatic grounding from auto_explain.
Full working spec: docs/pgverdict-spec-v0.3.md · Domain glossary: CONTEXT.md
License
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Servers
- AlicenseAqualityDmaintenanceA Postgres MCP server with index tuning, explain plans, health checks, and safe sql execution.10MIT
- AlicenseAqualityCmaintenanceA Postgres MCP server with index tuning, explain plans, health checks, and safe SQL execution.9MIT
- AlicenseBqualityCmaintenanceAn open-source MCP server for PostgreSQL that provides database health analysis, index tuning, query plan optimization, and safe SQL execution, suitable for both development and production environments.9MIT
- AlicenseAqualityBmaintenanceA Postgres MCP server with index tuning, explain plans, health checks, and safe SQL execution for AI agents.9MIT
Related MCP Connectors
MCP server for managing Prisma Postgres.
Analytical memory for AI agents: a real Postgres queried in plain English over MCP. One command.
Comprehensive PostgreSQL documentation and best practices, including ecosystem tools
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/Svaca33/pgverdict'
If you have feedback or need assistance with the MCP directory API, please join our Discord server