agentbuy

Let an autonomous agent pay a real-world crypto invoice. Exact amount, cross-chain, with no account, no API key and no KYC anywhere in the path.

npm install https://norravex.com/agentbuy-0.2.0.tgz @solana/web3.js

Served straight from this domain — no registry account involved, which is rather the point. MIT, 8 kB.

Or give your agent the capability directly (MCP)

Ships with an MCP server, so Claude Code, Claude Desktop or Cursor can quote and pay invoices as tools:

{
  "mcpServers": {
    "agentbuy": {
      "command": "npx",
      "args": ["-y", "https://norravex.com/agentbuy-0.2.0.tgz", "agentbuy-mcp"],
      "env": {
        "AGENTBUY_KEYPAIR": "/path/to/solana-keypair.json",
        "AGENTBUY_REFUND_AUTHORITY": "0xYourEvmAddress",
        "AGENTBUY_MAX_SOL": "0.5"
      }
    }
  }
}

Three tools: quote_invoice (never moves funds), pay_invoice, check_order. Paying refuses outright unless a keypair and a refund authority are configured, and always enforces AGENTBUY_MAX_SOL — default 0.25 SOL. Quote first, then decide.

const { payInvoice } = require("agentbuy");

await payInvoice({
  secretKey: "/path/to/solana-keypair.json",
  toChain: "ethereum",
  amount: "0.01008",        // the EXACT figure on the invoice
  recipient: "0x9579…",     // merchant's single-use address
  refundAuthority: "0x8a87…",
  maxPay: 0.35,             // refuse a bad quote
});

The problem

An agent holding SOL cannot pay an invoice denominated in ETH. It needs a cross-chain swap that lands an exact amount on an address it does not control.

That last part matters more than it sounds. Merchants taking crypto issue a single-use address and a precise figure. Underpay by a hair and it is not credited — you get a support ticket with a company that, by design, does not know who you are. So you must solve for the input, never the output.

The obvious fix is a swap aggregator. Every one of them wants an account.

Which routes actually work

Measured 2026-07-25, from a datacentre host, with no signups:

RouteResult
SideShiftaffiliateId required — needs an account
ChangeNOWv1 endpoint gone; v2 returns Unauthorized
StealthEXAPI key is not provided
SimpleSwapWrong api key
FixedFloatNot have permission
THORChainpublic nodes did not resolve
deBridge DLNworks, keyless

deBridge is the default route for that reason. The interface is provider-shaped, so another keyless route can be added without changing callers.

What it does for you

Honest limits

Provenance

Extracted from a working system that autonomously bought and configured a domain end to end — swap, invoice, registration, DNS, TLS, mail — with no card, no bank and no human in the loop. The routing table above is what survived that, not a survey.

The domain you are reading this on was bought that way.