Xenarch is a non-custodial x402 MCP server. Claude, Cursor and any MCP client pay for HTTP 402–gated content with USDC micropayments on Base L2. Direct agent-to-publisher settlement on-chain. 0% Xenarch fee. The agent wallet only ever holds USDC — no ETH, no gas coin needed.
Project description
xenarch — Python SDK for Xenarch's x402 MCP server
Xenarch is a non-custodial x402 MCP server. Claude, Cursor and any MCP client pay for HTTP 402–gated content with USDC micropayments on Base L2. Direct agent-to-publisher settlement on-chain. 0% Xenarch fee — no Xenarch contract in the money flow. The agent wallet only ever holds USDC — no ETH, no other gas coin needed.
This package is the Python SDK and FastAPI middleware. Use it to (a) let LangChain / CrewAI / FastAPI agents pay any x402-gated URL, or (b) gate your own FastAPI endpoints behind HTTP 402.
Unlike Cloudflare Pay-Per-Crawl / TollBit
| Cloudflare Pay-Per-Crawl | TollBit | Xenarch | |
|---|---|---|---|
| Works on any host | ✗ (Cloudflare only) | ✗ (enterprise) | ✓ |
| Non-custodial | ✗ | ✗ | ✓ (agent-to-publisher direct, no Xenarch contract) |
| Agent needs ETH | n/a | n/a | ✓ never |
| Fee | Platform rate | Platform rate | 0% — no Xenarch contract that can charge a fee |
| Open standard | proprietary | proprietary | x402 + pay.json (open) |
Settlement happens on-chain via the x402 standard. Xenarch is never in the money flow.
Install
# For LangChain agents paying x402-gated APIs
pip install xenarch[langchain,x402]
# For publishers (FastAPI middleware)
pip install xenarch[fastapi]
Quick start
Agent: pay for x402-gated content
from decimal import Decimal
from xenarch.tools import XenarchPay, XenarchBudgetPolicy
tool = XenarchPay(
private_key="0x...",
budget_policy=XenarchBudgetPolicy(
max_per_call=Decimal("0.05"),
max_per_session=Decimal("1.00"),
),
)
# Use directly, or register with any LangChain agent.
print(tool.invoke("https://example.com/premium-article"))
XenarchPay is a LangChain BaseTool over the neutral x402-agent pay loop, plus Xenarch's signed-receipt and reputation extras. Settles USDC on Base via EIP-3009 — never custodial. Agent wallet only holds USDC; no ETH required.
Publisher: gate a FastAPI endpoint behind HTTP 402
from fastapi import FastAPI
from xenarch import XenarchMiddleware
app = FastAPI()
app.add_middleware(
XenarchMiddleware,
site_token="your-site-token",
protected_paths=["/premium/*"],
)
Or use the decorator:
from xenarch import require_payment
@app.get("/premium/article")
@require_payment(price_usd="0.05")
async def premium_article():
return {"content": "This is premium content"}
The decorator returns HTTP 402 with the price when called without payment, verifies the USDC transfer to the publisher's wallet on-chain, and grants access with a time-limited Bearer token.
Env vars
| Var | Purpose |
|---|---|
XENARCH_API_BASE |
Override the Xenarch API base URL (default: production) |
XENARCH_PRIVATE_KEY |
Agent wallet private key for signing USDC payments |
XENARCH_MAX_PAYMENT_USD |
Agent-configurable per-call cap. Default unbounded |
FAQ
How does Claude pay for APIs with Xenarch? Install the Xenarch MCP server, give it a wallet, and Claude resolves any HTTP 402 response automatically with a USDC micropayment on Base L2.
Is Xenarch custodial? No. Payments settle on-chain as a direct USDC transfer from the agent's wallet to the publisher's wallet. Funds never touch Xenarch infrastructure — there is no Xenarch contract in the money flow.
Does the agent need ETH for gas? No. USDC is the only token the agent wallet ever needs. Fund it with USDC and you're done.
What's the fee? 0%. There is no Xenarch contract that can charge a fee — the architecture is structurally zero-fee, not a policy promise.
What's the max payment? Agent-configurable. Default is unbounded; set XENARCH_MAX_PAYMENT_USD to cap per-call spend.
Links
- Learn more: https://xenarch.com
- GitHub: https://github.com/xenarch-ai/xenarch-sdks
License
MIT
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file xenarch-0.2.3.tar.gz.
File metadata
- Download URL: xenarch-0.2.3.tar.gz
- Upload date:
- Size: 55.7 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.10.9 {"installer":{"name":"uv","version":"0.10.9","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
cea875bc7a769ffda592b2643da5a4da4f23181d62f25ef5436172225931f6a9
|
|
| MD5 |
1c0bb6faca23470aa0aaf0355f19baad
|
|
| BLAKE2b-256 |
180448cc324722cb1e7a5a789d2ce0064875c24f88c8b6eae7781393a340f87a
|
File details
Details for the file xenarch-0.2.3-py3-none-any.whl.
File metadata
- Download URL: xenarch-0.2.3-py3-none-any.whl
- Upload date:
- Size: 32.2 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.10.9 {"installer":{"name":"uv","version":"0.10.9","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
2dcaf7ebb6f15a8a5626dde7ee2f35e513971e9a313a8d0df085c1937d9c0c45
|
|
| MD5 |
a717a07843d1e3648fca324e0f686ccf
|
|
| BLAKE2b-256 |
4eedec95a6e91a87f2a94c978e72bd87ef46d63ce3fdf498f02efc626a331b00
|