
Airlock RLS
io.github.mateuszinganoPublished by GitHub account mateuszinganov0.1.1Updated Oct 27, 2026
Scan a deployed site for an exposed Supabase service_role key and audit Row Level Security.
Overview
Local MCP wrapper that scans a deployed site for an exposed Supabase service_role key and audits Row Level Security on a Supabase database.
- What you can do
- Scan a deployed URL and its JS bundles for an exposed Supabase service_role JWT or sb_secret_ key, without printing the full key
- Audit a Postgres database's RLS using only catalog metadata: flags RLS-off tables, always-true policies, and anon/authenticated tenant leaks
- Report findings back to the coding agent so it can fix leaks while building the app
- When to use it
- Useful when building or reviewing a Supabase-backed app and you want the agent to check a deployed site for a leaked service_role key or verify that Row Level Security is enabled and not wide open.
- Requirements
- Runs locally over stdio via npx (Node.js 18 or newer). The key scan needs only the public site URL; the RLS audit needs a Postgres connection string, for which a read-only role is said to be enough.
Installation
In SourceWeft
- Open Airlock RLS in the dashboard and add it to a workspace.
- Enable the server for the chats that should use its tools.
Desktop only via STDIO. STDIO servers start a local process, so they need the SourceWeft desktop host.
Other MCP clients
Follow the launch instructions in the repository.
README
Airlock RLS MCP — Supabase leak checks inside your AI coding agent
Let Cursor, Claude Code, or any MCP client check a Supabase app for leaks while it builds it. It catches the most common vibe-coding footgun: a
service_rolekey shipped to the browser, and Row Level Security that's off or wide open.
The engine is Airlock RLS (npm i airlock-rls), the CI gate for Supabase RLS. This package is a thin MCP wrapper around it.
Two tools
scan_site_for_exposed_key — give it a deployed URL. It reads the page and its JS bundles for an exposed Supabase service_role key (a service_role JWT or an sb_secret_... key). No database, no credentials, just the public URL. A hit means anyone who reads it bypasses every RLS policy. It never prints the full key.
audit_supabase_rls — give it a Postgres connection string. It fails on RLS-off tables, permissive (always-true) policies, and anon/authenticated tenant leaks. It reads only catalog metadata (pg_tables, pg_policies, grants), never your row data, so a read-only role is enough.
Add it to your MCP client
That's the same block for Cursor (~/.cursor/mcp.json), Claude Desktop (claude_desktop_config.json) and other MCP clients. With Claude Code:
Then ask the agent things like "scan https://myapp.com for an exposed Supabase key" or "audit the RLS on this database" and it calls the tools.
Requirements
Node.js 18 or newer.
Develop
More
Guides on Supabase RLS, a live cross-tenant demo, and the hosted Airlock Monitor (continuous checks of your live database): shipsealed.com
License
MIT © Mateus Zingano
Source: README.md at commit c4fdef2
Tools
0Version history
1- v0.1.1LatestOct 14, 2026
Score
50% of the applicable checks met
How complete this listing is, computed from the registry entry, the endpoint and public sources. Not a rating of the server and not a statement that it is safe or working today: reachability is a dated check, and no installs or reviews go into the score.
- Reached in the last 30 days25 pts
Keep the endpoint answering the MCP handshake; SourceWeft probes it every 30 days.
- Auth declared10 pts
Declare the credential headers in the registry entry, or keep the endpoint answering the probe so its auth can be classified.
- Tools listed15 pts
Answer tools/list without a credential, or ship a package that starts in a sandbox without one.
- DescriptionRequired15 pts
- Logo10 pts
- Documentation15 pts
- License10 pts