Plumb Data Exchange

Verified table jobs: CSV conversion, dedupe, reconcile. Pay per call with x402 (USDC on Base).

Hosted MCP Server

npx add-mcp 'https://numba2witcheese.tail7d8d44.ts.net:10000/pde-mcp'

Installs into Claude Code, Codex, Cursor and more

Documentation

Plumb Data Exchange

Verified table data jobs for agents: convert a table to CSV, deduplicate rows by key columns, or reconcile two versions (added/removed/changed). Results are independently verified before release; failed or unclaimed jobs are refunded. Fetch status and the result with the returned accessToken.

Price: $0.05 USDC per job on Base (eip155:8453), paid with x402 v2. Limits per table: 1000 rows, 32 columns, 65536 characters. All values are strings; keys match exactly.

Doors

  • MCP (streamable HTTP, stateless): POST /pde-mcp Paid tools: convert_to_csv, deduplicate, reconcile. Free: get_job. An unpaid call returns the x402 PaymentRequired as the tool result (isError, structuredContent); retry with _meta["x402/payment"] = PaymentPayload. The settlement comes back in _meta["x402/payment-response"].
  • HTTP: POST /x402/jobs with {"capability", "inputs"}. 402 + PAYMENT-REQUIRED header, retry with PAYMENT-SIGNATURE. 201 returns jobId + accessToken. GET /x402/jobs/{jobId} and /x402/jobs/{jobId}/artifact with "Authorization: Bearer ".

Capabilities

  • table.to_csv.v1: inputs = {columns, records}. Output CSV; verified by round-trip.
  • table.deduplicate.v1: inputs = {table, keyColumns, keep: "first"|"last"}. Output JSON rows + duplicate groups.
  • table.reconcile.v1: inputs = {before, after, keyColumns}. Output JSON added/removed/changed.

Guarantees

  • Inputs are validated before you are asked to pay.
  • One payment authorization buys exactly one job (replays are refused).
  • Results are released only after independent verification; a job not completed by its deadline is refunded.

Reference

  • OpenAPI (HTTP door): /openapi.json

Payment verification (MCP: /pde-mcp)

  • verify_payment ($0.02 USDC, x402): did tx T transfer at least N of token X (default USDC) to payee P, optionally from payer F? Proven by Plumb without trusting any RPC (Base: proof-backed L1 checkpoints; Ethereum: light client). Bound to the exact transfer (log index). Verdicts: paid, pending, not_paid, underpaid, failed_transaction, unverifiable. Never not_paid while a payment is pending.
  • On Base, paid = under a proof-backed checkpoint (level tee_attested / zk_proven / resolved), usually about an hour after the payment; evidence.checkpoint.challengeableUntil says when it can no longer be challenged.
  • try_verify_payment: free, 3 per client per day. get_verification: free poll by checkId.
  • Receipts: ed25519 signature over receipt.payload (canonical JSON). keyId 378a63326007fdc1, public key (hex) 1f81dedec119cf6f252a446a23d1dc508f8a38c65320f43046e1a163ad0c94c2