Arbitova

io.github.jiayuanliang0716-maxPublished by GitHub account jiayuanliang0716-maxv3.4.0Updated Nov 3, 2026

Escrow + AI arbitration for A2A payments. Lock funds, confirm delivery, dispute if needed.

VerifiedSTDIODesktop onlyFinanceAI & ML

Overview

AI-generated overview

Non-custodial USDC escrow and AI arbitration for agent-to-agent payments on Base, letting an assistant create, confirm, dispute and inspect escrows.

What you can do
  • Create escrows that lock USDC for a seller with delivery and review windows
  • Mark delivery and confirm or dispute it, or cancel if nothing was delivered
  • Read escrow state for read-only introspection
  • All six tools sign locally with ethers v6 against the EscrowV1 contract
When to use it
Use it when an assistant needs to settle a paid job between two agents that do not trust each other: locking funds, confirming delivery, or opening a dispute that a neutral AI arbiter resolves. Also useful for read-only monitoring of escrow state.
Requirements
Runs locally via npx as a Node.js package. Needs an Ethereum address and, for write actions, a private key supplied through ARBITOVA_AGENT_PRIVATE_KEY; omitting it gives read-only mode. The README's example also sets RPC, escrow and USDC address variables. Currently live on Base Sepolia testnet with real USDC; mainnet is pending audit.
Before you install
Write tools move real USDC and are irreversible once confirmed. The setup asks for a private key in ARBITOVA_AGENT_PRIVATE_KEY, which controls the wallet's funds; use a dedicated low-balance wallet. Fees of 0.5% on settlement and 2% on dispute resolution are deducted from payouts. The manifest declares ARBITOVA_API_KEY while the README describes a keyless on-chain design, so confirm which version you are installing.

Installation

In SourceWeft

  1. Open Arbitova in the dashboard and add it to a workspace.
  2. Enable the server for the chats that should use its tools.

Desktop only via STDIO. STDIO servers start a local process, so they need the SourceWeft desktop host.

Other MCP clients

Follow the launch instructions in the repository.

README

Arbitova

[jiayuanliang0716-max/Arbitova MCP server]

Non-custodial USDC escrow + AI arbitration for agent-to-agent payments on Base.

Two agents lock USDC into a contract, one delivers, the other confirms or disputes, and a neutral AI arbiter resolves. Arbitova never holds the money — the contract does.

No API keys. No registration. No custody. Your Ethereum address is your identity.


Why this exists

Every A2A / agent-commerce spec in the wild — MCP, Google's A2A, ERC-7683, Coinbase's Agent Commerce — defines how agents talk. None of them define how money moves when the agents don't trust each other.

Arbitova is the missing settlement primitive:

  • Deterministic state machine. createEscrow → markDelivered → {confirmDelivery | dispute → resolve | cancel}. No hidden branches, no admin override.
  • No auto-release after timeout. Review windows expire into DISPUTED, not into seller payout. Silence is safer than a wrong confirmation.
  • Content-hash pinned on-chain. Sellers can't swap the delivery file after the buyer inspects.
  • Per-case verdict transparency. Every arbiter decision is a signed JSON blob; its keccak256 is stored on-chain. The full verdict history is queryable at /verdicts — no aggregation, no delay.

This is not a marketplace. There is no Arbitova account, no listing fee, no Pro tier. The protocol is the whole product.


Quick start — Node.js SDK

bash
npm install @arbitova/sdk ethers
js
import { Arbitova } from '@arbitova/sdk';
const buyer = await Arbitova.fromPrivateKey({ privateKey: process.env.BUYER_PK });
const { escrowId, txHash } = await buyer.createEscrow({  seller: process.env.SELLER_ADDRESS,  amount: '5.00',  deliveryHours: 24,  reviewHours: 24,  verificationURI: 'https://example.com/spec.json',});
console.log(`Escrow #${escrowId} locked — ${buyer.explorerTx(txHash)}`);

Seller-side, arbiter-side, browser wallet integration: see packages/sdk-js/README.md.

Quick start — Python SDK

bash
pip install "arbitova[path_b]"
python
from arbitova import path_b
result = path_b.arbitova_create_escrow(    seller="0x...",    amount=5.00,    verification_uri="https://example.com/spec.json",)print(result)

Quick start — Claude / any MCP client

json
{  "mcpServers": {    "arbitova": {      "command": "npx",      "args": ["-y", "@arbitova/mcp-server"],      "env": {        "ARBITOVA_RPC_URL": "https://sepolia.base.org",        "ARBITOVA_ESCROW_ADDRESS": "0xA8a031bcaD2f840b451c19db8e43CEAF86a088fC",        "ARBITOVA_USDC_ADDRESS": "0x036CbD53842c5426634e7929541eC2318f3dCF7e",        "ARBITOVA_AGENT_PRIVATE_KEY": "0x..."      }    }  }}

Six tools: arbitova_create_escrow, arbitova_mark_delivered, arbitova_confirm_delivery, arbitova_dispute, arbitova_cancel_if_not_delivered, arbitova_get_escrow. All sign locally via ethers v6. Your private key never leaves the process.

Omit ARBITOVA_AGENT_PRIVATE_KEY for read-only introspection mode (useful for observability).


Lifecycle

                      ┌──────────────────┐                      │     CREATED      │ buyer locked USDC                      └────────┬─────────┘                               │                               ▼ seller.markDelivered()                      ┌──────────────────┐                      │    DELIVERED     │ deliveryHash on-chain                      └────────┬─────────┘                               │        buyer.confirmDelivery()│        │ buyer.dispute()                               │        │ or seller.dispute()                               ▼        ▼                   ┌─────────────┐  ┌──────────┐                   │  RELEASED   │  │ DISPUTED │ waiting for arbiter                   └─────────────┘  └────┬─────┘                                         │ arbiter.resolve(bps split + verdictHash)                                         ▼                                   ┌──────────┐                                   │ RESOLVED │                                   └──────────┘

Two terminal states not drawn: CANCELLED (buyer calls cancelIfNotDelivered after delivery window) and auto-escalation into DISPUTED if the review window expires without confirmation.


Framework reference agents

Three end-to-end A2A demos on Base Sepolia with a live AI arbiter:

Each demo runs the full CREATED → DELIVERED → CONFIRMED (or DISPUTED → RESOLVED) flow with real on-chain transactions.


Packages

PackagePurpose
@arbitova/sdkNode.js / browser SDK (ethers v6)
arbitovaPython SDK, install with [path_b] extra for on-chain support
@arbitova/mcp-serverMCP server (6 on-chain tools) for Claude Desktop, Claude Code, any MCP client

Each ships the same six-entrypoint surface so an agent using the Python SDK can settle with an agent using the MCP server — they're hitting the same contract.


Fees

WhenFeePaid by
confirmDelivery / review-window expiry auto-settle0.5%deducted from seller payout
Arbiter resolves a dispute2%split per arbiter verdict

Fees accrue in the contract. The protocol runs on them; there is no subscription.


Networks

NetworkStatusContract
Base Sepolialive, real Circle USDC0xA8a031bcaD2f840b451c19db8e43CEAF86a088fC
Base mainnetpending audit + multisig arbiterTBA

Watch the Dev Log for mainnet launch.


Legacy (Path A)

v2.x of the SDKs and v3.4.0 of the MCP server were a custodial HTTP client against api.arbitova.com. That architecture had four structural problems (DB-vs-onchain drift, custody wallet gas, single ADMIN_KEY, single WALLET_ENCRYPTION_KEY point of failure) and was deprecated in favor of Path B — the non-custodial on-chain design described above.

Old packages remain on npm/PyPI but are deprecated.


License

MIT

Source: README.md at commit f8bb861

Tools

0
SourceWeft has not started this package in its sandbox yet, so its tools are not known.

Version history

1
  1. v3.4.0LatestSep 16, 2026

Score

50% of the applicable checks met

How complete this listing is, computed from the registry entry, the endpoint and public sources. Not a rating of the server and not a statement that it is safe or working today: reachability is a dated check, and no installs or reviews go into the score.

  • Reached in the last 30 days25 pts

    Keep the endpoint answering the MCP handshake; SourceWeft probes it every 30 days.

  • Auth declared10 pts

    Declare the credential headers in the registry entry, or keep the endpoint answering the probe so its auth can be classified.

  • Tools listed15 pts

    Answer tools/list without a credential, or ship a package that starts in a sandbox without one.

  • DescriptionRequired15 pts
  • Logo10 pts
  • Documentation15 pts
  • License10 pts