Skip to main content
ATXP is an agent side payment SDK from Circuit and Chisel. Like AgentCash and Sponge, it’s an agent side wallet — Remlo doesn’t depend on it. ATXP’s distinguishing feature is the self serve onboarding: npx atxp agent register provisions a new agent account with a connection string, an Ethereum wallet, an {agentId}@atxp.email mailbox, and $5 in starter credits, with no human approval step.

Why ATXP

Three things make ATXP useful for paying Remlo:
  1. Self registration. A single CLI command produces a fully funded agent account. Useful when you want to script an end to end demo without first standing up a wallet by hand.
  2. x402 ecosystem support. The @atxp/x402 adapter wraps any fetch function so it auto handles HTTP 402 challenges. ATXP clients can call any x402 compatible server, including Remlo’s /api/mpp/* routes, with zero server side ATXP code.
  3. Multiple account backends. ATXP accounts work, but you can also bring your own Base, Solana, Polygon, or Worldchain wallet via the matching @atxp/base, @atxp/solana, etc. adapter.

Setup

npx atxp agent register
Prints a connection string of the form https://accounts.atxp.ai?connection_token=<token>&account_id=<id>. Save it as ATXP_CONNECTION in your environment.
export ATXP_CONNECTION="https://accounts.atxp.ai?connection_token=..."
Top up later with npx atxp fund (returns deposit addresses + a shareable payment link). Check balance with npx atxp balance.

Calling Remlo from an ATXP agent

The cleanest path is to connect your ATXP client to Remlo’s MCP server. Wrap the client’s fetch with @atxp/x402 so x402 payment challenges are handled transparently.
import { atxpClient, ATXPAccount } from "@atxp/client"
import { wrapWithX402 } from "@atxp/x402"

const account = new ATXPAccount(process.env.ATXP_CONNECTION!)

const client = await atxpClient({
  mcpServer: "https://www.remlo.xyz/api/mcp",
  account,
  fetchFn: wrapWithX402({
    account,
    mcpServer: "https://www.remlo.xyz/api/mcp",
  }),
})

const result = await client.callTool({
  name: "remlo_treasury_yield_rates",
  arguments: {},
})
wrapWithX402 reads any 402 response, signs a USDC payment proof with the ATXP-issued wallet, and retries transparently. Your agent code never touches the protocol layer. Both required fields (account and mcpServer) come straight from the ATXP client config. For tools that mutate employer state (remlo_agent_pay, remlo_payroll_execute, etc.), pass the Tier 1 / Tier 2 identity headers in the tool arguments via the underlying transport headers:
const result = await client.callTool({
  name: "remlo_agent_pay",
  arguments: { employer_id: "...", recipient_wallet: "0x...", amount: "10.0" },
}, {
  headers: {
    "X-Agent-Identifier": "erc8004:tempo:42",
    "X-Agent-Timestamp": String(Date.now()),
    "X-Agent-Signature": "0x...",
  },
})

Bring your own chain account

If you already have a Base or Solana wallet you’d rather sign with, swap the account type. The @atxp/x402 wrapper accepts any account that satisfies the Account interface:
import { atxpClient } from "@atxp/client"
import { BaseAccount } from "@atxp/base"
import { wrapWithX402 } from "@atxp/x402"

const account = new BaseAccount(
  process.env.BASE_RPC_URL!,
  process.env.BASE_PRIVATE_KEY!,
)

const client = await atxpClient({
  mcpServer: "https://www.remlo.xyz/api/mcp",
  account,
  fetchFn: wrapWithX402({ account, mcpServer: "https://www.remlo.xyz/api/mcp" }),
})
Same paidFetch shape, different account type. Solana, Polygon, and Worldchain follow the same pattern with their respective @atxp/<chain> packages.

What ATXP isn’t

  • It isn’t a dependency for Remlo. We don’t ship code that imports @atxp/client or @atxp/express. ATXP is one of several wallet flavors that can call our endpoints.
  • It isn’t a server side framework for Remlo. ATXP’s @atxp/express middleware is Express specific and exists for monetizing your own MCP server, not for receiving payments at Remlo’s existing routes.
  • It isn’t an authentication system. Identity for principal bound endpoints uses the standard Remlo Tier 1 / Tier 2 headers, signed independently of ATXP.
  • It isn’t required to be in ATXP’s MCP catalog to pay Remlo. The @atxp/x402 adapter calls any 402 compatible URL, regardless of catalog status.