Security checks for AI-built apps (Lovable, Supabase, Bolt): RLS, headers, monitoring, fixes.
Maintain this server? Claim it
Call this server's tools from your browser. Nothing to install.
Optional PatchLabs API key (pl_live_...) for the app tools. The free rls_check and headers_check tools work without one.
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.
Status, summary, report and fix for a check id.
This tool isn't marked read-only, so it may change something on the server or in an account you connected.
Pick your client. Values in capitals, like YOUR_TOKEN, are yours to fill in.
Run in a terminal
claude mcp add --transport http patchlabs https://api.patchlabs.dev/mcp
Headers
X-API-Key (optional, not in the config above): Optional PatchLabs API key (pl_live_...) for the app tools. The free rls_check and headers_check tools work without one.Status, summary, report and fix for a check id.
| Argument | Type | Description |
|---|---|---|
| check_id* | string |
{
"type": "object",
"required": [
"check_id"
],
"properties": {
"check_id": {
"type": "string"
}
},
"additionalProperties": false
}Grade a public site's HTTPS, TLS certificate, security headers and cookie flags from one load of its home page (no sign-up). Returns findings PL-027..PL-036 with fixes.
| Argument | Type | Description |
|---|---|---|
| url* | string | A public site, e.g. https://app.example.com |
{
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"description": "A public site, e.g. https://app.example.com"
}
},
"additionalProperties": false
}Apps monitored in the API key's workspace, with their last check. Needs X-API-Key.
No arguments.
{
"type": "object",
"required": [],
"properties": {},
"additionalProperties": false
}Scan a public repo's supabase/migrations for row-level-security mistakes (static analysis, no sign-up).
| Argument | Type | Description |
|---|---|---|
| repo* | string | Public GitHub repo, e.g. owner/name or https://github.com/owner/name |
{
"type": "object",
"required": [
"repo"
],
"properties": {
"repo": {
"type": "string",
"description": "Public GitHub repo, e.g. owner/name or https://github.com/owner/name"
}
},
"additionalProperties": false
}Queue a check for a monitored app now. Needs X-API-Key.
| Argument | Type | Description |
|---|---|---|
| app_id* | string |
{
"type": "object",
"required": [
"app_id"
],
"properties": {
"app_id": {
"type": "string"
}
},
"additionalProperties": false
}Request the full lab check. Returns a check id and a link; the repo owner proves ownership with a one-line file.
| Argument | Type | Description |
|---|---|---|
| repo* | string | Public GitHub repo, e.g. owner/name or https://github.com/owner/name |
| email* | string | Where the report goes |
{
"type": "object",
"required": [
"repo",
"email"
],
"properties": {
"repo": {
"type": "string",
"description": "Public GitHub repo, e.g. owner/name or https://github.com/owner/name"
},
"email": {
"type": "string",
"description": "Where the report goes"
}
},
"additionalProperties": false
}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 11, 2026.
No readOnlyHint / destructiveHint annotations, so clients can't tell a read from a write without asking.
Fix: Add annotations to each tool, e.g. { readOnlyHint: true } for tools that only read.