INTERVENTION

DEVELOPERS

Intervention Developers

Read a preflight signal for a Robinhood Chain contract, wire it into an agent, or share a public receipt. Intervention covers a broad surface of contract risk patterns — admin power, fund risk, trading restrictions, upgradeability, and known-exploit templates. It is a preflight signal, not an audit. Not a safety guarantee.

Every sample uses placeholder tokens — swap in your own <APP_URL> and <CONTRACT_ADDRESS>.

# Preflight a Robinhood Chain contract before your app or agent interacts with it
curl -sS <APP_URL>/api/guard/robinhood-chain/<CONTRACT_ADDRESS>

# → { decision, score, grade, proofStatus, chainName,
#     evidence, evmSecuritySignals, reasons, recommendedAction, topFindings }
# decision ∈ low_risk_signal | review | block_for_review | needs_scan
01

Guard HTTP endpoint

One GET returns a decision plus the evidence behind it. It reads the latest public receipt for the address — it does not auto-scan on a cache miss.

GET <APP_URL>/api/guard/robinhood-chain/<CONTRACT_ADDRESS>

# → {
#     decision,          // low_risk_signal | review | block_for_review | needs_scan
#     score,             // 0-100
#     grade,             // A-F
#     proofStatus,       // static_only | ai_reviewed | test_passed | exploit_confirmed | ...
#     riskSurface,       // { admin_power, user_fund_risk, trading_restriction, upgradeability }
#     reasons,           // string[] explaining the decision
#     recommendedAction, // one-line next step
#     receiptUrl         // public receipt for this address, when one exists
#   }

needs_scan means no preflight exists yet — request a fresh receipt via the x402 scan below.

02

MCP integration

Add the MCP server to Claude Desktop, Cursor, or Cline. The npm package scope stays @intervention in v1 for install-compatibility (legacy-for-compat — not brand copy).

{
  "mcpServers": {
    "intervention": {
      "command": "npx",
      "args": ["-y", "@intervention/mcp@latest"]
    }
  }
}
03

x402 paid scan flow

Hit the scan endpoint with no payment to receive a 402 challenge, then retry with a signed USDC transfer in the X-PAYMENT header. The paid path persists a public receipt.

# 1. Request with no payment → 402 challenge
curl -sS -X POST <APP_URL>/api/v1/scan-address \
     -H "Content-Type: application/json" \
     -d '{"address":"<CONTRACT_ADDRESS>","chain":"robinhood"}'

# → HTTP 402  +  X-PAYMENT-REQUIRED: <base64 PaymentRequirements>

# 2. Sign the USDC transfer, retry with X-PAYMENT
curl -sS -X POST <APP_URL>/api/v1/scan-address \
     -H "Content-Type: application/json" \
     -H "X-PAYMENT: <base64 PaymentPayload>" \
     -d '{"address":"<CONTRACT_ADDRESS>","chain":"robinhood"}'

# → scan result + X-PAYMENT-RECEIPT + receiptUrl
04

Public receipts

Every scan persists a public receipt at /r/<id>. A receipt is a public database record — it captures what was scanned, the score and grade, and the findings. It is not an onchain proof.

# Open a receipt by its short ID
<APP_URL>/r/<receiptId>
05

Agent discovery

Intervention publishes an A2A agent card for discovery — a plain GET endpoint.

# A2A discovery card
GET <APP_URL>/.well-known/agent-card.json

Not an audit. Not a safety guarantee.