Boring infrastructure
for AI agents.
16 pay-per-call x402 utility APIs for AI agents — pay per call in USDC on Base, no accounts, no API keys, no subscriptions.
- Charge-on-failure-safe fleet. Payment only settles on successful 2xx + non-empty content. Robots.txt enforced. SSRF-hardened across all 16 services.
- Composes naturally. Each service is a building block: scrape → clean → guard → validate → notify. Canonical workflows in the Compose guide.
- One install.
npx @melis-ai/x402-tools-mcpgives any MCP-aware agent access to the full catalogue.
16 services. Zero subscriptions.
Each call is a discrete payment. Your agent pays only for what it uses.
ScrapePay
Web extraction via Playwright. Charge-on-failure-safe.
View →MarkdownOpt
URL or HTML → clean LLM-ready markdown. ~70% token reduction.
View →StructExtract
HTML → structured JSON. Tables, links, emails, phones, headings.
View →CacheServe
Fetch a URL with server-side caching. Avoid redundant requests.
View →LinkRisk
Lightweight URL risk profile. Heuristic, fast, cheap.
View →LinkSafe
Definitive URL safety verdict. Playwright sandbox + VirusTotal.
View →PromptGuard
Score untrusted input for prompt injection risk.
View →SchemaGate
Validate LLM output against JSON Schema before passing downstream.
View →DocConvert-Text
Format conversion: md↔html, html↔txt, json↔csv.
View →DocConvert-PDF
HTML or markdown → PDF. Base64 output.
View →NotifyRelay /email
Send a transactional email from your agent. $0.005.
View →NotifyRelay /notify
Send a Telegram message from your agent. $0.002.
View →NotifyRelay /webhook
POST JSON to any public URL. Optional HMAC signing. $0.001.
View →Web Synthesise
Multi-source web research with a synthesised answer + citations.
View →Screenshot
Headless Chromium PNG screenshot of any public URL.
View →PDF Render
High-fidelity URL or HTML → PDF via Playwright. $0.49.
View →Services that compose.
Three canonical workflows used in production by OpenClaw agents.
Safe research workflow
Screen input → scrape the page → clean for LLM → validate output schema.
import { McpClient } from "@modelcontextprotocol/sdk/client";
// assuming x402-tools-mcp is configured in your MCP client
const guard = await client.callTool("promptguard", {
prompt: userInput,
sensitivity: "medium",
});
if (!guard.safe) throw new Error("Rejected: " + guard.risk);
const page = await client.callTool("scrapepay", {
url: targetUrl, format: "html",
});
const md = await client.callTool("markdownopt", {
html: page.content,
});
const check = await client.callTool("schemagate", {
response: llmOutput,
schema: expectedSchema,
});
if (!check.valid) throw new Error(check.hint); Full workflow → Notification pipeline
Scrape a page → extract structured data → send alert when condition is met.
const page = await client.callTool("scrapepay", {
url: "https://example.com/listings",
format: "html",
});
const data = await client.callTool("structextract", {
html: page.content,
extract: ["tables", "links"],
});
if (data.tables[0].rows.length > previousCount) {
await client.callTool("notifyrelay_telegram", {
chat_id: CHAT_ID,
message: `🆕 ${data.tables[0].rows.length} listings found`,
});
} Full workflow → Document generation workflow
Fetch content → clean it → convert to PDF → deliver by email.
const page = await client.callTool("scrapepay", {
url: reportUrl, format: "html",
});
const md = await client.callTool("markdownopt", {
html: page.content,
});
const pdf = await client.callTool("docconvert_pdf", {
from: "md", to: "pdf", content: md.markdown,
});
await client.callTool("notifyrelay_email", {
to: userEmail,
subject: "Your report",
body: "PDF attached: [base64]" + pdf.content,
}); Full workflow →