Gives Claude a single tool to extract structured schema.org/Product JSON from any URL. Each call costs $0.01 USDC paid via x402 from a Base Sepolia wallet you configure with a private key. The server forwards your payment and URL to a hosted endpoint running Playwright and Claude Haiku, which renders the page and returns name, price, currency, availability, variants, and images. Works well on Bandcamp, Shopify, and simpler sites. Fails on Amazon, Walmart, and other aggressive anti-bot targets. You fund a throwaway wallet with testnet ETH for gas and testnet USDC for calls, then point Claude Desktop at it via npx. No API keys or subscriptions, just per-call tolls.
A paid MCP server that gives AI agents structured product data from any URL.
Each extract_product tool call:
schema.org/Product JSON blob (name, price, currency, availability, variants, …)No API keys. No subscription. The agent pays the toll, gets the data.
Add this to your MCP config (~/Library/Application Support/Claude/claude_desktop_config.json on macOS):
{
"mcpServers": {
"x402-extract": {
"command": "npx",
"args": ["-y", "x402-extract-mcp"],
"env": {
"BUYER_PRIVATE_KEY": "0xYOUR_PRIVATE_KEY"
}
}
}
}
Restart your MCP client. You'll see an extract_product tool available.
A wallet on Base Sepolia (testnet) funded with:
Generate a throwaway key:
node -e "const {generatePrivateKey,privateKeyToAccount}=require('viem/accounts');const k=generatePrivateKey();console.log('PRIVATE_KEY=',k);console.log('ADDRESS=',privateKeyToAccount(k).address)"
Use the printed address to claim from faucets, then put the printed key into your MCP config.
In Claude Desktop, paste a product URL and ask:
Extract this product page using extract_product: https://stormkeep-odl.bandcamp.com/album/the-nocturnes-of-iswylm-2
You'll get back structured JSON with the product name, price, formats, availability, etc. The on-chain transfer is visible at https://sepolia.basescan.org.
{
"product": {
"name": "The Nocturnes Of Iswylm",
"description": "...",
"brand": "Stormkeep",
"price": 10,
"currency": "USD",
"availability": "preorder",
"variants": [
{ "name": "Format", "values": ["Digital Album", "12\" Vinyl (black)", ...] },
{ "name": "Vinyl Color", "values": ["Black", "Violet", ...] }
],
"images": [],
"url": "https://..."
},
"page": { "title": "...", "status": 200, "render_ms": 2879 },
"extraction": { "model": "claude-haiku-4-5", "input_tokens": 4479, "output_tokens": 405 }
}
| Env var | Required | Default |
|---|---|---|
BUYER_PRIVATE_KEY | yes | — |
EXTRACT_URL | no | https://x402-extract-production.up.railway.app/extract |
To point the MCP server at your own seller deployment, override EXTRACT_URL.
Claude Desktop ──tool call──> MCP server (this package, on your machine)
│
│ x402 payment + URL
▼
Public seller (Hono + Playwright + Claude on Railway)
│
│ structured JSON
▼
MCP server ──tool result──> Claude Desktop
The MCP server doesn't render pages itself. It signs an x402 payment with the buyer's wallet, sends the payment + URL to a public seller endpoint, and returns the seller's response. The seller does the actual headless rendering and Claude-driven schema extraction.
Works well:
Will return a fetch error (page status 403/429/no-content):
A future version will add residential-proxy support to handle these.
MIT
BUYER_PRIVATE_KEY*secretEthereum private key for the buyer wallet that pays the per-call USDC fee.
com.mcparmory/google-search
io.github.pipeworx-io/brave-search
marcopesani/mcp-server-serper
brave/brave-search-mcp-server
com.mcparmory/google-search-console
acamolese/google-search-console-mcp