database-sentinel
Security audit of a MongoDB deployment covering 20 anti-patterns, including MongoBleed (CVE-2025-14847), authentication disabled, internet-bound mongod, an Atlas allowlist of 0.0.0.0/0, server-side JavaScript, and privileged application users. Includes a single-packet, read-only MongoBleed detection probe that runs behind two opt-in confirmations.
Read-only security audit of a Supabase project, using a dedicated read-only role plus the project's REST URL and anon key. Provides four read-only tools, an audit prompt, and the anti-pattern catalog as resources to inspect RLS status, policies, views, exposed SECURITY DEFINER functions, grants and API exposure, then report scored findings (e.g. RLS disabled, USING (true), service-role key in frontend, views bypassing RLS, user_metadata in policies, mass assignment, public buckets) with exact fix SQL.
š”ļø Database Sentinel
Security audits for your database backend. Ask "audit my database" and get a scored report with exact fix code.
Works as a Claude Skill (Supabase, MongoDB), a read-only MCP server for any AI client, or a CLI agent that uses your own model (both Supabase).
ā MCP server setup and usage guide
ā Don't want to run it yourself? Locksoup is the hosted version: a Supabase security audit with scheduled re-checks and alerts.
Changelog
2026-10-01 (v1.0.1)
Fixed: an UPDATE policy without WITH CHECK is no longer reported as letting users reassign row ownership (Postgres reuses USING as the check). Q8's label and the agent prompt said otherwise, which produced false mass-assignment findings on real projects.
Benchmark: new dev case 027 from that project. Test F1 unchanged (0.836 vs 0.838, same day). Runs.
2026-09-30 (docs)
MCP flow benchmarked: a model driving the real server over stdio scored test F1 0.865, precision 0.905, critical recall 1.0 (results). Harness:
evals/mcp_client.py, eval systemm.
v1.0.0 (2026-09-30): MCP server release
MCP server v1.0: four read-only Supabase tools, an
auditprompt and the catalog resources. Benchmarked end to end: a model driving the server over stdio scored test F1 0.865, with critical recall 1.0.Verified on hosted Supabase: session pooler, read-only role with
BYPASSRLS, all 20 queries.Fewer false alarms:
Q1 now checks API grants: RLS off with
anon/authenticatedrevoked isn't reported as exposed.The audit prompt knows SECURITY INVOKER functions only have the caller's rights.
Found on a real project; new dev case
026.
Pin a version:
git+https://github.com/Farenhytee/database-sentinel@v1.0.0in anyuvx/pipxcommand. The Claude Code plugin is pinned automatically.Standard audit is now the CLI default: one prompt plus anon-probe verification, ~$0.0007 and ~15s per audit.
--deepruns the tool-using agent, which scored the same on our bench at ~5Ć the cost.
v0.2.1 (2026-09-30)
Test F1: agent 0.782 ā 0.831, single-prompt 0.766 ā 0.849. No crashes or timeouts (results).
Fixed:
A bad tool argument no longer ends the audit; the error goes back to the model.
OpenRouter calls route to the fastest provider (slow ones caused timeouts).
The agent's final findings step no longer lists candidates it had dismissed.
v0.2.0 (2026-09-29)
Published test results: agent F1 0.782, single-prompt 0.766, rules 0.559 on a blind, locked 10-case test split, 3 runs each (results).
Bench: 25 labeled cases (15 dev, 10 blind test).
Agent:
Verify step: probes as anon to confirm exploitable findings.
--fix: prints fix SQL for findings you pick. It's never executed.Cost reporting: tokens, $ and tool calls for each audit.
CI: free rules-only regression gate.
2026-09-29
One-command install: Claude Code plugin (skill + MCP server, prompts for your connection string) and an Add to Cursor button.
Install from GitHub: one command for the MCP server (
uvx --from git+⦠sentinel-mcp) and the agent (pipx install "database-sentinel[agent] @ git+ā¦").sentinel-mcp --role-sqlprints the read-only role setup SQL.Clearer errors: the MCP client now sees why a call failed, and the CLI prints a single-line error.
2026-09-28
New: MCP server for Supabase. Four read-only tools, an
auditprompt and the pattern catalog as resources. Your own LLM does the analysis, so it's free.New: lite agent (
sentinel-audit). A LangGraph pipeline that works with any OpenAI-compatible model: OpenRouter, OpenAI, or local Ollama.New: benchmark + evals. 10 labeled Supabase cases, with precision/recall/F1 compared across a rules baseline, a single-prompt baseline and the agent.
Fixed: six Supabase audit queries. Q8 (UPDATE without WITH CHECK) never matched anything, Q16 and Q19 missed rows for least-privilege roles, and Q6, Q13 and Q14 had wrong conditions.
Related MCP server: schema-guard-mcp
Quick start
Claude Code installs the audit skill and the MCP server in one go (needs uv):
claude plugin marketplace add Farenhytee/database-sentinel
claude plugin install database-sentinel@database-sentinelSupabase users: create the read-only login (step 1), then run /plugin configure database-sentinel@database-sentinel in Claude Code. Then ask: Audit my database.
Cursor
Other MCP clients, and full setup: MCP guide
Skill only (Claude Code picks it up automatically):
git clone https://github.com/Farenhytee/database-sentinel.git ~/.claude/skills/database-sentinelCLI agent (Supabase, bring your own model):
pipx install "database-sentinel[agent] @ git+https://github.com/Farenhytee/database-sentinel"
export SENTINEL_BASE_URL=http://localhost:11434/v1 SENTINEL_MODEL=<model> # Ollama, or any OpenAI-compatible API + SENTINEL_API_KEY
sentinel-audit --dsn "postgresql://sentinel_auditor:<password>@<host>:5432/postgres" \
--rest-url https://<ref>.supabase.co --anon-key <anon key> --repo ./my-appThe default audit is one prompt plus anon-probe verification. --deep runs a tool-using agent instead: same accuracy on our bench, ~5Ć the cost. --fix prints fix SQL for the findings you pick; it's never executed.
What it catches
Backend | Patterns | Examples |
Supabase | 27 (catalog) | RLS disabled, service-role key in frontend, |
MongoDB | 20 (catalog) | MongoBleed (CVE-2025-14847), auth disabled, |
Full tables are in Appendix A.
Safety
Read-only by default. Only system catalogs are read. The MCP server and agent can't write, drop or delete anything.
Your rows are never read. The audit role has no access to table data. Repo scans report file and line, never secret values.
Write and network probes are opt-in (Skill only). Details are in Appendix D.
Status
Backend | Skill | MCP server / agent |
Supabase | ā | ā |
MongoDB | ā | planned |
Firebase, Postgres, MySQL, cross-backend | planned | planned |
License
MIT. Exception: database_sentinel/agent/, database_sentinel/mcp_server/ and database_sentinel/kb/ are AGPL-3.0 (see the LICENSE in each).
Appendix
A. Pattern highlights
Supabase
Severity | Pattern | What |
š“ CRITICAL |
| Tables without Row-Level Security are fully exposed |
š“ CRITICAL |
| service_role key in frontend code bypasses all security |
š“ CRITICAL |
| Policies written but RLS never enabled |
š HIGH |
|
|
š HIGH |
| Views bypass RLS and run as their owner |
š HIGH |
| RLS-bypassing functions callable via the API |
š HIGH |
| Policies trust user-editable metadata |
š HIGH |
| Users can update privilege/billing columns on their own rows |
š HIGH |
| Unconfirmed sign-ups get authenticated sessions |
š HIGH |
| Leaked signing secret lets attackers forge any token |
š” MEDIUM | + 17 more |
MongoDB
Severity | Pattern | What |
š“ CRITICAL |
| Pre-auth heap memory disclosure; ~87K instances exposed at disclosure |
š“ CRITICAL |
| No authentication (Meow ransomware surface) |
š“ CRITICAL |
|
|
š“ CRITICAL |
| Cluster reachable from anywhere |
š HIGH |
|
|
š HIGH |
| App connects as |
š HIGH |
| NoSQL injection over HTTPS |
š” MEDIUM | + 13 more |
The MongoBleed probe (mongobleed-probe.md) is a single-packet, read-only detector. It was verified against mongo:7.0.20 (vulnerable) and 7.0.28 (patched), and runs only after two opt-in confirmations.
B. How the Skill audits
Detect backends. 2. Scan code for exposed credentials. 3. Introspect schema, policies and config. 4. Match against the anti-pattern catalogs. 5. Probe safely (opt-in). 6. Score and report. 7. Generate fix code.
Only SKILL.md (~2K tokens) and core/* load up front; each backend's files load only when that backend is detected.
C. Example output
āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā
ā SENTINEL SECURITY AUDIT ā
ā Backends: supabase Score: 35/100 š“ ā
āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā
š“ CRITICAL ā public.users: RLS Disabled [RLS_DISABLED]
Risk: Anyone on the internet can read your entire users table.
Attack: Copy the anon key from DevTools ā curl the API ā dump all rows.
Source: CVE-2025-48757 / Splinter 0013_rls_disabled_in_public
Fix: ALTER TABLE public.users ENABLE ROW LEVEL SECURITY;
CREATE POLICY "users_select_own" ON public.users FOR SELECT
TO authenticated USING ((SELECT auth.uid()) = id);D. Safety details
Supabase write probes:
Prefer: tx=rollback, so no data is modified.MongoDB write probes: session +
abortTransaction()on replica sets; canary insert + delete on standalone (opt-in).MongoBleed network probe: double opt-in; some monitoring tools alert on the 42-byte probe packet.
Auth probes use
.invalidemail domains (RFC 6761).Credentials are held in memory for the audit only, and redacted in reports.
MCP server: five independent read-only layers (details).
E. Benchmark and evals
bench/cases/ holds labeled Supabase schemas applied to a local Supabase. evals/ scores three systems on precision, recall and F1: R0 (rules, no LLM), B0 (single prompt) and A (agent). The test split is frozen and never tuned on.
Test split (10 blind, locked cases), deepseek-v4-flash, 3 runs each:
Version | System | Precision | Recall | F1 | CRITICAL recall | $/audit |
v1.0.0 | MCP server (model as MCP client, details) | 0.905 | 0.833 | 0.865 | 1.000 | $0.0037 |
v0.2.1 | A (agent) | 0.851 | 0.818 | 0.831 | 1.000 | $0.0044 |
v0.2.1 | B0 (single prompt) | 0.810 | 0.894 | 0.849 | 1.000 | $0.0008 |
v0.2.0 (frozen, details) | A (agent) | 0.774 | 0.803 | 0.782 | 1.000 | $0.0024 |
v0.2.0 (frozen) | B0 (single prompt) | 0.795 | 0.743 | 0.766 | 0.889 | $0.0016 |
both | R0 (rules) | 0.413 | 0.864 | 0.559 | 1.000 | $0 |
v0.2.1 fixes the crashes and timeouts seen in the v0.2.0 test run. The fixes were diagnosed on dev only, but they came from test failures, so v0.2.0 is the blind number (v0.2.1 details). A and B0 are within noise of each other. The agent is more precise, gives fewer false alarms on clean projects and verifies findings as anon, at ~5Ć the cost.
pip install -e ".[dev]" && supabase start && python -m evals.run --split devF. Continuous monitoring (GitHub Actions)
Templates: github-action-supabase.yml and github-action-mongodb.yml. They run on migration, rule or IaC changes, weekly, or manually, then comment on the PR and fail the build on critical findings. Ask Claude: "Set up continuous security monitoring for this project."
G. Repo layout
SKILL.md, core/, backends/{supabase,mongodb}/, references/ Claude Skill (MIT)
database_sentinel/mcp_server/ MCP server (AGPL)
database_sentinel/agent/ lite agent (AGPL)
bench/, evals/, tests/, supabase/ benchmark, eval harness, local Supabase
docs/mcp.md MCP setup guide
compat/supabase-sentinel/ old skill name shimH. Research sources
CVE-2025-48757 (170+ Lovable apps), Escape.tech (2,000+ vulns in 5,600 vibe-coded apps), Veracode (45% of AI code has OWASP Top 10 issues), CMU SusVibes, ModernPentest (20.1M rows, 107 YC startups), Supabase Splinter lints, CVE-2025-14847 MongoBleed, Mongoose CVE-2024-53900 / CVE-2025-23061, CIS MongoDB 7 Benchmark. Full list: vibe-coding-context.md, cve-feed.md.
I. Contributing
Most valuable: new anti-patterns with evidence (CVE, breach report, or lint), better fix templates, false-positive/negative reports from live use, and new backends following backends/supabase/. Fork, branch, and open a PR with the pattern and its source. Contributions to the AGPL directories need a CLA.
J. Naming history
Supabase Sentinel (v1) ā Database Sentinel (v3, multi-backend). The supabase-sentinel name still works through compat/supabase-sentinel/.
Available Tools
4 toolsget_schemaD
Tables, views, columns, grants and functions in a schema.
| Name | Required | Description | Default |
|---|---|---|---|
| schema | No | public |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden, and it discloses nothing: not that this is a read-only operation, not permission/privilege requirements (relevant given it reports grants), and not the shape or size of the result. For an introspection tool with zero annotation coverage this is a serious gap.
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 short, but brevity here reflects under-specification rather than conciseness; it is a sentence fragment with no verb and no structure to front-load. Nothing is wasted, but nothing earns its place either.
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 no annotations, no output schema, and an undocumented parameter, the description is the only source of information and it omits the operation itself, its safety profile, its defaults, and its return content. An agent cannot reliably invoke this tool from what is given.
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 single 'schema' parameter has 0% schema description coverage and a default of 'public' that the description never mentions. The phrase 'in a schema' only loosely gestures at the parameter and provides no format, default behavior, or fallback semantics.
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 is a noun phrase ('Tables, views, columns, grants and functions in a schema') with no verb, so it never states that the tool retrieves or introspects anything. It adds the list of returned object types beyond the bare name get_schema, but an agent must infer the action entirely. It also does not distinguish this tool from siblings like run_audit_query or scan_repo.
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?
There is no when-to-use guidance, no mention of when an agent should prefer this over run_audit_query or scan_repo, and no prerequisites. The only hint of context is the phrase 'in a schema', which is not actionable guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
probe_as_anonB
Check via PostgREST whether the anon key can read a table (row count only).
| Name | Required | Description | Default |
|---|---|---|---|
| op | No | select | |
| table | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It usefully discloses the transport (PostgREST) and that only a row count is returned, not the rows themselves, which tells the agent this is a read-only existence/visibility probe. However it says nothing about side effects, failure semantics, permissions required to run the probe, rate limits, or what a denial returns.
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?
A single tight sentence that front-loads the action and scoping constraint ('row count only') with no wasted words. Well sized for a two-parameter probe.
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?
For a simple probe with no output schema and no annotations, the core purpose is conveyed, but the undocumented 'op' parameter and the absence of any usage/alternative context leave gaps. It is adequate but not complete for correct invocation.
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 coverage is 0%, so the description should compensate, but it adds meaning only for the 'table' parameter (implicitly the target). The 'op' parameter, which defaults to 'select', is never mentioned in the description, leaving its allowed values and impact undocumented anywhere the agent can see.
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?
States a specific verb (check/probe) and resource (whether the anon key can read a table), with the mechanism (PostgREST) named. This is distinguishable from siblings like run_audit_query or get_schema, though it doesn't explicitly contrast itself with them.
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?
No guidance on when to use this versus run_audit_query or get_schema, and no stated prerequisites. Usage is only implied by the phrase 'whether the anon key can read a table', which suggests an access-control/RLS probe but leaves the triggering condition to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
run_audit_queryC
Run one allowlisted audit query (Q1..Q20 from audit-queries.md).
| Name | Required | Description | Default |
|---|---|---|---|
| query_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It implies a read-only audit operation via 'audit query' and reveals the allowlist constraint, but says nothing about required permissions, behavior on an invalid or non-allowlisted query_id, cost/runtime, or side effects.
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?
A single front-loaded sentence with no filler; the scope constraint is stated immediately. It is efficient, though its brevity leaves real gaps that are penalized under other dimensions rather than here.
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?
Because an output schema exists, return values need not be described. However, for a single-parameter tool whose only parameter is unconstrained in schema, the definition should have enumerated or referenced the accepted query_id values more concretely, and given at least a hint of usage context relative to the other tools.
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 coverage is 0% and query_id has no title/description beyond its name, so the schema contributes nothing. The description partially compensates by pointing to Q1..Q20 in audit-queries.md, but it does not state the accepted literal format (e.g. 'Q1' vs '1') or that the values form an enumerable set, leaving the agent to guess valid values.
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?
States a specific verb (run) and resource (audit query) with an explicit scope constraint: allowlisted queries Q1..Q20. An agent immediately knows this executes a predefined audit query rather than an arbitrary one. It does not explicitly differentiate from the sibling tools, but those (get_schema, probe_as_anon, scan_repo) share no surface ambiguity.
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?
The description constrains inputs to the allowlist but never says when this tool should be chosen over siblings like scan_repo or get_schema, nor when an audit query is the right approach versus a direct schema read. No exclusions or prerequisites are stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
scan_repoA
Scan the configured repo for exposed service-role keys / JWT secrets (locations only).
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden, and it does disclose one genuinely useful trait: results are 'locations only', so secret values are not returned. It says nothing about required permissions, whether the scan is read-only, runtime cost, or repo configuration assumptions.
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?
A single tight sentence with the target class front-loaded and the important output caveat attached inline. Every clause earns its place and there is no padding.
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?
An output schema exists and the tool has no parameters, so return-value and argument explanation are not needed. The main remaining gap is behavioral context (permissions, read-only nature, which repo is 'configured'), which is thin but not fatal for a no-arg scan.
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 there is nothing for the description to clarify beyond what the empty schema already conveys. Baseline 4 applies for a 0-parameter 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 (Scan) and resource (the configured repo) plus the exact target class (exposed service-role keys / JWT secrets). It implicitly separates itself from siblings like run_audit_query and probe_as_anon, but never names an alternative explicitly, so sibling differentiation is only inferred.
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?
There is no guidance on when to reach for this tool versus run_audit_query, probe_as_anon, or get_schema. The parenthetical '(locations only)' scopes the output but does not tell an agent when the tool is appropriate or what prerequisites must hold.
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.
4 tool updates
v1.0.1- First observed
get_schema - First observed
probe_as_anon - First observed
run_audit_query - First observed
scan_repo
TDQS
Scored across 4 tools
Each tool has a clearly distinct focus: running allowlisted audit queries, introspecting schema metadata, probing anon-key read access, and scanning a repo for secrets. Overlap is minimal, even though run_audit_query and get_schema both touch database information, because their actions and outputs are different.
All names use snake_case and begin with a verb, giving a readable, predictable pattern. Minor structural variation appears in run_audit_query and probe_as_anon, but conventions are not mixed.
Four tools are well-scoped for a focused database-security auditing server. Each tool covers a distinct security check, and none feels redundant or trivial.
The core security-auditing operations are represented: query-based checks, schema inspection, anon access probing, and repo secret scanning. However, there is no tool to list available audit queries, aggregate findings, or inspect other access-control details such as authenticated roles and policies.
Maintenance
Related MCP Connectors
Scan a deployed app URL for exposed keys, open Supabase tables and missing security headers.
Safe, read-only Postgres and MySQL access for AI agents. Audit log + column-level controls.
Deterministic safety, correctness & cost gate that vets Postgres SQL before your AI agent runs it.
Audit GitHub repos for malicious and supply-chain code before you depend on them.
Related MCP Servers
- AlicenseAqualityCmaintenanceMCP server that lets AI coding agents (Claude Code, Cursor, Cline) audit Supabase projects for security misconfigurations AND apply the fixes ā without leaving the agent. Tools: audit_project, list_findings, preview_fix (BEGIN/ROLLBACK safety), apply_fix (with confirmation), apply_all_fixes (transactional bulk). Closes the audit-fix loop entirely in the agent ā other Supabase scanners only report.58 npm1MIT
- FlicenseAqualityDmaintenanceAudits PostgreSQL/Supabase schemas for security issues like missing RLS, permissive policies, and sensitive data exposure during AI conversations.3-
- AlicenseAqualityAmaintenanceProvides an AI agent with read-only PostgreSQL access, enabling schema browsing, foreign-key exploration, column search across tables, capped SELECT queries, and offline data dictionary export while rejecting write operations.913 npmMIT
- AlicenseNot gradedqualityBmaintenanceEnables safe, read-only SQL exploration and debugging on Supabase Edge Functions, respecting user JWTs. It inspects schemas, explains query plans, proposes RLS policies, and runs guarded queries without destructive operations.MIT