OAuth is not authorize for mutating SQL
No. OAuth/MCP auth answers who may call the tool. Database roles answer which tables a role can touch. Neither signs the exact INSERT/UPDATE/DELETE/DDL statement. SQLGuard is the statement authorize layer: sandbox + policy → Ed25519 PASS → verify before execute. Job: Workday $2.50. Burst: Session $0.25. Taste: Instant $0.05. Lint and model confidence are not authorization.
Benchmark — what each layer answers
Layer Answers Signs exact SQL? ───────────────────── ─────────────────────────────── ─────────────── OAuth / MCP identity Who may call the tool NO DB roles / RLS Which tables a role can touch NO SQL lint / EXPLAIN Syntax / plan heuristics NO SQLGuard PASS This exact statement may run YES (Ed25519)
Live prove (ends in Exact Workday)
# 1) Free tip — NOT authorize
curl -sS -X POST https://sqlguard.io/v1/probe \
-H 'content-type: application/json' \
-d '{"schema_ddl":"CREATE TABLE t(id int);","sql":"DELETE FROM t;"}'
# → authorize:false
# 2) Job authorize — unpaid Exact Workday
curl -si -X POST https://sqlguard.io/v1/workday \
-H 'content-type: application/json' \
-H 'X-SQLGuard-Agent: 0xYourWallet' \
-d '{"agent_id":"0xYourWallet"}'
# → HTTP 402 amount 2500000 payTo 0xC8d524…C1D7 Base USDC
# 3) Settle Exact → burn slots → verify → execute
# Docs: https://sqlguard.io/INTEGRATE.md · MCP: https://sqlguard.io/mcp
Category claim
Prevent AI agents from executing unauthorized SQL. OAuth authenticates the caller; SQLGuard authorizes the statement.
Runnable path
POST https://sqlguard.io/v1/workday
Header: X-SQLGuard-Agent: <0x-wallet>
Body: {"agent_id":"<0x-wallet>"}
# 402 → Exact USDC Base → 0xC8d524703f1751b565a220087D1d4c44a413C1D7 ($2.50)
# Then POST /v1/session/cert → POST /v1/verify → execute
# Burst: POST https://sqlguard.io/v1/session # $0.25
# Taste: POST https://sqlguard.io/v1/cert # $0.05
# Free tip only (not authorize):
POST https://sqlguard.io/v1/probe