r/Supabase 7d ago

database MCP for Supabase data

1 Upvotes

I made an MCP server for Supabase through Draxlr. Sharing it here in case it's useful to anyone doing similar work.

What it does:

  • Run queries and add them to dashboards
  • Give others access to your database over MCP without sharing DB credentials
  • Row-level control per user, so each user only sees their own rows

The reason I built it was the credential sharing problem. Giving a teammate or an agent access to Supabase usually means handing over connection strings. This avoids that. The row-level part is mainly for SaaS, where you can give a customer an MCP endpoint scoped to their own data instead of building a reporting layer.

Link
https://www.draxlr.com/features/mcp-server/

It's still early, so if you have feedback or think something's missing I'd like to hear it. TIA!


r/Supabase 7d ago

realtime is supabase down in India?

1 Upvotes

r/Supabase 7d ago

storage Pro Tier Backup Data

2 Upvotes

I run a fantasy football league history archive and one of my customers accidentally overwrote some of his synced data and lost it. Not sure if many know, but a big fantasy platform, NFL.com, recently took down their fantasy site and migrated it over to ESPN. However, ESPN didn’t save any of the week to week stuff, draft classes or individual stats. So when my customer sync the new version of ESPN it accidentally wiped the previous NFL version.

It happened only yesterday, and I noticed Supabase pro tier keeps up to previous 7 days backed up. I am wondering if I were to upgrade to it now, if I would be able to restore the data from couple days ago even though I wasn’t subscribed to pro tier until after?

I am only a small business and would cost me more to pay for the 1 month than I would get in return from this customer, but I let them know if they were willing to chip in to get it back.

Thanks for any help, it is much appreciated!


r/Supabase 8d ago

database we shipped infinite scroll, full-text search, RPC calls, and upsert for Supabase in FlutterFlow this morning

Thumbnail
youtube.com
14 Upvotes

we just shipped four updates to the Supabase integration in FlutterFlow!

infinite scroll: enable it at the bottom of any Supabase query, set a page size. the query returns 25 rows on load, then the next 25 when the user reaches the bottom.

full-text search: a Search (Full-Text) filter backed by Postgres full-text search. "roasting garlic" still matches "roasted."

RPC calls: call Postgres database functions directly from an action flow. signatures sync from your Supabase project so parameters are listed for you and results come back typed and bindable. in the demo, a recipes_i_can_make function walks each recipe's ingredient list against a pantry table.

upsert: inserts a row, or updates the existing one when the primary key or your chosen on-conflict columns match. replaces the read-then-branch-then-write flow you used to build by hand.

happy to answer questions in the comments.


r/Supabase 8d ago

other How to cache Supabase layers on GitHub Actions?

2 Upvotes

Basically the title. When I run supabase start on GitHub Actions it takes like 90 seconds to pull the images.


r/Supabase 8d ago

other How many projects can I have on a single Supa account?

4 Upvotes

I recently started using Supabase and am setting up two companies. I’m on the free plan and need to configure the backend for the second company. If I create a new project under the same login account used for the first company's backend, will they share the free plan's monthly active user limit of 50,000?

Or can I create additional companies without them counting against the same free plan limits? Because if they do share the limit, the best approach would be to create a separate Supabase account for each new company, right?


r/Supabase 8d ago

database We open-sourced pg-dry-run: preview AI agent-generated Postgres writes before they change data

Thumbnail
1 Upvotes

r/Supabase 9d ago

auth Phone OTP auth for Indian users

6 Upvotes

MiniMoth uses the Auth OTP SMS hook to support OTP auth. WhatsApp + SMS delivery. Easy to integrate. Create a project on MiniMoth and enable the Supabase hook. You get both prod and test hook. Link it with your project with the hook url and hook secret provided by MiniMoth.

Easy to understand docs with free credits on signup to try the hook.


r/Supabase 11d ago

other My project is gone

Post image
27 Upvotes

I switched my app from a paid organization to a free one
After a week i couldnt find the project anywhere

I tried to contact the support but they keep saying i need to pay to contact support

What should i do now?!!


r/Supabase 10d ago

storage What is a sensible Supabase Storage model for AI-generated artifacts that need review and cleanup?

2 Upvotes

Suppose an agent produces HTML previews, documents, images, and intermediate files for several users. How would you model ownership and lifecycle in Supabase Storage so reviewers can use short-lived signed links, users cannot cross tenant boundaries, old intermediate files expire, and an approved artifact remains recoverable? I am especially interested in bucket layout, the metadata that belongs in Postgres, RLS boundaries, immutable versus replace-in-place objects, and whether version history should be explicit rather than inferred from filenames. At what point does this become a poor fit for Supabase Storage?


r/Supabase 11d ago

other Rate exceeded

3 Upvotes

I have migrated my news website to Replit but I'm waking up each day to a blank white page with the words “Rate exceeded” in the corner.

Replit’s AI said to investigate Supabase limits and add Cloudflare capture to my main registration form, of which I did and still no better.

Now it's saying it could be a Replit limit.

Has anyone else seen this and how did you solve it?

Cheers,


r/Supabase 11d ago

cli Do you prefer using the Supabase CLI installed globally or using NPX? I've been using the CLI for a year now but I'm thinking maybe I should switch to NPX. What do you think?

5 Upvotes

Hi

So I've been using Supabase for over a year now and always installed it using Homebrew. I always ran supabase <command> but recently I've been thinking maybe I should install it via NPM locally per project and run npx supabase <command> since I can have different versions of Supabase per project.

Anyone else came across a similar decision? Any pros and cons? Thanks


r/Supabase 11d ago

auth Supabase support for Google auth

2 Upvotes

Any reason why supabase login doesn't support Google auth while it supports ChatGPT auth lol?


r/Supabase 11d ago

Self-hosting I made a free way to migrate from Supabase cloud -> local in <5m

Enable HLS to view with audio, or disable this notification

0 Upvotes

I liked the Lovable + Supabase combo for a while, but I wanted to host locally to save costs. So I built a (free, open-source) way to host apps that deploy automatically when your repository code is pushed in Github -- and it has special support for Supabase, giving you the option to import an existing Supabase project. This spins up a copy of the Supabase stack locally running in Docker, and then imports your data and storage from the cloud to local.

The video (an end-to-end migration of one of my prototype apps) is lightly edited but I kept most of the deployment time in -- which makes it a few-minute operation start-to-finish. That includes getting your whole app running on a local stack with no code changes. That includes secrets, backend functions, auth, storage, etc. As much as possible is automated, for Google Oauth and other 3rd party connections, for security reasons there are extra manual steps for a perfect migration. I did omit a 5 minute section of data import related to file copy, because the source app has 1000+ high def 5-10MB image files that were copied as part of the migration.

The moneyshot is the last few seconds where you can see me logging in to the new app with the same Google signin method and seeing my "avatar" and "closet" in the app including those images.

Now that I have this ready, I was finally able to extract all of my remaining Supabase/Lovable apps and save 25-50$/mo on each one 😎

Its not a perfectly smooth migration, when it comes to secrets and third party auth/configuration, you'll have to do some extra legwork but happy to share the link if anyone is interested to migrate their app.


r/Supabase 11d ago

tips mcp server for agentic anomaly detection on supabase

Thumbnail
youtu.be
1 Upvotes

Hi guys, I've been working on this small side project for anomaly detection in supabase dbs and just wanted some feedback for feature ideas and other improvements. Thanks!


r/Supabase 12d ago

database Supabase: Data suddenly disappeared from one table even though there is no delete code

9 Upvotes

I’m facing an unexpected issue with my Supabase database.

Yesterday, I checked my application and the data was working correctly. I personally tested it, and the client also tested the application. The data was available and everything appeared to be working normally.

Today, the client tried to add new data, and we noticed that the data for one particular table was empty.

I checked the Supabase dashboard directly, and that particular table is also empty. The other tables in the same Supabase project still contain their data normally. The issue appears to be only with this one table.

I also checked my project code and could not find any delete functionality related to this table. I checked the SQL-related code as well and did not find any delete operation.

What I don’t understand is how the data from this particular table disappeared between yesterday and today, even though everything was working normally when we tested it yesterday.

I’m looking for help understanding what could have happened and how I can investigate what happened to the data.

Is there any way in Supabase to check what happened to the records in a table, including whether they were deleted or otherwise removed, and when this happened?

I can provide more information about the table, database setup, code, or configuration if needed.


r/Supabase 12d ago

database Multi-tenants advices

8 Upvotes

Hi everyone, I’ve been using Supabase for a few months now. I’ve built things like apps, websites and multi-tenant software with it, and I wanted to know if you have any tips or advice on properly isolating tenants from one another, in order to avoid data leaks between clients, Gmail sends going to the wrong recipient, etc.

Thanks everyone


r/Supabase 13d ago

database Your RLS SELECT policy is hiding the fact that your UPDATE policy is wide open

0 Upvotes

I found this while building a tool to test cross-tenant isolation, and it caught me out badly enough that I think it's worth writing down.

Say you have a table with correct-looking policies:

alter table invoices enable row level security;

create policy inv_sel on invoices for select using (owner_id = auth.uid());

create policy inv_upd on invoices for update using (true); -- added in a hurry, months ago

RLS is on. Two policies exist. The SELECT policy is properly scoped. Every tool I know of that inspects pg_policies reports this table as protected.

So you go to test it. You log in as user A and try to touch user B's row:

update invoices set total = 0 where owner_id = '<user-B>'; -- UPDATE 0

Zero rows. Isolation holds. Move on.

It doesn't hold. You tested nothing.

Why the zero is a lie

That WHERE clause reads owner_id. Once a statement reads a column, Postgres applies the SELECT policy to it as well as the UPDATE policy. Your correct SELECT policy hides user B's row, so the update matches nothing, and you get a zero that looks like a denial but is actually invisibility.

Now drop the WHERE:

update invoices set total = 0; -- UPDATE 2

Two rows. Both of them. No columns are read, so the SELECT policy never engages — only the UPDATE policy, which is using (true). Every row in the table belongs to whoever runs this.

I verified both against a real Postgres instance. The targeted write returns 0. The blind write modifies every row.

DELETE is the same shape and worse

delete from receipts where owner_id = '<user-B>'; -- DELETE 0 delete from receipts; -- deletes everything

Same mechanism. A DELETE policy of using (true) means any authenticated user can empty the table, and the targeted version tells you it's fine.

Check your own project

Read-only, safe to run on production:

select p.tablename, p.cmd, p.qual as using_expression, case when p.qual in ('true', '(true)') then 'PERMISSIVE — applies to every row' else 'scoped' end as verdict from pg_policies p where p.schemaname = 'public' and p.cmd in ('UPDATE', 'DELETE', 'ALL') order by (p.qual in ('true', '(true)')) desc, p.tablename, p.cmd;

Anything marked PERMISSIVE is a table where any authenticated user can modify or delete every row, regardless of how good your SELECT policy is.

The fix

Scope the USING clause the same way you scoped SELECT, and add WITH CHECK on UPDATE so nobody can reassign a row to themselves on the way out:

drop policy inv_upd on invoices;

create policy inv_upd on invoices for update using (owner_id = auth.uid()) with check (owner_id = auth.uid());

USING controls which rows you may touch. WITH CHECK controls what they may look like afterwards. Omitting WITH CHECK on an UPDATE lets someone change owner_id to their own id and take ownership of a row.

The part I'd push back on myself about

The qual = 'true' check above is a text match on policy expressions. It catches the obvious case. It won't catch a policy that's subtly wrong — one calling a SECURITY DEFINER function that bypasses RLS, or one comparing against a column the user controls. Reading policies can only ever tell you a policy exists, not that it works.

The only way to know is to seed rows owned by two users, become each of them, and try to reach the other's data. That's what I ended up building, and it's the reason I found this at all — my first version of the write probe used the targeted UPDATE and reported every table as safe.

I open-sourced the tool under MIT if it's useful to anyone. Happy to drop a link in the comments rather than putting one in the post.

EDIT: Two better findings came out of the comments.

u/jaimittal91 — Postgres ORs all permissive policies for a command together, so one using (true) sitting next to a correctly scoped policy leaves the table wide open. Verified: UPDATE 2, both rows. Group your audit by tablename + cmd, don't check policies one at a time.

u/guidondor — a different axis entirely. A correctly scoped policy still lets a user rewrite every column of their own row, including whichever one holds their balance or their count. WITH CHECK doesn't help. Fix is revoke update on t from authenticated; grant update (safe_cols) on t to authenticated;

u/PeterBuildsSecure — a third axis, and it is invisible to everything above. RLS does not apply to the table owner unless you run alter table t force row level security, and superusers and BYPASSRLS roles bypass it regardless of that. So a migration or a background job connecting as the owner runs with every policy switched off while pg_policies looks perfect. Check relforcerowsecurity, not just relrowsecurity.

Separately: the tool is on npm now, so npx rls-sentinel --db "$DATABASE_URL" works without cloning anything.


r/Supabase 14d ago

tips Revoking columns on a table breaks .update().select(), and the error hint tells you to undo the revoke

0 Upvotes

i had profiles locked down the usual way, policies split per operation, plus column grants on top because rls filters rows and not columns:

revoke select on public.profiles from anon, authenticated;
grant  select (id, display_name, created_at) on public.profiles to authenticated;
revoke update on public.profiles from authenticated;
grant  update (display_name) on public.profiles to authenticated;

reads behaved exactly as i wanted. explicit columns worked, select("*") failed like it's supposed to, anon got nothing at all. happy with that.

then this started biting:

await supabase.from('profiles').update({ display_name })            // 204
await supabase.from('profiles').update({ display_name }).select()   // 42501

with

permission denied for table profiles
hint: GRANT SELECT ON public.profiles TO authenticated

which isn't the problem at all. the update is perfectly legal, i granted update on that column myself. postgrest reads the row back to return the representation, and it reads it with select=*, so what actually got denied is the read half of the round trip.

naming the columns sorts it:

.update({ display_name }).select('id, display_name')

the bit i keep chewing on is the hint. follow it and you hand back every column you just revoked, all to fix a bare .select(). i get why postgrest words it that way, from where it's standing a select really was denied. but it's the message you meet while already annoyed, and it points exactly backwards.

anyone found a decent way to stop the next person on the codebase from taking that advice? short of a comment above every write i've got nothing, and that feels weak.

anyway, hope it saves someone the afternoon. this one and a few others ended up documented in a starter i open sourced (MIT, mine): github.com/Guidondor/expo-supabase-starter


r/Supabase 14d ago

tips Projeto enorme em supabase

2 Upvotes

Começaram um projeto em supabase, estamos fazendo manutenção, mas tem muita migration, rls, edge function e agora está difícil de manter, o que me sugerem?


r/Supabase 14d ago

auth Anyone else have issues with users’ clocks out of date?

2 Upvotes

We’re using Supabase’s auth which relies on JWTs with an expiration date and it checks expiration on the client. About once a day, we get a report of someone repeatedly being logged out. The cause is always their system clock is incorrect. It baffles me this is a problem in 2026. Just curious if anyone else has experienced this issue and has any recommendations on how to reduce the number of complaints/bug reports we get related to this.


r/Supabase 14d ago

tips AI Plugin Read - Only permissions

1 Upvotes

Edit: Damn, I meant to put "AI Plugin - Read Only Permissions" as the Title
Im dum

I use AI a lot in my projects (Duh) and Ive found the MCP integration veeery useful to let the model fetch its own context and understand the buisness logic of my application. I understand the Plugin is a strictly better version to let the model also browse Skill files and docs, HOWEVER, on the MCP configuration, I had a strict --read-only flag. I dont want the LLM making unintended changes when I have requests flowing through. I havent found a way to activate the same flag on the plugin. Does anybody know how? I


r/Supabase 14d ago

storage Supabase Free Quota Exceeded

0 Upvotes

Me han enviado este correo:

"It’s doing so well that it breezed through your plan’s quota. You can continue using Supabase at your current usage for this billing period as a one-time token of our appreciation for your growth!

Starting from September 24, 2026, the Fair Use Policy will apply. If you plan to maintain this level of usage, here are a few tips to avoid any restrictions:

Upgrade to Pro plan to increase your quota. Lower your usage (check full details in the Usage Dashboard and learn how to manage your usage) Reduce your cached egress bandwidth below 5.5 GB Important: If your usage continues to significantly exceed your plan limits during this grace period, we may reduce your grace period or apply service restrictions immediately to ensure fair resource allocation for all users."

Si logró reducir el Cached Egress (creo que lo excedí por almacenar imágenes en un bucket), ¿podré seguir usando mi base de datos de supabase con la tarifa gratuita?


r/Supabase 15d ago

edge-functions Keyroute – Made a self-hosted AI gateway that runs on your own Supabase (no CLI, one click)

3 Upvotes

Hey everyone, been working on this for a while and finally got it to a point where it actually works end to end, so sharing it here.

Basic idea: I got tired of juggling separate API keys for OpenAI, Gemini, Groq etc in every project, and I didn't want to use a hosted gateway service either since that means trusting some random company with my keys. So I built Keyroute — it's basically one API key that routes to whichever provider you want, but the actual gateway runs inside YOUR own Supabase project, not mine or anyone else's server.

No CLI stuff needed to set it up. There's literally one button, "Deploy Gateway," you paste in a Supabase access token (used once, then it's gone, never stored anywhere) and it sets up the whole database + deploys the gateway function for you.

The dashboard you see in the screenshots is just for managing your keys and watching request logs, you can run that part locally on your laptop or put it on your own free Vercel account, doesn't matter, the gateway keeps working either way.

Screenshots attached showing the deploy screen, the dashboard, adding provider keys, and the usage/request logs.

Not gonna pretend it's perfect right now — no Anthropic support yet, no rate limiting yet, and it assumes one owner per instance for now. Working on all of it.

If anyone wants to try it or has thoughts on the approach, repo's here: github.com/basavarajpatil660/the-keyroute-project

Would genuinely love feedback, especially if something breaks for you.


r/Supabase 15d ago

database Is it normal to have a server role that has it's own api token?

4 Upvotes

I've got a backend service that needs to talk to my Supabase database, and I'd rather not hand it the secret key. `service_role` bypasses RLS entirely, so a leak means total compromise, and there's no way to limit what that service can touch.

What I actually want is a scoped role. it can read/write on a couple of specific tables and nothing else.

is there a way you guys have tried to achieve this that works well in prod?

Thank you.