Plumb Data Exchange
Measured conclusion: Deep-tested. L2 outcome: tools_ok.
Verified table jobs and RPC-free payment verification (Base/Ethereum). Pay per call via x402.
| Author | io.github.Mlcharle518 |
|---|---|
| Access | remote |
| Publisher key required | No |
| Measured state | Deep-tested |
| L1 liveness | alive |
| L1 latency | 1733 ms |
| Last measured | 2026-10-24 |
Add to your agent
Copy this into your MCP client config:
{
"mcpServers": {
"Plumb Data Exchange": {
"url": "https://numba2witcheese.tail7d8d44.ts.net:10000/pde-mcp",
"transport": "streamable-http"
}
}
}
Measured tools (14)
convert_to_csvConvert a table to CSV without changing any value; verified by round-trip. Costs $0.05 USDC (x402).
Parameters:
table(required) — object — A string table: at most 1000 rows x 32 columns, 65536 characters total
Hints: read-only not declared · destructive not declared · idempotent not declared · open-world not declared
deduplicateRemove duplicate rows by exact key, keeping the first or last, and report conflicting columns per group. Costs $0.05 USDC (x402).
Parameters:
table(required) — object — A string table: at most 1000 rows x 32 columns, 65536 characters totalkeyColumns(required) — array — Columns that together identify a row (exact string match)keep(required) — string — Which duplicate to keep
Hints: read-only not declared · destructive not declared · idempotent not declared · open-world not declared
reconcileCompare two versions of a table by key: rows added, removed and changed (with the changed columns). Costs $0.05 USDC (x402).
Parameters:
before(required) — object — A string table: at most 1000 rows x 32 columns, 65536 characters totalafter(required)keyColumns(required) — array — Columns that together identify a row (exact string match)
Hints: read-only not declared · destructive not declared · idempotent not declared · open-world not declared
verify_paymentVerify an on-chain payment without trusting any RPC: did this tx transfer at least this amount of a token (default USDC) to this payee, optionally from this payer? Proven by Plumb (Base via proof-backed L1 checkpoints, Ethereum via a light client, XRP Ledger via a quorum of Ripple's validator list: RLUSD, XRP or any issued currency). Bound to the exact transfer (log index); returns the proof level, how long a Base checkpoint can still be challenged, the evidence to re-check, and an Ed25519-signed receipt. Never answers not_paid while a payment is still pending; abstains (unverifiable) whenever the proof is incomplete. Costs $0.02 USDC (x402) ($0.002 for an XRP Ledger payment); asking again about the same claim costs nothing. Optional requiredLevel (releasable or not) and callbackUrl (signed events when the level is reached, the answer changes, or checking gives up).
Parameters:
txHash(required) — string — Transaction hash (0x + 64 hex; XRPL: 64 hex)payee(required) — string — Address that should have received the money (XRPL: an r... account)chain— string — Chain of the paymentpayer— string — Only count transfers from this address (the token holder who paid)token— string — ERC-20 contract (default: USDC on the chain). XRPL: RLUSD (default), XRP, or CURRENCY.rIssuerlogIndex— integer — Bind to one transfer: its position within the tx's logsinvoiceId— string — XRPL only: the InvoiceID (64 hex) the payment must carry; binds the answer and its signed receipt to your invoicecallbackUrl— string — https URL to notify (signed, retried) when requiredLevel is reached, when the answer changes, or when checking gives upminAmountRaw— string — Minimum amount in base units, e.g. "50000" = 0.05 USDC (default: any). XRPL: XRP drops, or millionths of an issued currencyrequiredLevel— string — Proof level you need before releasing money (Base: tee_attested < zk_proven < resolved; Ethereum: finalized; XRPL: unl_quorum). The answer then says whether it is releasable.
Hints: read-only not declared · destructive not declared · idempotent not declared · open-world not declared
try_verify_paymentFree: the same verification as verify_payment, limited to 3 NEW claims per client per day (asking again about a claim already checked is always free). Holders of the exchange's on-ledger ProvenPayer credential get more: pass xrplProof (see credential_status).
Parameters:
txHash(required) — string — Transaction hash (0x + 64 hex; XRPL: 64 hex)payee(required) — string — Address that should have received the money (XRPL: an r... account)chain— string — Chain of the paymentpayer— string — Only count transfers from this address (the token holder who paid)token— string — ERC-20 contract (default: USDC on the chain). XRPL: RLUSD (default), XRP, or CURRENCY.rIssuerlogIndex— integer — Bind to one transfer: its position within the tx's logsinvoiceId— string — XRPL only: the InvoiceID (64 hex) the payment must carry; binds the answer and its signed receipt to your invoicexrplProof— objectminAmountRaw— string — Minimum amount in base units, e.g. "50000" = 0.05 USDC (default: any). XRPL: XRP drops, or millionths of an issued currencyrequiredLevel— string — Proof level you need before releasing money (Base: tee_attested < zk_proven < resolved; Ethereum: finalized; XRPL: unl_quorum). The answer then says whether it is releasable.
Hints: read-only not declared · destructive not declared · idempotent not declared · open-world not declared
get_verificationFree. Current state of a verification by checkId; re-checks it once its retry or challenge time has passed.
Parameters:
checkId(required) — stringrequiredLevel— string — Proof level you need before releasing money (Base: tee_attested < zk_proven < resolved; Ethereum: finalized; XRPL: unl_quorum). The answer then says whether it is releasable.
Hints: read-only not declared · destructive not declared · idempotent not declared · open-world not declared
watch_verificationFree for a PAID check: add a callback (https) that receives signed events when requiredLevel is reached, when the answer changes, when it becomes final, or when checking gives up. The service re-checks on its own.
Parameters:
checkId(required) — stringcallbackUrl(required) — stringrequiredLevel— string — Proof level you need before releasing money (Base: tee_attested < zk_proven < resolved; Ethereum: finalized; XRPL: unl_quorum). The answer then says whether it is releasable.
Hints: read-only not declared · destructive not declared · idempotent not declared · open-world not declared
verify_payments_batchVerify up to 25 payments in one call for $0.25 ($0.05 when every claim is on the XRP Ledger) USDC (x402): give `claims` (same fields as verify_payment) or `csv` (header: chain,txHash,payee,token,minAmountRaw,payer,logIndex,invoiceId). Claims already checked cost nothing; if all of them were, nothing is charged. Returns one row per claim (format "csv" adds a reconciliation CSV).
Parameters:
csv— stringclaims— arrayformat— stringrequiredLevel— string — Proof level you need before releasing money (Base: tee_attested < zk_proven < resolved; Ethereum: finalized; XRPL: unl_quorum). The answer then says whether it is releasable.
Hints: read-only not declared · destructive not declared · idempotent not declared · open-world not declared
get_verificationsFree. Up to 50 checks at once (re-checked when due), as rows; format "csv" adds a reconciliation CSV.
Parameters:
checkIds(required) — arrayformat— stringrequiredLevel— string — Proof level you need before releasing money (Base: tee_attested < zk_proven < resolved; Ethereum: finalized; XRPL: unl_quorum). The answer then says whether it is releasable.
Hints: read-only not declared · destructive not declared · idempotent not declared · open-world not declared
check_x402_receiptFree. Cross-check a seller's signed x402 offer + receipt (offer-and-receipt extension): verifies the signatures (official x402 functions; pin the seller with sellerAddress for EIP-712 or sellerJwk for JWS), checks offer and receipt agree, and returns the exact `claim` to prove with verify_payment. Pass that verification's checkId to learn which side failed.
Parameters:
receipt(required) — objectoffer— objectcheckId— stringsellerJwk— objectsellerAddress— string
Hints: read-only not declared · destructive not declared · idempotent not declared · open-world not declared
what_should_i_buildWhat should I build? x402 agent demand by category from public chain data (Base USDC + XRPL), with fake demand removed (testers, sellers paying themselves, loops; wallet fleets counted as one buyer) and gaps ranked (repeat buyers per seller). Rolling 7 days, refreshed every 2 h. Signed answer with sample transactions you can check, plus a dashboard link.
Hints: read-only not declared · destructive not declared · idempotent not declared · open-world not declared
credential_statusFree. The exchange's on-ledger ProvenPayer credential (XLS-70): issued to an XRPL account after 2 settled, Plumb-proven payments to the house; readable by any seller with ledger_entry. Returns the account's standing, the issued credential (with the CredentialCreate hash, provable with plumb-xrpl), how to accept it, and the challenge format for the holder unlock.
Parameters:
account— string
Hints: read-only not declared · destructive not declared · idempotent not declared · open-world not declared
prove_xrpl_transactionProve any XRP Ledger transaction without trusting a server: validator-list quorum, hash links, rebuilt tx tree. Returns full fields, metadata (balances, escrows, channels, credentials as of the tx), quorum evidence and a signed receipt. Unvalidated tx keeps your payment.
Parameters:
txHash(required) — string
Hints: read-only not declared · destructive not declared · idempotent not declared · open-world not declared
get_jobFree. Status and (once verified) the result of a paid job, using the accessToken its paid call returned.
Parameters:
jobId(required) — stringaccessToken(required) — string
Hints: read-only not declared · destructive not declared · idempotent not declared · open-world not declared
Measured by MCPYP probing. Untested fields are omitted, never estimated. Listing is always free; MCPYP never proxies calls or stores user tokens.