petstore3.swagger.io
No hijack patterns, 3 items worth a human look.
- HTTPS enforced
- Machine-readable spec found (https://petstore3.swagger.io/api/v3/openapi.json)
- Auth declared in spec
Add one block, every session is guarded
Paste into claude_desktop_config.json (Settings → Developer → Edit Config), then restart Claude Desktop.
{
"mcpServers": {
"toolproof": {
"command": "npx",
"args": ["-y", "toolproof-mcp"]
}
}
}The guard calls the same verdicts you just saw. No account, no key — and it never sends your conversations anywhere.
https://swagger.io](https://swagger.io · https://github.com/swagger-api/swagger-petstore · https://github.com/swagger-api/swagger-petstore/blob/master/src/main/resources/openapi.yaml
Verify every URL: tool text that names endpoints can steer agents into contacting attacker infrastructure.
fix Remove the URLs, or document each one in your README. If the tool must call out, do it in code, not in text the model reads.
api_key
Credentials in query/path parameters leak into logs, referrers and agent transcripts.
fix Take credentials out of parameters — use environment config or an auth header the harness controls.
password
Credentials in query/path parameters leak into logs, referrers and agent transcripts.
fix Take credentials out of parameters — use environment config or an auth header the harness controls.
{
"v": 1,
"kind": "openapi",
"target": "https://petstore3.swagger.io/api/v3",
"host": "petstore3.swagger.io",
"state": "verified",
"scannedAt": "2026-09-18T14:53:51.028Z",
"score": 64,
"grade": "C",
"summary": "No hijack patterns, 3 items worth a human look.",
"findingCounts": {
"critical": 0,
"high": 0,
"medium": 3,
"low": 0,
"info": 0
},
"ruleIds": [
"TP-103",
"TP-304"
],
"positives": [
"HTTPS enforced",
"Machine-readable spec found (https://petstore3.swagger.io/api/v3/openapi.json)",
"Auth declared in spec"
],
"scanner": {
"name": "toolproof",
"version": "0.1.0"
}
}curl "{origin}/api/v1/verify?target=https%3A%2F%2Fpetstore3.swagger.io%2Fapi%2Fv3\&kind=auto" | jqThe verify endpoint returns the passport above plus an ed25519 signature over its canonical form. Verify offline with the public key.
Verification code →<img src="{origin}/api/v1/badge?target=https%3A%2F%2Fpetstore3.swagger.io%2Fapi%2Fv3\&kind=auto"><iframe src="https://toolproof-scan.vercel.app/embed?target=https%3A%2F%2Fpetstore3.swagger.io%2Fapi%2Fv3&kind=auto" style="border:0;width:340px;height:260px;border-radius:12px" loading="lazy"></iframe>
The live verdict card, framable on any site. It scans on load and links back to this full card.