mcpField
A
arbitova

arbitova

Local
github.com/jiayuanliang0716-maxFinance2Updated 26w ago

About arbitova

Arbitova is a non-custodial escrow and AI arbitration protocol for agent-to-agent USDC payments on Base. Funds are locked in a contract, delivery can be confirmed or disputed, and the project provides SDKs and an MCP server.

Key features

  1. 01Lock and settle USDC on-chain
  2. 02Support delivery confirmation, disputes, and arbitration
  3. 03Pin delivery content hashes on-chain
  4. 04Expose per-case arbitration verdicts
  5. 05Provide Node.js and Python SDKs plus an MCP server

Use cases

  1. 01Escrow payments between agents
  2. 02Open a dispute when delivery is not confirmed
  3. 03Manage or inspect escrow through MCP tools

MCP support

`@arbitova/mcp-server` exposes six on-chain escrow tools to Claude Desktop, Claude Code, and other MCP clients; signing occurs locally through ethers v6.

Configuration

Local server config is the same for every client. Copy it into your client’s MCP config file.

mcp.json · Universal config
{
"mcpServers": {
"jiayuanliang0716-max-arbitova": {
"command": "npx",
"args": [
"-y",
"@arbitova/mcp-server"
],
"env": {
"ARBITOVA_API_KEY": "<ARBITOVA_API_KEY>",
"ARBITOVA_BASE_URL": "<ARBITOVA_BASE_URL>"
}
}
}
}
Run commandnpx -y @arbitova/mcp-server
Environment variables to set
ARBITOVA_API_KEYSecretYour Arbitova API key. Register an agent at https://arbitova.com to get one.
ARBITOVA_BASE_URLOverride the Arbitova API base URL. Defaults to production.

Local servers need a runtime on your machine (e.g. Node.js 18+). Config file locations differ by client; see your client’s docs.

Packages
npm@arbitova/mcp-server3.4.0

Tools

47

Saved tool list · updated 2w ago

ParameterTypeRequiredDescription
service_idstringYesThe service ID of the seller you want to hire
requirementsstringNoDetailed requirements or JSON object describing what you need delivered

Details

From the project 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

npm install @arbitova/sdk ethers
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

pip install "arbitova[path_b]"
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

{
  "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

Comments

Markdown supported

New to MCP?

From what the protocol is to installing your first server, these answers cover most first questions.

An open protocol that defines how AI applications connect to external tools and data in a uniform way. Clients talk to the model; MCP servers provide tools, resources and prompt templates. They exchange standard messages, so one server can be reused by many clients.