Deadbolt
Server Details
Check Supabase SQL for who can read and write each table: RLS gaps, open policies, grants, fix SQL.
- Status
- Healthy
- Last Tested
- Transport
- Streamable HTTP · MCP 2025-11-25
- URL
- ChatGPT
- –
- Claude
- –
TDQS
Scored across 2 tools
The two tools have clearly different roles: one emits a read-only catalog SQL to capture live database state, the other replays migration SQL and reports access findings. Because both revolve around Supabase access and one feeds into the other, an agent could occasionally invoke the catalog query when it wanted an analysis, but the descriptions state the intended entry points fairly explicitly.
Both names use the same 'deadbolt_' prefix and snake_case, which is predictable. The only minor deviation is the internal shape: 'catalog_query' reads as a noun phrase while 'check_supabase_access' is verb_object, so the pair isn't a perfectly parallel verb_noun pattern.
Two tools is thin, though the server targets a narrow, well-defined job (RLS/privilege auditing) and each tool has a genuine role. It sits on the borderline where the surface feels small enough that agents may expect additional operations such as parsing an existing schema dump or diffing two catalogs.
The pair covers both paths an auditor needs: introspecting a live project catalog and statically analyzing migration SQL, with findings plus fix SQL returned. Remaining gaps are modest — no way to diff two catalog snapshots over time or verify that fixes were applied — but core audit workflows are covered end to end.
Available Tools
2 toolsdeadbolt_catalog_queryGet the read-only SQL that snapshots a live Supabase database for DeadboltARead-onlyIdempotentInspect
Use when you need to check a live Supabase project rather than migration files: returns a read-only SQL query that reads table RLS settings, grants for anon and authenticated, policies, SECURITY DEFINER functions and storage buckets (never row data) and returns one JSON value. Run it with the user's Supabase SQL Editor or a Supabase MCP execute_sql tool, then pass the JSON to deadbolt_check_supabase_access.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint and destructiveHint=false, so the safety profile is covered. The description adds genuinely new behavior: it never reads row data, it emits a single JSON value rather than a result set, and it must be executed externally via the Supabase SQL Editor or an execute_sql MCP tool. It stops short of noting practical execution limits (query runtime, result size, required privileges), which keeps it from a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
It is front-loaded with the 'Use when' trigger and every clause carries a distinct fact (source of truth, what is read, what is excluded, return shape, how to run it, next tool). The first sentence is long and heavily parenthesized, which slightly hurts scannability, but there is no filler to cut.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With zero parameters, no output schema and annotations covering the safety profile, the description supplies everything else an agent needs: why to choose it, what the SQL inspects and does not inspect, that the return is one JSON value, how to execute it, and where to send the result. Nothing material is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so the baseline is 4. The description correctly implies there is nothing to configure — the SQL is generated as-is — and adds the meaningful invocation detail that execution happens outside this tool.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource ('returns a read-only SQL query') and enumerates exactly what the query covers: RLS settings, anon/authenticated grants, policies, SECURITY DEFINER functions, storage buckets. It also draws the key boundary against the sibling workflow ('rather than migration files'), so an agent can distinguish it without opening any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives an explicit trigger ('Use when you need to check a live Supabase project rather than migration files'), the alternative it replaces, and the follow-up routing ('pass the JSON to deadbolt_check_supabase_access'). The agent knows both when to pick this tool and what to do with its output.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
deadbolt_check_supabase_accessCheck who can read and write Supabase tables (RLS, policies, grants)ARead-onlyIdempotentInspect
Use when you write, review or are about to apply Supabase / PostgreSQL migration SQL (CREATE TABLE, RLS, CREATE POLICY, GRANT, views, SECURITY DEFINER functions, storage buckets), or when a user asks whether their Supabase data is exposed, whether RLS is set up right, or why a query returns 42501 permission denied or no rows. Replays the SQL with real Postgres rules and returns, per table, what signed-out (anon) and signed-in (authenticated) users can SELECT/INSERT/UPDATE/DELETE (all rows, own rows, some rows, none, or denied for a missing grant), plus findings with severity and ready-to-run fix SQL: RLS off, policies written but RLS never enabled, using(true) writes, personal columns readable by anyone, views that bypass RLS, SECURITY DEFINER functions anyone can call, user_metadata in policies, public bucket listing, grants missing after the Oct 30 2026 default change. Also accepts the JSON produced by deadbolt_catalog_query for the live database. Deterministic; never connects to any database. Run it before telling a user their schema is safe. Up to 200,000 characters.
| Name | Required | Description | Default |
|---|---|---|---|
| sql | Yes | Migration SQL (one or many files concatenated, in order), or the single JSON value returned by the catalog query. | |
| project_created_before_2026_10_30 | No | Only for SQL input. true (default): the project grants new public tables to anon and authenticated automatically (projects created before Oct 30, 2026). false: new tables get no grants unless the SQL grants them (projects created on or after Oct 30, 2026). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations (readOnly, idempotent, closed-world, non-destructive), it discloses the crucial behavioral facts: it is deterministic, never connects to any database, and enforces a 200,000-character input cap. It also enumerates the shape of the result (per-table anon/authenticated SELECT/INSERT/UPDATE/DELETE verdicts plus severity-ranked findings with fix SQL), which the annotations cannot convey.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
It is front-loaded with the triggering condition and organized around a single dense paragraph, with no filler sentences. The long enumeration of finding types and the parenthetical SQL keyword list make it heavier than necessary, but each element carries real information an agent would use.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, yet the description fully compensates by describing the per-table verdict matrix and the severity/fix-SQL findings. For a nontrivial static-analysis tool, the agent has enough to decide to call it, choose the input form, and interpret what comes back.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so both parameters are already fully documented in the input schema, including the two accepted input forms and the before/after Oct 30 2026 grant semantics. The description only echoes those forms and supplies the motivating context for the date flag, so it meets but does not exceed the baseline for a fully documented schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb-and-resource pair: replaying Supabase/PostgreSQL migration SQL against real Postgres rules to determine per-table read/write access. It is clearly separable from the sibling deadbolt_catalog_query, which it explicitly consumes output from, and from unrelated siblings like doorman_check_robots_txt.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It states exactly when to reach for it (writing/reviewing/applying migration SQL, user asking if data is exposed, diagnosing 42501 or empty results) and gives an explicit imperative: 'Run it before telling a user their schema is safe.' It also names the alternative input path (JSON from deadbolt_catalog_query) so the agent knows it need not re-run the catalog query.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
2 tool updates
- First observed
deadbolt_catalog_query - First observed
deadbolt_check_supabase_access
Related MCP Connectors
Check Supabase migrations for RLS and grant gaps; fixes for Supabase, Vercel, Stripe errors.
Deterministic safety, correctness & cost gate that vets Postgres SQL before your AI agent runs it.
Your Supabase account in natural language: run SQL, apply migrations, manage tables, storage, edge f
Security scans for AI-built apps: leaked keys, open Supabase RLS, vulnerable packages, live sites.
Related MCP Servers
- AlicenseBqualityBmaintenanceRead-only security audit for Supabase. Surfaces RLS gaps, permissive policies, exposed functions and grants, and returns scored findings with fix SQL that is never executed.6451MIT
- AlicenseAqualityDmaintenanceAudits PostgreSQL/Supabase schemas for security issues like missing RLS, permissive policies, and sensitive data exposure during AI conversations.3MIT
- AlicenseNot gradedqualityCmaintenanceEnables AI coding agents to audit Supabase or Postgres databases for Row Level Security and multi-tenant isolation holes, reading tables, grants, policies and functions for static findings and optionally probing those policies inside a rolled-back transaction. It reports each hole with an explanation and a fix, so an agent can verify the migrations it just wrote before declaring them done.1MIT
- AlicenseAqualityAmaintenanceRead-only Supabase RLS check: explains in Arabic which tables anyone can read or change. No keys.2424 npmMIT
Glama MCP Gateway
Add one secure layer between your agents and this server.