MPP Router is a payment proxy for AI agents on Stellar. It is not Cisco's Management Plane Protection, which shares the acronym; this one is about the Machine Payments Protocol (MPP) and x402. An agent pays the router once in USDC on Stellar, and the router pays the merchant behind the API in USDC on Tempo (or Base, for x402 merchants). One Stellar wallet, one hostname, and the merchant never has to know Stellar exists.
The problem it solves
MPP and x402 both work the same way at the HTTP level: call a paid endpoint, get 402 Payment Required, pay, retry. The catch is where the merchant wants to be paid. The MPP services listed on mpp.dev (88 services, around 489 paid POST endpoints as of 2026-04-12, per our llms.txt) settle on Base and Tempo. An agent whose only wallet is a Stellar USDC account cannot pay them. Its options are to bridge USDC out of Stellar, run a second wallet with gas on another chain, or skip the service.
Stellar has its own MPP and x402 implementations (see MPP on Stellar and x402 on Stellar), so a Stellar agent can already pay a Stellar merchant. What was missing was a way for that agent to reach the merchants that are not on Stellar. That is the gap the router fills.
How MPP Router works
The flow is three HTTP calls, and none of them are router-specific.
- The agent POSTs to
https://apiserver.mpprouter.dev/v1/services/{service}/{operation}with its request body and no payment header. The router forwards the body upstream to get a live quote and returns a dual-format 402: aWWW-Authenticateheader (mppx dialect) and aPayment-Requiredheader (x402 v2 dialect) in the same response, carrying the same amount, asset and recipient. - The agent signs a Stellar USDC payment for exactly that amount to the router's Stellar address. With mppx it retries with
Authorization: Payment <base64>; with x402 v2 it retries withPayment-Signature: <base64>. Fees are sponsored, so the agent does not need XLM. - The router verifies the credential, pays the merchant from its own Tempo pool, and returns the merchant's response plus a receipt header (
Payment-Receipton the mppx path;X-Payment-Tx,X-Payment-Method: stellar.x402andX-Payment-Settle-Statuson the x402 path).
The x402 v2 path is the one we recommend for new clients. It uses the stock @x402/core/client plus @x402/stellar/exact/client, the same client that works against Coinbase's x402 demo paywall. We verified it end to end on Stellar mainnet on 2026-04-12.
Discovery is open and unauthenticated:
GET /v1/services/catalog— the full catalog with public path, method, price, status and accepted payment methods per entryGET /v1/services/search?q=&category=&status=&limit=&offset=— keyword and category searchGET /x402/supported— a standard x402SupportedResponselistingexactonstellar:pubnetGET /openapi.json— OpenAPI 3.1 for the public surface
Here is the probe step of the x402 v2 quick start from our llms.txt, as curl. Step 1 confirms the scheme; step 2 fetches the quote. Signing the Payment-Required payload is done with the x402 client library, not by hand.
# 1. Confirm the router accepts x402 "exact" on stellar:pubnet
curl -s https://apiserver.mpprouter.dev/x402/supported
# 2. Probe a paid route with no payment header -> 402 with both dialects
curl -s -i -X POST \
https://apiserver.mpprouter.dev/v1/services/fal/flux_schnell \
-H 'Content-Type: application/json' \
-d '{"prompt":"a lighthouse at dawn","image_size":"square","num_inference_steps":4}' \
| grep -i -E '^(HTTP|www-authenticate|payment-required)'
# 3. Decode Payment-Required with x402HTTPClient.getPaymentRequiredResponse(),
# sign with createPaymentPayload(), then retry the same POST with
# Payment-Signature: <base64>What it costs and how settlement works
The price is whatever the 402 challenge says. The amountfield is the merchant's quote expressed in Stellar USDC base units (7 decimals), and our llms.txt tells agents to treat that challenge as authoritative rather than cache earlier prices, because merchants can re-price per request. We do not publish a separate fee schedule in the integration docs, so we will not quote one here.
Settlement is per request. Each credential is single-use and HMAC-bound to the amount, asset and recipient of the challenge it answers, so a credential for a cheap route cannot be replayed on an expensive one. On the x402 path the router runs facilitator verification itself, pays the merchant, and only on a merchant 2xx submits the agent's signed Soroban invoke on chain.
When the merchant fails after intake, the router returns 502. Our llms.txt is blunt about it: the Stellar payment has already settled at that point. Our public verification log records what happens next. On 2026-08-18 two paid calls to a route that was later delisted came back 502 with the order marked refund_pending in GET /v1/ledger; the first reached refunded with the wallet credited, and a charge-route refund rehearsal the same day completed on chain in 25 seconds. That is a small sample and we say so in the log. Refund status is checked through the ledger endpoint, not through a header.
What MPP Router is not
- Not an AI gateway. We do not buy tokens in bulk and resell them. The router forwards your request body to the merchant unchanged and returns the merchant's response.
- Not a facilitator for third parties. There is no
/x402/verifyor/x402/settlefor other servers to call./x402/supportedreportsfacilitator: "self": the router settles payments made to it, and nothing else. - Not custody. The router does not hold agent balances or accept deposits. Each request is paid on chain before the merchant is paid.
- Not a bridge. Your USDC stays on Stellar. The merchant is paid from the router's Tempo pool; the two legs are settled separately.
If you already hold a Tempo or Base wallet, a Bearer token, or a Stripe credential, send it and the router acts as a transparent proxy: the header reaches the merchant untouched, the router spends nothing, and no receipt is attached. Only Stellar credentials issued against the router's own challenge cause it to pay a merchant.
Router, direct, or bridge it yourself?
| MPP Router | Pay the merchant directly | Bridge USDC yourself | |
|---|---|---|---|
| Wallets the agent needs | One Stellar USDC account | One per merchant chain (Tempo, Base) | Stellar plus destination chain |
| Gas | Sponsored by the router; no XLM needed | Native gas on the merchant chain | Gas on both sides, plus bridge wait |
| Client code | Stock x402 v2 or mppx client | Merchant's x402 or MPP client | Bridge SDK plus merchant client |
| Who pays the merchant | The router, in USDC on Tempo or Base | You | You, after bridging |
| Discovery | One catalog, one hostname | Per merchant | Per merchant |
| Trust boundary | Router honours settled payments; refunds on non-delivery | Merchant only | Bridge plus merchant |
Where it sits in the Stellar ecosystem
The router is listed on skills.stellar.org as MPP Discover, an agent skill for finding and paying MPP services from a Stellar wallet. It was also mentioned in the Stellar developer meeting of 2026-04-23, which described it as reaching over 400 MPP endpoints and noted it was "not yet on mainnet" at the time.
That note is out of date. The router has been live on Stellar mainnet since the 2026-04-12 verification above. As of 2026-08-18, our public verification registry records 20 distinct services verified payable with real mainnet USDC and 446 payable routes in the catalog, each verification backed by a Stellar transaction hash. Verified does not mean the rest is broken; it means we have paid for those ourselves and published the receipts. Routes we have tested and found failing are removed from Stellar discovery so agents do not pay for them.
Going to mainnet with @stellar/mppyourself? At the time of writing the SDK's built-in mainnet USDC and XLM contract constants are invalid StrKeys (stellar-mpp-sdk issue #68). Supply the SAC address from the 402 challenge instead. The mainnet USDC SAC is CCW67TSZV3SSS2HXMBQ5JFGCKJNXKZM7UQUWUZPUTHXSTZLEO7SJMI75.
Try it
Read the flow in more detail on how it works, browse the live catalog on services, and point your agent at apiserver.mpprouter.dev/llms.txt for the machine-readable version of this post. If your agent has a Stellar USDC wallet and a stock x402 v2 client, MPP Router is the shortest path to the MPP and x402 merchants that do not settle on Stellar.