docs
Several routes in. Pick the one that matches your agent harness. Every route hits the same endpoints, settled in USDC on Base via the x402 protocol.
npm i @x402/fetch @x402/evm viem
import { wrapFetchWithPayment, x402Client } from "@x402/fetch";
import { ExactEvmScheme, toClientEvmSigner } from "@x402/evm";
import { privateKeyToAccount } from "viem/accounts";
import { createPublicClient, http } from "viem";
import { base } from "viem/chains";
const account = privateKeyToAccount(process.env.X402_PRIVATE_KEY);
const signer = toClientEvmSigner(
account,
createPublicClient({ chain: base, transport: http("https://mainnet.base.org") }),
);
const client = new x402Client().register("eip155:8453", new ExactEvmScheme(signer));
const paidFetch = wrapFetchWithPayment(fetch, client);
const res = await paidFetch("https://x402.agentutility.ai/cve", {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({ "cve_id": "CVE-2021-44228" }),
});
console.log(await res.json());The first request gets a 402, the wrapper signs a USDC transferWithAuthorization for the price the server asked for, and it retries on its own. The paid response comes back inside that same await paidFetch(...) call. Full walkthrough with the Claude Code skill and MCP options at /start.
POST to any endpoint. If the request lacks payment, the server returns HTTP 402 Payment Required with a structured body describing exactly what to pay, where, and how. Sign a USDC transferWithAuthorization for that amount, attach the signed payment as an X-PAYMENT header, and retry. The facilitator settles on-chain and the response comes back in the same request lifecycle.
# 1. unpaid request
curl -X POST https://x402.agentutility.ai/secrets-exposure-check \
-H 'Content-Type: application/json' \
-d '{"repo":"vercel/next.js"}'
# response: 402 with payment requirements
{
"x402Version": 1,
"accepts": [{
"scheme": "exact",
"network": "base",
"asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
"maxAmountRequired": "20000", /* 0.02 USDC, 6 decimals */
"payTo": "0x8f5cb67b49555e614892b7233cfddebfb746e531"
}]
}
# 2. sign + retry
curl -X POST https://x402.agentutility.ai/secrets-exposure-check \
-H 'X-PAYMENT: $SIGNED_AUTHORIZATION' ...For coding agents (Claude Code, Cursor, Codex, Replit Agent), the portfolio ships one MCP server per live cluster under @agentutility/mcp-* — 14 packages today. Each server is a stdio shim over the HTTP endpoints above. The agent's own wallet signs every call, no custody on our side. The catalog lives at mcp.agentutility.ai.
# install one cluster package npx -y @agentutility/mcp-synthforge # required: EVM private key with USDC on Base export X402_PRIVATE_KEY=0x... # catalog: # https://mcp.agentutility.ai
agentutility's portfolio is registered on the ERC-8004 Identity Registry on Base as agentId 47167. Agents that resolve the URI get the full agent card with every endpoint enumerated and priced. Pure on-chain discovery — no DNS, no signup.
# resolve via our own agent-card endpoint
curl -X POST https://x402.agentutility.ai/agent-card-resolve \
-H 'Content-Type: application/json' \
-d '{"agent_id":47167}'
# → owner address, agent_uri, full card JSONSee the live card at /agent-card.
The full registry is served as JSON at /registry.json. Filter with ?cluster=<slug>. Plain-text alternatives: /endpoints.txt, /catalog.txt. LLM-tuned indexes: /llms.txt, /llms-full.txt.
# whole registry curl https://agentutility.ai/registry.json # one cluster curl https://agentutility.ai/registry.json?cluster=edge-market # llms.txt — Anthropic-blessed LLM index curl https://agentutility.ai/llms.txt # all endpoints, one per line curl https://agentutility.ai/endpoints.txt