Safe mode allows only reads; unsafe mode has to be turned on explicitly; high-risk operations then need a second confirmation. Dropping a table is one chat message away without that, which is exactly why the layers are there.
A server that gives an editor three separate surfaces onto a Supabase project: the database over SQL, the Supabase Management API, and the Auth Admin SDK — all behind the same three-tier safety manager.
- Database: `get_schemas` with sizes and table counts, `get_tables` covering tables, foreign tables and views, `get_table_schema` for columns, keys and relationships, `execute_postgresql`, `retrieve_migrations`, and `confirm_destructive_operation` as the second step of a two-step confirmation
- `live_dangerously` — the switch between safe and unsafe mode, which is what stands between a read-only session and one that can change things
- Management API: `send_management_api_request` with the project ref injected automatically, `get_management_api_spec` queryable by domain or by path and method with risk assessment attached, and `get_management_api_safety_rules`
- Auth Admin: `get_auth_admin_methods_spec` and `call_auth_admin_method`, covering `get_user_by_id`, `list_users`, `create_user`, `delete_user`, `invite_user_by_email`, `generate_link` and `update_user_by_id` — operations SQL alone cannot do
- Automatic versioning of database-altering operations, with descriptive migration names generated from the operation type and target
- Statements running in transaction mode via `asyncpg`, with runtime SQL validation and risk-level assessment
Python 3.12+ and PostgreSQL command line tools installed. Required environment variables are `SUPABASE_PROJECT_REF`, `SUPABASE_DB_PASSWORD`, `SUPABASE_REGION` and `QUERY_API_KEY`; `SUPABASE_ACCESS_TOKEN` unlocks the Management API and `SUPABASE_SERVICE_ROLE_KEY` unlocks the Auth Admin tools. The region must match where your project is actually hosted — a mismatch is what produces the "Tenant or user not found" error. Defaults are set for local Supabase development, so remote projects must supply their own project ref and password. Limitations to know before you start: self-hosted Supabase is not supported, custom connection strings are not accepted, only transaction pooling is available, and the Management API and Auth Admin features work against remote projects only. The author has stopped actively maintaining this in favour of Supabase's own official MCP server.
One command plus a key — pipx install supabase-mcp-server, then supply credentials
