Plumb Data Exchange
Travaux de table vérifiés : conversion CSV, déduplication, rapprochement. Paiement à l'appel avec x402 (USDC sur Base).
Serveur MCP hébergé
npx add-mcp 'https://numba2witcheese.tail7d8d44.ts.net:10000/pde-mcp'S’installe dans Claude Code, Codex, Cursor et plus
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; $0.002 for an XRP Ledger payment, invoiceId binds it to your invoice): 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; XRP Ledger: a quorum of Ripple's validator list, chain "xrpl", token RLUSD/XRP/CUR.rIssuer, amounts in drops or millionths, level unl_quorum, final). Bound to the exact transfer (log index). Verdicts: paid, pending, not_paid, underpaid, ambiguous, failed_transaction, unverifiable. Never not_paid while a payment is pending; abstains (unverifiable) whenever the proof is incomplete.
- On Base, paid = under a proof-backed checkpoint (level tee_attested / zk_proven / resolved), usually about an hour after the payment; status "proven" until challengeableUntil, then re-checked to "final" (resolved).
- HTTP door (no MCP needed): POST /x402/verify with the same claim JSON; pay the 402 with PAYMENT-SIGNATURE (x402 v2).
- try_verify_payment: free, 3 NEW claims per client per day. get_verification: free poll by checkId. Asking again about a claim already checked is free (one check per claim covers its re-checks).
- requiredLevel (tee_attested | zk_proven | resolved on Base; finalized on Ethereum): the answer's "release" block says whether money can be released, and why not.
- callbackUrl (paid checks; https, port 443, public host) or watch_verification: signed POSTs on level_reached, changed, final, gave_up (x-plumb-signature = Ed25519 over the raw body with the key below); retried with backoff.
- Receipts: ed25519 signature over receipt.payload (canonical JSON). keyId 378a63326007fdc1, public key (hex) 1f81dedec119cf6f252a446a23d1dc508f8a38c65320f43046e1a163ad0c94c2
- verify_payments_batch: up to 25 claims (JSON or CSV: chain,txHash,payee,token,minAmountRaw,payer,logIndex,invoiceId) for one flat price; claims already checked are free. get_verifications: free bulk read (<=50), format "csv" for reconciliation.
- check_x402_receipt (free): verify a seller's signed x402 offer + receipt (pin the seller), get the exact claim to prove, then pass the verification's checkId to learn which side failed (seller signature or chain).
- x402 batch settlements (one transfer aggregating many vouchers) are flagged "aggregate" and never releasable.
- Guide (five minutes, answer fields, callbacks, comparison with an RPC lookup): /verify