Rust SDK
The mpp Rust library
Overview
The mpp Rust library provides a typed interface over the Machine Payments Protocol, from high-level abstractions to low-level primitives and building blocks.
Install
install.sh
$ cargo add mppWith Tempo blockchain support:
install-with-tempo.sh
$ cargo add mpp --features tempo,client,serverRequirements
- Rust 1.75+
reqwestfor HTTP requestsalloyfor Tempo signing (with thetempofeature)
Quick start
Server
use mpp::server::{Mpp, tempo, TempoConfig};
use mpp::{parse_authorization, format_www_authenticate};
let mpp = Mpp::create(tempo(TempoConfig {
recipient: "0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266",
}))?;
// Generate a Challenge for $0.50
let challenge = mpp.charge("0.50")?;
let header = format_www_authenticate(&challenge)?;
// → respond with 402 + WWW-Authenticate header
// Later, verify the Credential from the retry request
let credential = parse_authorization(auth_header)?;
let receipt = mpp.verify_credential(&credential).await?;
// → respond with 200 + paid contentClient
use mpp::client::{Fetch, TempoProvider};
use mpp::PrivateKeySigner;
let signer: PrivateKeySigner = "0xac0974bec..."
.parse()?;
let provider = TempoProvider::new(signer, "https://rpc.tempo.xyz")?;
// Handles 402 automatically — pay and retry
let response = reqwest::Client::new()
.get("https://api.example.com/paid")
.send_with_payment(&provider)
.await?;Feature flags
| Feature | Description |
|---|---|
client | Client-side providers, Fetch extension trait |
evm | Shared EVM utilities (Address, U256, signing) |
middleware | reqwest-middleware integration (implies client) |
server | Server verification, ChargeMethod trait |
tempo | Tempo blockchain support (includes evm) |
Common combinations
# Client only
mpp = { version = "0.1", features = ["tempo", "client"] }
# Server only
mpp = { version = "0.1", features = ["tempo", "server"] }
# Both
mpp = { version = "0.1", features = ["tempo", "client", "server"] }
# With middleware
mpp = { version = "0.1", features = ["tempo", "client", "middleware"] }Next steps
- Core types: Challenge, Credential, and Receipt primitives
- Client: Handle
402responses automatically - Server: Protect endpoints with payments