ProofFetch: web fetch receipts for AI agents

Your agent passes a public URL. It gets back the HTTP status, the final URL after redirects, a timestamp, the page title, cleaned Markdown, and a SHA-256 of the exact bytes received. You pay per successful call. Failed calls are not charged.

Use it on Cracked ($0.04)Agent WonderlandMCP setup

Three tools, one fetch engine

ProofFetch Lite

POST /v1/proof · MCP proof_fetch

The full receipt: fetched_at, status_code, final_url, title, text_markdown, content_sha256. Use it when you need to show what a page said and when.

from $0.04 / call

ReadClean

POST /v1/readclean · MCP read_clean

Only title and text_markdown: the page with scripts, styles, nav, header, footer, forms and iframes removed. Use it to feed a page to an LLM.

from $0.01 / call

UrlWatch

POST /v1/urlwatch · MCP url_watch

Send url and, optionally, the previous_sha256. You get back the new content_sha256 and changed: true|false. Use it in monitor loops. If you leave out the previous hash, changed is always true.

from $0.005 / call

What the "proof" is (and isn't)

Real request and response

These were captured from the live server on 2026-10-08. The output is unedited apart from line breaks.

curl -sS -X POST https://proofetch.hardenbranch.workers.dev/v1/proof \
  -H 'Content-Type: application/json' \
  -d '{"url":"https://example.com"}'
{
  "ok": true,
  "product": "ProofFetch Lite",
  "fetched_at": "2026-10-08T17:20:44.976Z",
  "content_sha256": "25ddf2c883e0d1958ea971d279a7e4f0fd446724ee3db7db19dadabd4a62e484",
  "title": "Example Domain",
  "text_markdown": "This domain is for use in documentation examples without needing permission. This is not a service; avoid relying on it for testing and monitoring purposes.",
  "status_code": 200,
  "final_url": "https://example.com/"
}

ReadClean on the same URL (POST /v1/readclean):

{
  "ok": true,
  "product": "ReadClean",
  "title": "Example Domain",
  "text_markdown": "This domain is for use in documentation examples without needing permission. This is not a service; avoid relying on it for testing and monitoring purposes."
}

UrlWatch with the previous hash (POST /v1/urlwatch, body {"url":"https://example.com","previous_sha256":"25dd…e484"}):

{
  "ok": true,
  "product": "UrlWatch",
  "fetched_at": "2026-10-08T17:20:45.377Z",
  "content_sha256": "25ddf2c883e0d1958ea971d279a7e4f0fd446724ee3db7db19dadabd4a62e484",
  "changed": false,
  "previous_sha256": "25ddf2c883e0d1958ea971d279a7e4f0fd446724ee3db7db19dadabd4a62e484"
}

A blocked request (cloud metadata IP) returns HTTP 400 and isn't billable:

{
  "ok": false,
  "product": "ProofFetch Lite",
  "error": {
    "code": "ssrf_blocked",
    "message": "blocked_ip"
  },
  "chargeable": false
}

MCP setup (Claude, Cursor, any MCP client)

The server speaks MCP over Streamable HTTP (JSON-RPC 2.0, protocol 2025-03-26) at https://proofetch.hardenbranch.workers.dev/mcp. This page covers its three read-only tools: proof_fetch, read_clean and url_watch. The same endpoint also exposes two newer tools, site_crawl and sec_section. They aren't on the marketplaces yet; see /llms.txt.

Cursor (~/.cursor/mcp.json):

{
  "mcpServers": {
    "proofetch": { "url": "https://proofetch.hardenbranch.workers.dev/mcp" }
  }
}

Claude Code:

claude mcp add --transport http proofetch https://proofetch.hardenbranch.workers.dev/mcp

Claude Desktop (claude_desktop_config.json, through the mcp-remote bridge):

{
  "mcpServers": {
    "proofetch": {
      "command": "npx",
      "args": ["-y", "mcp-remote", "https://proofetch.hardenbranch.workers.dev/mcp"]
    }
  }
}

Metered through a marketplace (stable listing, one wallet or key for many tools):

# Agent Wonderland MCP (see docs.agentwonderland.com/consumers/setup)
{ "mcpServers": { "agentwonderland": { "command": "npx", "args": ["-y", "@agentwonderland/mcp"] } } }
# then ask your agent to run:
run_agent({ slug: "proof-fetch-lite", input: { "url": "https://example.com" } })

# Cracked (REST; also exposed as run_tool in https://cracked.ai/mcp)
curl -s https://cracked.ai/v1/run -H "Authorization: Bearer $CRACKED_API_KEY" \
  -H 'Content-Type: application/json' \
  -d '{"provider":"cp-prooffetch-lite-2","endpoint":"/post/v1/proof","input":{"url":"https://example.com"}}'

Raw JSON-RPC check:

curl -sS -X POST https://proofetch.hardenbranch.workers.dev/mcp -H 'Content-Type: application/json' \
  -d '{"jsonrpc":"2.0","id":1,"method":"tools/list"}'

Pricing

You pay per successful call, at the price the marketplace lists. Failed calls (invalid URL, blocked address, DNS failure, timeout, body over 2 MB) return HTTP 4xx/5xx with "chargeable": false and aren't charged.

ToolCrackedrun.payAgent Wonderland
ProofFetch Lite$0.04$0.04 (service 9a326c8a)$0.10
ReadClean$0.01$0.01 (service 38c95c4f)$0.10
UrlWatch$0.005$0.005 (service bf603002)$0.10

Prices as listed on 2026-10-08. Cracked's listing page says it adds a $0.001 platform fee per successful run. Agent Wonderland charges $0.10 per request for each tool, so Cracked or run.pay is the cheaper way to call ReadClean and UrlWatch. Full run.pay service IDs: ProofFetch 9a326c8a-bbac-4b11-9750-8a4fe52e22de, ReadClean 38c95c4f-ead6-4c76-a0f3-e77c70c5b262, UrlWatch bf603002-2584-47f8-97fb-ce1927cba95b.

About this host: calls made directly to https://proofetch.hardenbranch.workers.dev are currently unauthenticated and unmetered, so you can try it from the examples above. This is a temporary tunnel address with no uptime guarantee, and it can change without notice. The marketplace listings above are the stable way to use the tools in production. They're where pricing, receipts, retries and health tracking apply.

Limits and guarantees

FAQ

Is a 404 page billed? If the fetch completes, the call succeeds and status_code reports what the target returned (for example, 404). That counts as a successful call. Only errors on our side (blocked, invalid, DNS, timeout, too large) are non-billable.

Does it check robots.txt? No. It doesn't crawl. It makes one on-demand GET for the single URL your agent passes, with the User-Agent ProofFetch-Lite/1.0.0. You're responsible for fetching only pages you're allowed to.

Can it reach my intranet? No. Private and internal addresses are blocked by design.

Machine-readable docs? /llms.txt, /openapi.yaml, /health.

Contact

Questions, bulk use or a feature you need: ktstepp85@gmail.com (Kyle Stepp).