{"name":"io.github.Shubh-Sgr/pgvouch","slug":"shubh-sgr-pgvouch","title":"PgVouch","description":"Safe PostgreSQL migrations: schema drift, lock analysis, safe rewrites, data checksums. Read-only.","url":"https://mcp.market/server/shubh-sgr-pgvouch","rating":null,"grade":"B","score":83,"certified":false,"status":"active","category":"other","tags":[],"presence":{"score":24,"stars":0,"forks":0,"downloads_week":53,"last_push_at":"2026-10-06T05:44:29.000Z","license":"Apache-2.0"},"uptime":null,"claimed":false,"transport":"npm","callable_via_gateway":false,"default_price_micros":0,"repository":"https://github.com/Shubh-Sgr/pgvouch","website":null,"version":"0.4.4","remotes":[],"packages":[{"registryType":"npm","registryBaseUrl":"https://registry.npmjs.org","identifier":"pgvouch","version":"0.4.4","transport":{"type":"stdio"},"packageArguments":[{"value":"mcp","type":"positional"}],"environmentVariables":[{"description":"Read-only postgres:// URL of the reference database","isRequired":true,"isSecret":true,"name":"SOURCE_DATABASE_URL"},{"description":"Read-only postgres:// URL of the database to check","isRequired":true,"isSecret":true,"name":"TARGET_DATABASE_URL"},{"description":"Optional planner LLM: none (default), ollama or gemini","default":"none","name":"PGVOUCH_LLM"}]}],"tools":[{"name":"analyze_locks","description":"Parse a SQL migration with PostgreSQL's own parser and predict, per statement: the table lock taken, whether it blocks reads/writes, whether it scans or rewrites the table, and a risk level using the target table's size. Also warns about missing lock_timeout and CONCURRENTLY inside transactions.","write_action":false,"price_micros":0,"input_schema":null},{"name":"check_lock_queue","description":"Live check on the TARGET: for each statement, compares the table lock it needs with the locks other sessions hold or are waiting for right now (pg_locks, full Postgres conflict table), and lists open transactions that CREATE INDEX CONCURRENTLY would wait for. Verdict: safe_now or would_wait (with the sessions: pid, user, application, state, transaction age, lock mode). Never returns other sessions","write_action":false,"price_micros":0,"input_schema":null},{"name":"detect_drift","description":"Compare the SOURCE (reference) and TARGET PostgreSQL schemas: tables, columns, types, nullability, defaults, indexes, constraints, sequences. Returns every difference with a severity. 'missing' = in source but not target; 'extra' = only in target.","write_action":false,"price_micros":0,"input_schema":null},{"name":"find_differing_rows","description":"For one table, bisect mismatched chunks (binary search over checksums) to find the exact rows that differ: missing on target, extra on target, or changed (with the changed column names). By default returns primary keys and column names only, not values.","write_action":false,"price_micros":0,"input_schema":null},{"name":"plan_migration","description":"Build an ordered, safe migration plan that makes TARGET match SOURCE. If an LLM is configured, its plan must pass a validator (objects exist, only allow-listed statements, no unsafe DDL) and then a shadow run: PgVouch starts a disposable local Postgres container, copies the target's schema (no data) into it, applies the plan as a non-superuser and checks the result matches SOURCE. Otherwise the de","write_action":false,"price_micros":0,"input_schema":null},{"name":"suggest_safe_rewrite","description":"Rewrite risky DDL into safe, non-blocking steps using deterministic rules (CREATE INDEX CONCURRENTLY, NOT VALID + VALIDATE, expand/contract for NOT NULL columns and type changes, batched backfills). Returns a commented script that starts with SET lock_timeout and statement_timeout. It is NOT executed.","write_action":false,"price_micros":0,"input_schema":null},{"name":"verify_data","description":"Prove that table data is identical on source and target by comparing MD5 hashes of primary-key chunks computed inside Postgres (no rows are transferred). Returns per-table status and the key ranges of mismatched chunks, plus a check that every identity/serial sequence on the target is ahead of its data (a sequence left behind makes the next INSERT fail with a duplicate key). If the target is still","write_action":false,"price_micros":0,"input_schema":null}],"scan":{"score":83,"grade":"B","scanned_at":"2026-10-14T12:23:01.999Z","report":{"scannerVersion":"0.1.10","scannedAt":"2026-10-14T12:23:01.892Z","components":{"code":{"score":25,"max":25,"notes":["48 source files scanned"]},"reliability":{"score":-1,"max":20,"notes":["no gateway calls yet and no remote to probe"]},"poisoning":{"score":-1,"max":15,"notes":["tools not inspected (local package is not executed); not counted"]},"auth":{"score":6,"max":15,"notes":["static API keys via environment variables"]},"maintenance":{"score":15,"max":15,"notes":["last push 8 days ago"]},"identity":{"score":8,"max":10,"notes":["registry namespace matches repository owner","GitHub account older than a year"]}},"findings":[],"inputs":{"packages":[{"registryType":"npm","identifier":"pgvouch","version":"0.4.4","found":true,"license":"Apache-2.0","hasInstallScripts":false,"dependencyCount":5,"publishedAt":"2026-10-04T12:32:26.175Z","repositoryUrl":"git+https://github.com/Shubh-Sgr/pgvouch.git","weeklyDownloads":53}],"repo":{"found":true,"owner":"Shubh-Sgr","repo":"pgvouch","archived":false,"pushedAt":"2026-10-06T05:44:29Z","stars":0,"forks":0,"openIssues":2,"ownerType":"User","ownerAvatarUrl":"https://avatars.githubusercontent.com/u/40662583?v=4","ownerCreatedAt":"2018-06-28T11:19:35Z","license":"Apache-2.0"},"icon":{"url":null,"source":"none"},"presence":{"stars":0,"forks":0,"downloadsWeek":53,"license":"Apache-2.0","lastPushAt":"2026-10-06T05:44:29.000Z","score":24}}}},"grade_history":[],"reviews":[]}