agentpay
AgentPay — agentpay.help
Machine-payable AI microservices via the 402 Payment Required protocol (x402 / MPP)
No accounts. No API keys. No OAuth. Pay per call in USDC on Base.
AgentPay is an open-source reference implementation of the Machine Payments Protocol — wrapping local AI models behind an HTTP 402 paywall so that AI agents (and humans) can pay for compute on a per-request basis using stablecoins.
Built with Express 5, @x402/express, and Ollama-served Gemma models. Live on Base mainnet with the PayAI facilitator.
Table of Contents
Related MCP server: dyoe-agent-tools-mcp
Quick Start
Prerequisites
Node.js ≥ 20
Ollama running locally with the required model pulled
A wallet private key (for receiving payments)
1. Clone & install
git clone https://github.com/your-org/AgentPay.git
cd AgentPay
npm install2. Pull the AI model
ollama pull gemma3:1b
# Or use a larger model for better quality:
# ollama pull gemma4:31b-cloud3. Configure
cp .env.example .env
# Edit .env — set SELLER_ADDRESS to your wallet address4. Start the server
npm start
# AgentPay listening on :4021
# payTo: 0xYourWalletAddress
# network: eip155:84532 (Base Sepolia testnet)
# facilitator: https://x402.org/facilitator5. Test a paid request
# Unpaid request → HTTP 402 (paywall)
curl -s -o /dev/null -w "%{http_code}" -X POST https://agentpay.help/v1/summarize \
-H 'Content-Type: application/json' \
-d '{"text":"Machine Payments Protocol lets AI agents pay for API calls using the HTTP 402 status code."}'
# → 402
# Automated test (requires buyer wallet with USDC)
npm run test:4026. Buy a service (buyer client)
# Set your buyer private key in .env
echo "BUYER_PK=0xYourPrivateKey" >> .env
# Run the buyer script
npm run buyer -- /v1/summarize ./payload.jsonArchitecture
┌─────────────────────────────────────────────────────────────────┐
│ AgentPay Architecture │
├─────────────────────────────────────────────────────────────────┤
│ │
│ ┌──────────┐ HTTP POST ┌───────────────────────────┐ │
│ │ Client │ ──────────────► │ Express 5 Server │ │
│ │ (Agent / │ (no auth) │ (port 4021) │ │
│ │ Human) │ │ │ │
│ └──────────┘ │ ┌─────────────────────┐ │ │
│ │ │ │ Payment Middleware │ │ │
│ │ │ │ (@x402/express) │ │ │
│ │ │ │ │ │ │
│ │ ◄── HTTP 402 ───────│ │ • Validates x402 │ │ │
│ │ (paywall) │ │ payment headers │ │ │
│ │ │ │ • Verifies on-chain │ │ │
│ │ ──── signed payment ►│ │ via facilitator │ │ │
│ │ (USDC) │ │ │ │ │
│ │ │ └──────────┬──────────┘ │ │
│ │ ◄── 200 OK ─────────│ │ │ │
│ │ (result JSON) │ ┌──────────▼──────────┐ │ │
│ │ │ │ Service Handlers │ │ │
│ │ │ │ │ │ │
│ │ │ │ /v1/summarize │ │ │
│ │ │ │ /v1/classify-ins │ │ │
│ │ │ │ /v1/extract │ │ │
│ │ │ └──────────┬──────────┘ │ │
│ │ └─────────────┼─────────────┘ │
│ │ │ │
│ │ ┌──────▼──────┐ │
│ │ │ Ollama │ │
│ │ │ (local LLM) │ │
│ │ │ gemma3:1b │ │
│ │ └─────────────┘ │
│ │ │
│ ┌────▼────────────────────────────────────────────────────┐ │
│ │ Payment Flow (x402) │ │
│ │ │ │
│ │ Client ──► HTTP 402 ──► Facilitator ──► On-Chain ──► │ │
│ │ │ (PayAI) Base Mainnet │ │
│ │ ▼ (USDC) │ │
│ │ Payment Required │ │
│ │ (price + accepts[]) │ │
│ └─────────────────────────────────────────────────────────┘ │
│ │
│ ┌─────────────────────────────────────────────────────────┐ │
│ │ Free Endpoints (no paywall) │ │
│ │ • / — Landing page (HTML) │ │
│ │ • /health — Health check │ │
│ │ • /stats — Revenue & usage stats │ │
│ │ • /.well-known/x402 — Machine-readable service catalog │ │
│ └─────────────────────────────────────────────────────────┘ │
│ │
│ ┌─────────────────────────────────────────────────────────┐ │
│ │ Data Layer │ │
│ │ • data/ledger.json — Append-only payment ledger │ │
│ └─────────────────────────────────────────────────────────┘ │
└─────────────────────────────────────────────────────────────────┘How it works:
Client sends
POST /v1/summarize(or any paid endpoint) — no auth headers neededPayment middleware intercepts, returns HTTP 402 with pricing info (
accepts[])Client constructs a USDC payment, signs it, attaches
X-PAYMENTheaderFacilitator verifies the payment on Base mainnet
Middleware grants access → request proceeds to the service handler
Handler calls Ollama, returns AI-generated result as JSON
Services & Pricing
Endpoint | Price | Description |
| $0.01 | AI text summarization — crisp 250-word summary of any text up to 20k chars |
| $0.02 | Insurance lead classifier — intent, urgency, line of business, confidence |
| $0.02 | Sentiment analysis — positive/negative/neutral with emotions and keywords |
| $0.03 | Structured field extraction — key-value pairs from emails, forms, documents |
| $0.03 | Text translation — translate to any language |
| $0.05 | AI code review — bugs, security, performance, quality score |
| $0.10 | Full insurance analysis bundle — classification + field extraction + summary in one call |
| $0.02 | Token safety check - rug pull risk, honeypot detection, liquidity analysis |
| $0.02 | Wallet risk screening - OFAC sanctions, scam flags, tx patterns |
| $0.01 | Extract clean text from any URL - agents read web pages |
| $0.005 | Real-time crypto prices - BTC, ETH, SOL + more |
| $0.03 | Vision AI - describe any image from URL |
| $0.01 | DeFi yield data - APY, TVL, protocol info |
| $0.02 | CVE/threat intelligence - vulnerability lookup, severity |
| $0.02 | OFAC/EU sanctions screening - entity check |
| $0.02 | Macro/economic snapshot - GDP, inflation, rates |
| $0.01 | Decoded on-chain events - recent transfers |
| $0.02 | Content security scan - PII, toxicity, bias |
| $0.01 | Agent reputation score - endpoint trustworthiness |
| $0.03 | Legal/regulatory lookup - company registration |
| $0.005 | Real-time news feed - headlines by topic |
| $0.005 | Weather data - current conditions and forecast |
| $0.01 | Web search - top results for any query with title, url, snippet |
| $0.005 | Persistent key-value memory scoped to your wallet - agents remember across runs |
| $0.005 | Geocode place names to lat/lon; reverse geocode coordinates to addresses |
| $0.003 | Ethereum gas prices - rapid/fast/standard/slow in gwei plus ETH spot price |
| $0.01 | Polymarket prediction market odds - live probabilities for any topic |
| $0.25 | PREMIUM deep research - multi-source web research into a cited markdown report |
All services accept USDC on Base mainnet (chain ID 8453) via the exact payment scheme. Testnet (Base Sepolia) is available via configuration.
MCP Server
AgentPay ships two Model Context Protocol servers so any MCP-capable client (Claude Desktop, Cursor, Windsurf, VS Code, Smithery hosts, …) can call the paid endpoints directly.
1. Remote (Streamable HTTP) — no install, no API keys
The live server exposes all 28 services as MCP tools:
POST https://agentpay.help/mcpTransport: Streamable HTTP (JSON-RPC 2.0)
Auth: none — connecting is free; the underlying endpoint is paid
tools/list→ 28 tools, one per service
When a tool is called, the handler performs the real HTTP request and, on HTTP 402, returns the x402 v2 payment challenge (decoded from the PAYMENT-REQUIRED response header) to the calling agent, along with the price and a ready-to-send X-PAYMENT hint. An x402-capable client pays in USDC on Base and retries to receive the result.
Verify the handshake:
curl -s -X POST https://agentpay.help/mcp \
-H 'Content-Type: application/json' \
-H 'Accept: application/json, text/event-stream' \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/list","params":{}}' | jq '.result.tools | length'
# => 28Discovery manifests: /.well-known/mcp.json (both servers) and /.well-known/mcp-endpoint.json.
2. Local (stdio) — pays from a local wallet
npx github:ronaldanton/x402-shop mcp-server.jsEnv var | Description |
| Base URL of the AgentPay deployment (default |
| Hex private key of the buyer wallet — the MCP server signs and settles the x402 payment automatically |
This variant settles payments itself, so the MCP client needs no x402 awareness.
Registry
Published to the official MCP Registry as io.github.ronaldanton/agentpay with the remote transport declared:
{ "type": "streamable-http", "url": "https://agentpay.help/mcp" }Tech Stack
Component | Technology |
Runtime | Node.js ≥ 20 (ESM) |
HTTP Server | Express 5.2 |
Payment Protocol |
|
Blockchain | Base (OP Stack L2), USDC stablecoin |
Facilitator | PayAI x402 facilitator ( |
AI Runtime | Ollama (local inference) |
LLM | Gemma 3 1B (default) / Gemma 4 31B (recommended) |
Wallet |
|
Config | dotenv |
Deployment
Local Development
# Base Sepolia testnet (recommended for development)
cp .env.example .env
# Edit .env: PAYMENT_NETWORK=eip155:84532
npm startProduction (Base Mainnet)
# Edit .env for mainnet
PAYMENT_NETWORK=eip155:8453 # Base mainnet
SELLER_ADDRESS=0xYourMainnetWallet
OLLAMA_URL=http://127.0.0.1:11434
MODEL_SUMMARIZE=gemma4:31b-cloud # Use larger model for quality
MODEL_CLASSIFY=gemma4:31b-cloud
MODEL_EXTRACT=gemma4:31b-cloudDocker (recommended for production)
FROM node:20-slim
WORKDIR /app
COPY package*.json ./
RUN npm ci --omit=dev
COPY src/ ./src/
COPY data/ ./data/
EXPOSE 4021
HEALTHCHECK CMD curl -f https://agentpay.help/health || exit 1
CMD ["node", "src/server.js"]Environment Variables
Variable | Required | Default | Description |
| No |
| Server port |
| Yes | — | Wallet address to receive USDC payments |
| No |
| Blockchain network ( |
| No |
| x402 facilitator endpoint |
| No |
| Ollama API base URL |
| No |
| Model for summarize endpoint |
| No |
| Model for classify-insurance endpoint |
| No |
| Model for extract endpoint |
| No | — | Public URL for discovery metadata |
API Reference
Free Endpoints
GET /
Landing page with service catalog and usage stats.
GET /health
Health check.
{ "ok": true, "ts": "2025-01-01T00:00:00.000Z" }GET /stats
Revenue and usage statistics.
{
"requests_paid": 42,
"gross_usd": 0.84,
"by_service": { "summarize": 0.42, "classify-insurance": 0.28, "extract": 0.14 },
"last_20": [...]
}GET /.well-known/x402
Machine-readable service catalog (Bazaar discovery extension). Use this for automated service discovery by AI agents.
{
"name": "AgentPay",
"description": "Pay-per-call AI microservices (x402 / MPP)",
"endpoints": [
{ "path": "/v1/summarize", "method": "POST", "price": "$0.01", "description": "Summarize text (200-20k chars)" },
{ "path": "/v1/classify-insurance", "method": "POST", "price": "$0.02", "description": "Insurance lead classification" },
{ "path": "/v1/extract", "method": "POST", "price": "$0.03", "description": "Structured field extraction" }
]
}Paid Endpoints
All paid endpoints require a valid x402 payment in the X-PAYMENT header. Unpaid requests receive HTTP 402 Payment Required.
POST /v1/summarize — $0.01
Summarize text into a concise ~250-word output.
Request:
{
"text": "Your text to summarize (200-20000 characters)..."
}Response (200 OK):
{
"summary": "The text discusses...",
"words": 247
}Errors:
400— Missingtextfield or text exceeds 20,000 characters402— Payment required (see x402 protocol)502— Upstream AI model failed
POST /v1/classify-insurance — $0.02
Classify an insurance lead or customer message.
Request:
{
"text": "I was in a car accident last week and need to file a claim urgently..."
}Response (200 OK):
{
"intent": "claim",
"urgency": "high",
"line": "auto",
"confidence": 0.92
}Possible values:
intent:quote_request|renewal|claim|complaint|otherurgency:low|medium|highline:auto|home|life|health|commercial|other
POST /v1/extract — $0.03
Extract structured fields from raw text (emails, forms, documents).
Request:
{
"text": "From: john@example.com\nSubject: Policy #12345 renewal\nDear customer, your auto policy expires on March 15...",
"fields": ["email", "policy_number", "expiry_date"]
}Response (200 OK):
{
"email": "john@example.com",
"policy_number": "12345",
"expiry_date": "March 15"
}If fields is omitted, all extractable key-value pairs are returned.
Client Library (Buyer)
Use @x402/fetch to automatically handle the 402 → payment → retry flow:
import { wrapFetchWithPayment, x402Client } from "@x402/fetch";
import { ExactEvmScheme } from "@x402/evm/exact/client";
import { privateKeyToAccount } from "viem/accounts";
const signer = privateKeyToAccount(process.env.BUYER_PK);
const client = x402Client.fromConfig({
schemes: [{ network: "eip155:*", client: new ExactEvmScheme(signer) }],
});
const payFetch = wrapFetchWithPayment(globalThis.fetch, client);
// This automatically handles the 402 → payment → retry flow
const res = await payFetch("https://agentpay.help/v1/summarize", {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({ text: "Your text here..." }),
});
const result = await res.json();
console.log(result.summary);Contributing
Contributions are welcome! This is an open-source reference implementation of the x402 / MPP protocol.
Development Setup
git clone https://github.com/your-org/AgentPay.git
cd AgentPay
npm install
cp .env.example .env
# Edit .env with your test wallet and Base Sepolia settings
npm startAdding a New Service
Define the payment middleware entry in
src/server.jsunder thepaymentMiddleware()callAdd the route handler after the middleware block
Register the endpoint in
/.well-known/x402discoveryAdd to the landing page HTML
Guidelines
Keep it simple. This is a reference implementation — clarity over complexity.
Test on Base Sepolia first. Use the testnet before going to mainnet.
Use
@x402/packages. Don't reinvent payment verification.Append-only ledger. Never modify
data/ledger.json— only append.
Reporting Issues
Open a GitHub issue with:
Steps to reproduce
Expected vs. actual behavior
Environment (Node version, OS, model used)
License
MIT
Resources
x402 Protocol Spec — The Machine Payments Protocol
PayAI Facilitator — Payment verification service
Base Network — OP Stack L2 where USDC payments settle
Ollama — Local LLM inference engine
viem — TypeScript Ethereum client
Related MCP Connectors
Pay-per-call AI tools over x402: web research, summarization, structured extraction (USDC, Base).
Pay-per-call tools for autonomous agents, settled in USDC on Base via x402.
Pay-per-call (x402/USDC-Base) web + crypto data tools for AI agents: audit, extract, crypto, DeFi.
Pay-per-call data APIs for AI agents. USDC on Base via x402. 33 tools, no signup.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenancePay-per-call web search for AI agents, settled in USDC on Base via the x402 protocol. No API key or subscription required; users fund a wallet and get a web_search tool.5 npm1MIT
- FlicenseAqualityCmaintenancePay-per-call tools for AI agents including trust checks, due diligence, market data, and human-verified approvals, settled in USDC on Base via the x402 protocol.16-
- AlicenseNot gradedqualityBmaintenanceWebsite intelligence tools for AI agents. Ten pay-per-call tools via x402 micropayments (USDC on Base) — no accounts, no API keys.2MIT
- FlicenseNot gradedqualityBmaintenanceEnables AI agents to call 45 micro-priced utility tools via x402 micropayments on Base, covering search, screenshots, OCR, PDFs, WHOIS, geo-IP, and more without API keys.-