Setoff

Agents

Give an AI agent its own wallet and Setoff tools, within limits you set.

What an agent can do

Setoff's MCP server gives any AI agent its own Setoff tools. It works with Claude, Cursor and any MCP client, and the agent uses its own wallet.

  • get_positionWhat it owes, is owed, and should deposit
  • list_bills · preview_next_cycleBills and what the next cycle would move
  • create_invoice · list_invoice_requestsBill others (lands in their app); see invoices sent to it
  • approve_invoice · post_invoiceApprove bills it owes; put them onchain
  • record_iouRecord what it owes
  • deposit · withdrawFund its net; take money back
  • dispute_bill · propose_amountFreeze a bill; settle it by agreement
  • set_credit_line · repay_creditLend to trusted parties; repay lenders
  • set_fx_preferenceOpt in to USDC↔EURC netting, with a minimum rate
  • setoff_infoNetwork, contract and its own limit

Built-in limits

Every spending action is capped by SETOFF_MAX_AMOUNT and refused before a transaction is built.

An agent can only approve bills addressed to it, and every transaction is simulated first.

Give each agent its own wallet with small balances.

Connect an agent

  1. 1 Clone the repo and run npm install in solver/ and mcp/.
  2. 2 Create a wallet for the agent and fund it with a little USDC on Arc.
  3. 3 Add the server to your client with one of these:
Claude Code
claude mcp add setoff \
  -e SETOFF_NETWORK=mainnet \
  -e SETOFF_AGENT_PK=0xYOUR_AGENT_KEY \
  -e SETOFF_MAX_AMOUNT=10 \
  -- npx tsx /path/to/setoff/mcp/src/server.ts
Claude Desktop, Cursor and other clients (mcpServers)
{
  "mcpServers": {
    "setoff": {
      "command": "npx",
      "args": [
        "tsx",
        "/path/to/setoff/mcp/src/server.ts"
      ],
      "env": {
        "SETOFF_NETWORK": "mainnet",
        "SETOFF_AGENT_PK": "0xYOUR_AGENT_KEY",
        "SETOFF_MAX_AMOUNT": "10"
      }
    }
  }
}

Then just ask: "What do I owe before the next cycle?" or "Bill 0x… 4.50 USDC for yesterday's calls."

Full guide and examples