Why Wasit Exists
x402 and MPP have an official SDK. They have no independent conformance tester.
stellar-anchor-tests fills that role for the anchor ecosystem: an anchor
operator points it at their deployment and gets an answer about whether their
service actually implements the protocol. Nothing equivalent exists for the
agentic-payments stack, so "we support x402" is currently a claim nobody can
check.
That gap is not theoretical. Three concrete divergences turned up while building this tool, all against official, current packages:
The payment header has two names. Stellar's own documentation uses
PAYMENT-REQUIRED in one place and X-Payment in another. A client written
from one page will not find the header emitted by a server written from the
other. X402-02 deliberately accepts either, because refusing one would mean
failing services that followed official documentation — but a service cannot
know which convention its callers expect. This is a documentation defect
upstream, and it is exactly the kind of thing a conformance tester exists to
surface.
A whole error taxonomy is unreachable. In MPP channel mode, every rejection — replay, non-monotonic commitment, bad signature, a channel already settling — returns an identical HTTP 402 body. The SDK defines precise error types for each of these and none are reachable, because of a class-hierarchy mismatch between two packages. An operator debugging a rejected payment cannot tell which rule they broke. See docs/CHECKS.md and the full write-up in docs/findings/upstream-sdk.md. Filed upstream as stellar-mpp-sdk#66; independently confirmed by RouteDock's fix for the same defect.
A parameter named for one thing does another. feePayer.envelopeSigner
reads like the account paying transaction fees. It is actually the account
providing authorisation, and the channel contract requires different accounts
for different operations. Getting it wrong produces a transaction that reaches
the chain and fails there, surfaced by the SDK as [object Object]. Filed
upstream as stellar-mpp-sdk#67.
Wasit exists so these are found by a tool, before they are found by a user.
Who it's for
Shipping a service. Run Wasit against your own x402 or MPP endpoint before a customer finds the gap you missed.
Building on top of one. Wire Wasit's MCP tools into an agent so it checks a target's real conformance before trusting it.
