Call this server's tools from your browser. Nothing to install.
Requests go through mcptry because browsers can't call most MCP servers directly. Header values are sent to the server for that request only and are never stored or logged.
Tool list from our last check. Connect live to refresh it.
Checks the JSON from get_supabase_snapshot_sql: tables anyone can read, RLS off, policies that only check for a signed-in user (public in practice when sign-ups are open), users who can update their own role or plan columns, exposed SECURITY DEFINER functions, public buckets. Pass auth_config (the project's Auth settings) when you can: it decides whether 'any signed-in user' means anyone. Pass previous_issue_keys from an earlier result to see what is closed, still open or new. Returns each issue with its SQL fix and a fix prompt.
The single value returned by the snapshot SQL (the guardlayer_snapshot column), as a JSON string or object.
Optional. The project's Auth settings from the Supabase Management API (GET /v1/projects/{ref}/config/auth). Only these fields are read; everything else is dropped: disable_signup, external_email_enabled, external_anonymous_users_enabled, password_hibp_enabled, password_min_length, mailer_autoconfirm, mailer_otp_exp, mailer_secure_email_change_enabled, security_update_password_require_reauthentication, refresh_token_rotation_enabled, security_captcha_enabled, mfa_totp_verify_enabled, mfa_phone_verify_enabled, mfa_web_authn_verify_enabled
Optional. issue_keys from the previous check of the same project, to confirm which fixes landed.
Pick your client. Values in capitals, like YOUR_TOKEN, are yours to fill in.
Run in a terminal
claude mcp add --transport http guardlayer https://www.guardlayer.io/api/mcp
Checks the JSON from get_supabase_snapshot_sql: tables anyone can read, RLS off, policies that only check for a signed-in user (public in practice when sign-ups are open), users who can update their own role or plan columns, exposed SECURITY DEFINER functions, public buckets. Pass auth_config (the project's Auth settings) when you can: it decides whether 'any signed-in user' means anyone. Pass previous_issue_keys from an earlier result to see what is closed, still open or new. Returns each issue with its SQL fix and a fix prompt.
| Argument | Type | Description |
|---|---|---|
| snapshot* | any | The single value returned by the snapshot SQL (the guardlayer_snapshot column), as a JSON string or object. |
| auth_config | object | Optional. The project's Auth settings from the Supabase Management API (GET /v1/projects/{ref}/config/auth). Only these fields are read; everything else is dropped: disable_signup, external_email_enabled, external_anonymous_users_enabled, password_hibp_enabled, password_min_length, mailer_autoconfirm, mailer_otp_exp, mailer_secure_email_change_enabled, security_update_password_require_reauthentication, refresh_token_rotation_enabled, security_captcha_enabled, mfa_totp_verify_enabled, mfa_phone_verify_enabled, mfa_web_authn_verify_enabled |
| previous_issue_keys | array | Optional. issue_keys from the previous check of the same project, to confirm which fixes landed. |
{
"type": "object",
"required": [
"snapshot"
],
"properties": {
"snapshot": {
"description": "The single value returned by the snapshot SQL (the guardlayer_snapshot column), as a JSON string or object."
},
"auth_config": {
"type": "object",
"description": "Optional. The project's Auth settings from the Supabase Management API (GET /v1/projects/{ref}/config/auth). Only these fields are read; everything else is dropped: disable_signup, external_email_enabled, external_anonymous_users_enabled, password_hibp_enabled, password_min_length, mailer_autoconfirm, mailer_otp_exp, mailer_secure_email_change_enabled, security_update_password_require_reauthentication, refresh_token_rotation_enabled, security_captcha_enabled, mfa_totp_verify_enabled, mfa_phone_verify_enabled, mfa_web_authn_verify_enabled"
},
"previous_issue_keys": {
"type": "array",
"items": {
"type": "string"
},
"description": "Optional. issue_keys from the previous check of the same project, to confirm which fixes landed."
}
}
}Returns the read-only SQL for the live Supabase check and how to run it. It reads only catalog metadata (table and column names, RLS flags, policies, grants, triggers, SECURITY DEFINER functions, bucket settings), never table rows, and returns one JSON value.
No arguments.
{
"type": "object",
"properties": {}
}Static security scan of a Next.js + Supabase codebase: secrets in code or public env vars (NEXT_PUBLIC_, VITE_), service role keys in client code, RLS off or open policies in supabase/migrations, unauthenticated API routes, Server Actions and Edge Functions, unsafe redirects and more. Send source files (ts, tsx, js, jsx, sql, .env*, config files) with paths relative to the project root; skip node_modules, build output and lockfiles. Up to 300 files and 4 MB per call; split bigger projects. Files are scanned in memory and discarded.
| Argument | Type | Description |
|---|---|---|
| files* | array | |
| ignore | string | Optional contents of a .guardlayerignore (gitignore syntax) to skip fixtures. |
{
"type": "object",
"required": [
"files"
],
"properties": {
"files": {
"type": "array",
"items": {
"type": "object",
"required": [
"path",
"content"
],
"properties": {
"path": {
"type": "string",
"description": "Path relative to the project root, e.g. app/api/user/route.ts"
},
"content": {
"type": "string",
"description": "Full file contents"
}
}
},
"maxItems": 300
},
"ignore": {
"type": "string",
"description": "Optional contents of a .guardlayerignore (gitignore syntax) to skip fixtures."
}
}
}We read every tool's name, description and inputs the way the model will, looking for instructions hidden from you. A clean result means no warning signs, not a guarantee. Scanned Nov 10, 2026.