mcpField
P
PatchLabs

PatchLabs

远程服务
github.com/manra399安全0今天更新
代码仓库

关于 PatchLabs

PatchLabs 检查 AI 构建的应用是否存在数据访问泄漏,并提供经过测试的修复方案。适合希望验证数据库访问规则、查看检查结果并监控已登记应用的团队。

主要功能

  1. 01检查个人数据是否暴露
  2. 02经实验验证的修复方案
  3. 03检查报告与可下载修复
  4. 04应用监控与状态徽章
  5. 05工作区、API 密钥和 Webhook 管理

适用场景

  1. 01检查代码库的数据库访问规则
  2. 02审阅并应用已验证的修复
  3. 03监控已登记应用的安全检查

MCP 相关

API 提供 MCP 端点,包含 RLS 检查、启动和获取检查、列出应用及运行检查的工具。

配置

远程服务无需本地安装。选择你使用的客户端,复制配置或使用一键安装。

服务地址https://api.patchlabs.dev/mcp
一键复制安装命令
Claude CodeTerminal
Cursor.cursor/mcp.json
VS Code.vscode/mcp.json
Claude Desktopclaude_desktop_config.json
Windsurf~/.codeium/windsurf/mcp_config.json

命令在终端中运行;JSON 粘贴到对应客户端的 MCP 配置后重启。需要授权的服务会在首次连接时提示登录。

全部服务地址
Streamable HTTPhttps://api.patchlabs.dev/mcp需要授权

工具

详细介绍

PatchLabs

为 AI 构建的应用检查数据泄露并测试修复方案:https://patchlabs.dev

部分位置运行环境
docs/网站:落地页、检查状态和报告页面、隐私政策GitHub Pages(patchlabs.dev)
api/FastAPI:检查、账户、工作区、受监控的应用、回执、免费 RLS 工具、MCP(参见下文 API)Azure Container Apps(api.patchlabs.dev)
db/schema.sqlPostgres 架构,幂等且仅添加;由 API 在启动时应用Azure Database for PostgreSQL,数据库 patchlabs
worker/接收已验证的检查,在实验环境中运行流水线(Docker + Claude Code),发布报告;删除超过 30 天的运行文件夹Manraj 的 Mac,通过 launchd 保持运行

流程

  1. 访问者在 patchlabs.dev 输入 GitHub 仓库和电子邮件 → POST /checks。
  2. 他们通过提交包含一次性代码的 patchlabs-verify.txt 来证明仓库属于自己 → POST /checks/{id}/verify。
  3. Worker 领取检查(POST /worker/claim),在实验环境中根据仓库的迁移文件重建数据库,找出会被不该访问的人读取的个人数据,让修复 Agent 编写修复方案(先使用 Haiku;仅当实验环境中的验证失败时,才升级到 Sonnet,然后是 Opus),并发布报告(POST /worker/checks/{id}/result)。
  4. 检查页面会显示报告、证明表和修复方案,并提供修复方案下载。配置 SMTP 后,每个步骤完成时都会发送电子邮件。

API

合约:SPEC.md。所有内容均为 JSON;错误格式为 {"detail": "..."}。已登录的调用发送 Authorization: Bearer <session>, CI 调用发送 X-API-Key: pl_live_...,工作器和管理员调用发送各自的 bearer 令牌。

模块端点
app.pyGET /health、POST /checks、GET /checks/{id}、POST /checks/{id}/verify、POST /worker/heartbeat|claim(claim 也会运行调度器)、POST /worker/checks/{id}/result、GET /admin/checks
accounts.pyPOST /workspaces/{wid}/webhook/rotate-secret、POST /auth/start|finish|logout、POST /invites/accept、GET|PATCH|DELETE /me、GET /me/export、GET /me/checks、GET|PATCH /workspaces/{wid}、POST /workspaces/{wid}/webhook/test、POST /workspaces/{wid}/invites、DELETE /workspaces/{wid}/invites/{id}、PATCH|DELETE /workspaces/{wid}/members/{uid}、GET|POST /workspaces/{wid}/api-keys、DELETE /workspaces/{wid}/api-keys/{kid}、POST /workspaces/{wid}/upgrade-request、GET /admin/workspaces、PATCH /admin/workspaces/{wid}、GET /admin/upgrade-requests
monitor.pyGET|POST /workspaces/{wid}/apps、GET|PATCH|DELETE /apps/{aid}、POST /apps/{aid}/verify、POST /apps/{aid}/checks、GET /badge/{aid}.svg、GET /public/apps/{aid}、GET /stats、POST /v1/apps/{aid}/checks、GET /v1/checks/{cid}
receipts.pyPOST /checks/{id}/decision、POST /checks/{id}/answers、GET /checks/{id}/decisions(成员)、GET /receipts/{id}、GET /.well-known/patchlabs-receipt-key
rls.pyPOST /tools/rls-check
mcp_server.pyPOST /mcp(工具:rls_check、start_check、get_check、list_apps、run_check)

环境变量:DATABASE_URL、WORKER_TOKEN、ADMIN_TOKEN、SITE_URL、CORS_ORIGINS、SMTP_*、RECEIPT_PRIVATE_KEY(必需:32 字节 Ed25519 种子的 base64 编码,python3 -c "import os,base64;print(base64.b64encode(os.urandom(32)).decode())";除非设置了 PATCHLABS_DEV=1,否则 API 会拒绝启动),可选的 GITHUB_TOKEN、FOUNDER_EMAIL。测试钩子:EMAIL_OUTBOX、GITHUB_API、RAW_GITHUB。安全规则(速率限制、验证、屏蔽):参见 SPEC.md 中的“安全规则”。

Webhook 使用签名:X-PatchLabs-Signature: v1=<hex HMAC-SHA256 of "<timestamp>.<raw body>">,使用工作区的 whsec_ 密钥和 X-PatchLabs-Timestamp;验证代码片段见 https://patchlabs.dev/docs/webhooks#security。

验证收据(签名字节为将键排序并使用 (",", ":") 分隔符的 JSON 格式收据):

import base64, json, urllib.request
from cryptography.hazmat.primitives.asymmetric.ed25519 import Ed25519PublicKey
API, CHECK = "https://api.patchlabs.dev", "<check id>"
r = json.load(urllib.request.urlopen(f"{API}/receipts/{CHECK}"))
k = json.load(urllib.request.urlopen(f"{API}/.well-known/patchlabs-receipt-key"))
assert r["key_id"] == k["key_id"], "signed with a different key"
msg = json.dumps(r["receipt"], sort_keys=True, separators=(",", ":")).encode()
pub = Ed25519PublicKey.from_public_bytes(base64.b64decode(k["public_key"]))
pub.verify(base64.b64decode(r["signature"]), msg)  # raises InvalidSignature if anything was changed
print("receipt is genuine:", r["receipt"]["status"], r["receipt"]["tables_leaking"])

测试:tools/test-api.sh 会在 Docker 中运行完整测试套件(临时启动 postgres:17 + python:3.13-slim),并在结束后清理;额外参数会传递给 pytest,例如 tools/test-api.sh -k webhook -x。

部署 API

TAG=$(date +%Y%m%d%H%M)
az acr build -r sponsorjobsregistry -t patchlabs-api:$TAG -f api/Dockerfile .
az containerapp update -g ics-rg -n patchlabs-api --image sponsorjobsregistry.azurecr.io/patchlabs-api:$TAG

首次部署 v2 前,请将 RECEIPT_PRIVATE_KEY 设为容器应用的机密:没有此密钥,新镜像将无法启动。

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。