getPlexa
live · 4 payment rails

Economic safety layer
for trading agents

x402-native, pay-per-call. Two HTTP tools an agent pays for inline — no accounts, no keys held. Quotes on Base, Polygon & Arbitrum — pay in USDC from any of them or Solana.

x402-native multichain decision-grade
the gap
A wallet guard like Blockaid tells an agent whether a transaction is malicious — can I sign this? It can't tell the agent should I trade this? — what price actually fills under size, and whether the token is an economic trap. Plexa answers the economic question.
two endpoints, one engine
POST /v1/quote$0.02
Executable liquidity under a given size: real fill price (not mid/spot), price impact (bps), realizable depth, per-leg route, worst-case slippage, confidence. Priced from canonical on-chain quoters, on Base, Polygon & Arbitrum.
POST /v1/pretrade/check$0.05
avoid — only when a trap is proven at that block: nowhere to sell, less than 5% of your size sitting in the pool as the counter asset, or trading switched off by the contract itself. Otherwise clear — no proven traps, which is not “safe”. Plus risk_profile: age, concentration, depth, the amount a sale would be paid from — as numbers; the call is yours. Analysis runs on Base today; you can pay from any of the four rails. Same endpoint, same price, also at /v1/token-safety and /v1/rug-check.
The first call from a new wallet is free — the full response, every field, same engine as a paid one. One free call per wallet, on either endpoint; nothing is settled on-chain for it.
example
// POST /v1/pretrade/check
{ "token": "0xcbb7c0000ab88b473b1f5afd9ef808440eed33bf", "sizeUSD": "1000", "chain": "base" }

// live capture, Base block 49798026–49798027 — fields trimmed to the ones explained below
// →
{
  "verdict": "clear",
  "triggers": [],
  "confidence": "high",
  "risk_profile": {
    "age": { "ageDays": 710.56 },
    "concentration": { "top1SharePct": 82.2985, "top10SharePct": 90.2837, "holdersExact": false, "ageSec": 140, "stale": false },
    "liquidity": { "poolCount": 45, "venueCount": 13, "exitLiquidityUsd": 40275191.6 },
    "oracle": { "source": "chainlink:BTC / USD", "deviationBps": 2 },
    "transferability": { "hasBlacklist": true, "fingerprints": "isBlacklisted" }
  },
  "quote": { "direction": "buy", "executablePrice": 0.00001564358, "depthAtSize": 0.01564358, "priceImpactBps": 5.16 },
  "validUntil": 1786385405501,
  "coverage": { "axesExpected": 5, "axesReporting": 5 },
  "liquidityCoverage": {
    "conclusive": true, "poolsFound": 45, "factoriesChecked": 13,
    "unmeasuredVenues": 0, "unmeasuredVenueNames": [], "venuesUnread": 0,
    "singletonPoolsSeen": 10, "singletonPoolsCounted": 1, "singletonPoolsRejected": 8,
    "singletonPoolsHooked": 7, "singletonScanTruncated": true,
    "asOfBlockFirst": 49798026, "asOfBlock": 49798027
  }
}
A real capture, trimmed to the fields explained here — nothing invented. executablePrice is how much token 1 USDC buys at the requested size: the real fill, not a mid. validUntil says until when asking again returns this same answer; coverage says how many of the five axes reported. liquidityCoverage is the exit check showing its work: conclusive: true means it reached a verdict-grade conclusion; 45 pools were found across 13 factories with none left unread. In Uniswap v4, 10 pools of this pair were seen and the sale was simulated in each — 1 accepted it, 8 refused (a refusal is a measurement about that pool, not a gap in our data), 7 run a hook inside the swap, and singletonScanTruncated admits the scan hit its work cap. The two block numbers are the start and end of those reads: one apart here, so no single block describes the answer exactly, and that gap is the uncertainty. In concentration, ageSec: 140 with stale: false means the holder numbers were measured 140 seconds earlier and served from cache. Absent numbers come back null with a reason, never as 0.
connect & configure
As an MCP tool
Add the Plexa MCP server to any agent (Claude Code / Claude Desktop / any MCP host). It exposes plexa_quote and plexa_pretrade_check. Payment is handled automatically via x402 from a wallet you configure — Plexa never sees the key.
As an agent skill
An Agent Skill, pretrade-exit-check, teaches an agent when the pre-trade check is worth its $0.05 and how to read the answer — the verdict vocabulary, what liquidityCoverage proves, and which fields are allowed to be null. Install: npx skills add plexa-xyz/skills.
Direct HTTP (x402)
Any x402 client works (e.g. @x402/fetch). Call the endpoint; on 402 the client signs a USDC payment (EIP-3009) and retries — the response is served only after on-chain settle. Pass chain: base / polygon / arbitrum.
// MCP client config (claude_desktop_config.json or any host)
{
  "mcpServers": {
    "plexa": {
      "command": "npx",
      "args": ["-y", "@getplexa/mcp"],
      "env": {
        "PLEXA_BASE_URL": "https://api.getplexa.com",
        "AGENT_WALLET_KEY": "${AGENT_WALLET_KEY}",
        "CHAIN": "base"
      }
    }
  }
}
Use a dedicated, low-balance wallet. This key signs payments; it is not an API key. Keep it in your environment and let the host expand ${AGENT_WALLET_KEY} — if your MCP host does not support expansion, put the literal value in a file with restrictive permissions and never commit it. Plexa never sees the key: it stays in your client.
Live on npm: @getplexa/mcp — run with npx -y @getplexa/mcp. The public API is live at api.getplexa.com.
open-source reference agent

See Plexa in action

A complete, MIT-licensed reference agent — a dust consolidator that discovers small token balances, checks each through Plexa, and swaps the safe ones. Client-only: it uses nothing but the public API, so it doubles as a working integration pattern you can fork.

plexa-xyz/agent
Live on GitHub: plexa-xyz/agent — MIT-licensed, client-only.