Skip to main content
Glama

Deadbolt

Server Details

Check Supabase SQL for who can read and write each table: RLS gaps, open policies, grants, fix SQL.

Ownership verified
Status
Healthy
Last Tested
Transport
Streamable HTTP · MCP 2025-11-25
URL
ChatGPT
–
Claude
–

TDQS

A4.4/5.0

Scored across 2 tools

Disambiguation4/5

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.

Naming Consistency4/5

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.

Tool Count3/5

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.

Completeness4/5

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 tools
deadbolt_catalog_queryGet the read-only SQL that snapshots a live Supabase database for DeadboltA
Read-onlyIdempotent
Inspect

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.

NameRequiredDescriptionDefault

No parameters

TDQS

A4.6/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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)A
Read-onlyIdempotent
Inspect

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.

NameRequiredDescriptionDefault
sqlYesMigration SQL (one or many files concatenated, in order), or the single JSON value returned by the catalog query.
project_created_before_2026_10_30NoOnly 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

A4.6/5.0
Behavior5/5

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.

Conciseness4/5

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.

Completeness5/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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.

  1. 2 tool updates
    • First observeddeadbolt_catalog_query
    • First observeddeadbolt_check_supabase_access

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    D
    maintenance
    Audits PostgreSQL/Supabase schemas for security issues like missing RLS, permissive policies, and sensitive data exposure during AI conversations.
    3
    MIT
  • A
    license
    Not graded
    quality
    C
    maintenance
    Enables 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.
    1
    MIT
Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources