MCP server for Supabase Dashboard Restore migrations — validate backups, restore via psql, verify restoration, fetch project credentials
Server has 5 tools with explicit schemas and descriptions. Naming follows verb_noun convention (check_, validate_, restore_, verify_, get_). Descriptions are present and contextual (avg ~150 chars), meeting baseline minimums. However, parameter descriptions are sparse or generic, most lack detail on format, constraints, or valid ranges. Output schemas are undocumented; LLMs cannot predict response structure. Error handling is minimal; tools return text blobs without structured guidance. Security concern: connection_string parameter exposes PostgreSQL credentials in tool calls, violating secret-injection pattern. No tool annotations (readOnlyHint/destructiveHint) despite clear risk levels.
Check if psql is installed and available. Returns version info and path. This should be the first step before attempting any database restore.
Fetch Supabase project URL and API keys from the Supabase Management API. Requires the SUPABASE_ACCESS_TOKEN environment variable to be set (generate at https://supabase.com/dashboard/account/tokens).
Restore a Supabase backup file to a target database using psql. Executes `psql -d <connection_string> -f <backup_path>`. Uses a 10-minute timeout and 50MB output buffer. Connection string passwords are masked in all output.
Validate a Supabase backup file before restoration. Checks that the file exists, is not gzipped (psql requires plain SQL), and has a nonzero size. Returns file metadata.
Verify a database restoration by querying pg_tables for user tables and their row counts. Excludes internal schemas (pg_catalog, information_schema, pg_toast, supabase_migrations, supabase_functions). Returns a table-by-table summary.
Credentials exposed as tool parameters: connection_string parameter in restore_backup and verify_restoration accepts PostgreSQL passwords in plaintext. Agent traces and logs will capture these secrets.
Output schemas undocumented: tools return text content without declaring field structure. LLMs cannot predict response format or extract data for downstream tool chaining.
Parameter descriptions lack format/constraint details: file_path, connection_string, and project_ref have minimal guidance on expected format, length, or valid patterns. LLMs cannot validate inputs before calling.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 57 | 2026-07-28+ | v2 |
No tool annotations: restore_backup is destructive (modifies database) and verify_restoration is read-only, but neither declares risk via destructiveHint or readOnlyHint. Agents cannot reason about safety.
Error handling returns unstructured text: tools return plain text error messages without categorization (retryable vs fatal) or recovery guidance. Agents cannot determine next steps.