SDK
Python SDK
Full-featured Python client for MPPCash. Supports wallet management, direct transfers, MPP Charge and Session intents, and policy controls.
Installation
bash
pip install mppcash
Initialize the client
python
import os
from mppcash import MPPCash
client = MPPCash(api_key=os.environ["MPPPAL_API_KEY"])
Wallets
python
# Provision a new agent wallet
wallet = client.accounts.create(name="research-agent-prod")
print(wallet.account_id) # acct_01j8k4x9p2qrst7yz
print(wallet.solana_address) # 9xTz4KqR8...
print(wallet.usdc_token_account) # Fund this with USDC
# Get balance
balance = client.accounts.get_balance(wallet.account_id)
print(f"Balance: ${balance.balance_usdc} USDC")
# List wallets
wallets = client.accounts.list(limit=50)
Transfers
python
transfer = client.transfers.create(
from_account="acct_01j8k4x9p2qrst7yz",
to="acct_02k9n5y3q7wpuv8ab", # MPPCash account_id or raw SPL address
amount="8.50",
memo="Task reward: data-fetch-88",
idempotency_key="task-88-reward",
)
print(transfer.status) # "settled"
print(transfer.tx_signature) # Solana signature
MPP Agent (HTTP 402 auto-payment)
Wrap the SDK's HTTP session around your agent's outbound calls. MPPCash intercepts HTTP 402 responses, resolves the payment challenge against your wallet, and retries the request transparently.
python
from mppcash import Agent
agent = Agent(
wallet=os.environ["MPPPAL_WALLET_ID"],
api_key=os.environ["MPPPAL_AGENT_KEY"],
)
# Automatic MPP payment on 402 responses
with agent.http_session() as http:
response = http.post(
"https://api.inference.xyz/summarize",
json={"text": document_content},
)
print(response.json())
MPP Sessions
python
from mppcash import Agent
agent = Agent(
wallet=os.environ["MPPPAL_WALLET_ID"],
api_key=os.environ["MPPPAL_AGENT_KEY"],
intent="session",
session_cap="5.00", # pre-authorize up to $5 USDC
)
# 500 inference calls → one Solana settlement at the end
with agent.http_session() as http:
results = []
for doc in documents:
resp = http.post("https://api.inference.xyz/summarize", json={"text": doc})
results.append(resp.json())
# Session closes on context exit — single on-chain settlement fires
receipt = agent.last_session_receipt
print(f"Settled: ${receipt.settled_usdc} USDC. Tx: {receipt.tx_signature}")
Policy
python
# Update policy (operator key required)
client.policy.update(
account_id="acct_01j8k4x9p2qrst7yz",
max_single_transfer=10,
max_daily_spend=100,
categories=["inference", "data"],
require_memo=True,
paused=False,
)
# Emergency pause
client.policy.pause("acct_01j8k4x9p2qrst7yz")
Error handling
python
from mppcash.exceptions import MPPCashError, PolicyViolationError
try:
transfer = client.transfers.create(...)
except PolicyViolationError as e:
print(f"Blocked by policy: {e.message}")
# escalate to operator, log event, etc.
except MPPCashError as e:
print(f"API error {e.code}: {e.message}")
Framework integrations
For LangChain and CrewAI integrations, see Framework Integrations. The Python SDK is the foundation both packages build on.