Skip to content
LogoLogo

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 mpp

With Tempo blockchain support:

install-with-tempo.sh
$ cargo add mpp --features tempo,client,server

Requirements

  • Rust 1.75+
  • reqwest for HTTP requests
  • alloy for Tempo signing (with the tempo feature)

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 content

Client

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

FeatureDescription
clientClient-side providers, Fetch extension trait
evmShared EVM utilities (Address, U256, signing)
middlewarereqwest-middleware integration (implies client)
serverServer verification, ChargeMethod trait
tempoTempo 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 402 responses automatically
  • Server: Protect endpoints with payments