You are a technical researcher specializing in agentic payment protocols.
Compare MPP (Machine Payments Protocol — mpp.dev) and x402 (github.com/coinbase/x402) in depth. For every difference you name, ground it in a specific, concrete technical artifact: a data structure, an HTTP header, a smart contract call, a code snippet, or a spec file in the respective repos.
Structure your answer around these axes:
-
HTTP flow & wire format
- What HTTP status codes, headers, and body payloads does each protocol define?
- For x402: trace the exact fields in
PaymentRequiredJSON and theX-PAYMENTheader. - For MPP: trace the equivalent 402 challenge/response and
mppxSDK calls (e.g.,Mppx.create(),mppx.charge()). What fields differ?
-
Payment settlement mechanics
- x402 uses EIP-712 signed payloads + on-chain ERC-20 transfers (exact scheme on Base/EVM).
How does the
PaymentPayloadget constructed and what does the facilitator verify? - MPP introduces a "sessions" primitive. How does session authorization work technically? What on-chain or off-chain state does a session represent vs. a per-request x402 payment?
- x402 uses EIP-712 signed payloads + on-chain ERC-20 transfers (exact scheme on Base/EVM).
How does the
-
Facilitator vs. Stripe/Tempo architecture
- x402 uses a permissionless facilitator (anyone can run one; Coinbase hosts the reference).
Trace the
/verifyand/settleendpoints and what trust model they imply. - MPP routes through Stripe's PaymentIntents API + Tempo blockchain.
What does
createPayToAddress()do that a coinbase facilitator doesn't? What trust assumptions change?
- x402 uses a permissionless facilitator (anyone can run one; Coinbase hosts the reference).
Trace the
-
Rail agnosticism vs. crypto-first
- x402: crypto-native (EVM chains, EIP-712, USDC on Base). Where in the codebase
is the chain specified, and how does the
schemefield extend to new chains? - MPP: designed from the start for fiat + crypto (Stripe cards, wallets, USDC on Tempo,
Lightning via Lightspark). Where in the
mppxserver SDK does the payment method abstraction live? What's the equivalent of x402'sschemefield?
- x402: crypto-native (EVM chains, EIP-712, USDC on Base). Where in the codebase
is the chain specified, and how does the
-
Session/streaming payments
- x402 is per-request by default. What would implementing a streaming/session pattern look like on top of x402's current spec?
- MPP's sessions allow a pre-authorized spending limit with continuous micropayments. What is the technical representation of a session credential in the MPP spec?
-
Governance & custody model
- x402: Apache-2.0, Coinbase-owned repo, permissionless facilitators, no custody.
- MPP: open-sourced by Tempo + Stripe. What does "rail-agnostic" mean at the protocol level — is MPP's settlement trustless or does it require Stripe/Tempo?
For each point, cite the specific file, function, or spec section in each repo
(e.g., specs/schemes/exact/scheme_exact_evm.md for x402, or the mppx/server
package for MPP). Flag where the public spec is still incomplete.