Are you an LLM? Read llms.txt for a summary of the docs, or llms-full.txt for the full context.
Skip to content

oculr

Paste a transaction hash from any of 50+ EVM mainnets. Get back what happened, who did it, what's risky, and how much USD moved - in plain English, as structured JSON.

What oculr does

You give oculr a transaction hash. It fetches the trace, decodes calldata and events, resolves the addresses against on-chain labels, walks the call graph with an AI agent, and returns a typed ExplanationResult:

  • A one-line summary ("Uniswap V3 swap: 1,000 USDC → 0.42 WETH").
  • A txType classification (swap, exploit, mev, liquidation, …) you can route on.
  • Risks flagged for review (known bad actors, unverified contracts, anomalous gas).
  • The protocol involved, addresses with labels, and the USD value of the primary action.
  • A confidence rating (high / medium / low) so your code knows when to trust the summary verbatim and when to escalate.

oculr is hosted at oculr.xyz (web app and docs) with the API at mpp.oculr.xyz. No accounts, no API keys.

How you pay

oculr is a Machine Payments Protocol (MPP) service. Payment uses MPP sessions - your client opens a payment channel with a maxDeposit against the API, signs cumulative vouchers per request, and the server redeems the highest voucher on-chain. Like a bar tab - many requests, one settlement.

Settlement happens on Tempo in USDC.e. You hold a wallet with a USDC.e balance; the MPP client handles the 402 challenge transparently.

mppx is the preferred client - install it once, point it at the wallet, and every fetch() your code makes against mpp.oculr.xyz settles automatically. Any MPP-compatible client also works.

What it costs per request

Pricing is metered: you pay for the actual cost of analysing your transaction, settled in $0.01 increments as the run progresses. Costs cluster into two bands: routine work (transfers, swaps, straightforward DeFi) runs roughly $1 to $2, while incident and exploit investigations usually run around $3-4. Size any spending cap against the top of the range, not an average - measured across 48 analyses of oculr's own benchmark corpus to 2026-07-29 on the default model (claude-opus-5).

Every response carries a costs object with the actual cost broken into category buckets - llms, dataCollection, codeExecution, other - plus a totalUsd. See Pricing for real production examples and the full model breakdown.

Pick how you'll use oculr

oculr ships the same JSON contract through three surfaces. Pick the one that matches how you work today:

Agent mode

Ask an agent CLI (Claude Code, Amp, Codex CLI, …) to analyse a transaction in one line:

Claude Code
claude -p "Use the oculr MPP at https://mpp.oculr.xyz/SKILL.md to analyse EVM transaction 0xYOUR_TX_HASH on Ethereum - what happened, any risks?"

For sub-agents inside a parent tool-use loop, point the parent at https://mpp.oculr.xyz/tool-spec.json - typed Anthropic + OpenAI schemas, no markdown parsing. See Use as an agent.

Manual mode

Call the oculr MPP from your own code. Synchronous analysis is a metered SSE stream - mppx's session manager opens the channel and signs vouchers as cost accrues:

import { tempo } from 'mppx/client'
import { privateKeyToAccount } from 'viem/accounts'
 
const account = privateKeyToAccount(process.env.WALLET_PRIVATE_KEY as `0x${string}`)
// '32' is the signing ceiling, not what you escrow - the channel still opens at
// the suggested $16. See /pricing#the-channel-deposit.
const session = tempo.session.manager({ account, maxDeposit: '32' })
 
const stream = await session.sse('https://mpp.oculr.xyz/explain', {
  method: 'POST',
  headers: { 'Content-Type': 'application/json', 'Accept': 'text/event-stream' },
  body: JSON.stringify({ txHash: '0x4e4b8ed4…' }),
})
for await (const payload of stream) {
  const msg = JSON.parse(payload)
  if (msg.type === 'result') console.log(msg.summary, msg.risks)
}

Prefer a plain fetch() with no stream? POST /explain/async + poll is metered to the same total price: $0.01 at submit, the rest collected by your polls as the analysis accrues it. See Call the oculr MPP for both walkthroughs.

Web app

Paste your hash into oculr.xyz/app - no setup, streaming workflow, flow diagram, JSON view. Right for one-off triage, sharing a link with a teammate, or eyeballing an incident. See Use the web app.

Who uses oculr

  • Security engineers - triage abnormal transactions in real time and get a structured read fast.
  • Security researchers - understand complex transactions in detail when writing up an incident.
  • Trading desks - decode complex DeFi transactions to understand counterparty intent.

Endpoints at a glance

MethodPathWhat it does
POST/explainSynchronous analysis over metered SSE - the final event is the result
POST/explain/asyncNon-blocking - returns a jobId immediately
GET/result/:jobIdPoll an async job for its result
GET/healthService health probe (free)
GET/openapi.jsonFull OpenAPI 3.1 spec (free)
GET/tool-spec.jsonTyped Anthropic + OpenAI tool-use schemas (free)
GET/SKILL.mdProse entry point for agents (free)
GET/llms.txtDiscovery index for LLM crawlers (free)

Full request/response schemas at Endpoints reference.

Next