Mppx
TypeScript SDK for the Payment HTTP Authentication Scheme.
Install
npx skills add internet-court/internet-court-skill --skill mppx -g -a claude-code -y- Repository
- internet-court/internet-court-skill7k
- Category
- Engineering
- Updated
- 9d ago
- License
- See repository
- Context cost
- Lightabout 1,007 tokens
- Runs scripts
- No, instructions only
What it does
TypeScript SDK for the Payment HTTP Authentication Scheme. Handles 402 Payment Required flows with Tempo, Stripe, and other payment methods. Use when integrating payments or mppx into a client or server application.
mppx
TypeScript SDK for the "Payment" HTTP Authentication Scheme. Full 402 flow: challenge → credential → receipt.
What I can accomplish
- Add
402payment handling to a client withFetch.polyfillorFetch.from. - Protect HTTP routes with server-side MPP Challenges and Receipt responses.
- Accept one-time Tempo stablecoin payments with
tempo.charge. - Accept metered Tempo stablecoin payments with
tempo.session. - Accept one-time card payments with
stripe.charge. - Verify Credentials directly for custom transports or background workflows.
- Wrap MCP clients and servers so tool calls can require payment.
Required inputs
- Client integrations need a signing account and one or more client payment methods.
- Server integrations need a recipient, currency, amount, and
MPP_SECRET_KEY. - Tempo examples use chain ID
4217unless a page explicitly covers Moderato testnet. - Stripe examples need a configured Stripe account and Shared Payment Token flow.
- MCP integrations need the MCP client or server object to wrap.
Constraints
- Keep
MPP_SECRET_KEYserver-side and out of logs. - Never commit private keys or wallet seeds.
- Treat runtime
402Challenges as authoritative for current payment terms. - Return
idandopaqueunchanged when responding to a Challenge. - Use
USDC.efor Tempo bridged USDC examples, not generic USDC.
Client
import { Mppx, tempo } from 'mppx/client'
// Polyfills globalThis.fetch to handle 402 automatically
Mppx.create({
methods: [tempo({ account })],
})
const res = await fetch('https://api.example.com/resource')
Without polyfilling:
const mppx = Mppx.create({
methods: [tempo({ account })],
polyfill: false,
})
const res = await mppx.fetch('https://api.example.com/resource')
Server
import { Mppx, Store, tempo } from 'mppx/server'
import { privateKeyToAccount } from 'viem/accounts'
const account = privateKeyToAccount('0x...')
