12 nodes · free tier · MIT

Web tools that humans and agents call the same way.

Twelve composable nodes for turning web pages and documents into PDFs, screenshots, Markdown and structured JSON — with a browser playground, an OpenAPI spec and an MCP endpoint generated from one schema. Runs entirely on Cloudflare's free tier.

The nodes

Every node has a browser playground, a REST endpoint, an OpenAPI operation and an MCP tool — all generated from one schema definition, so they can never disagree.

Render

Real Chromium: PDFs, screenshots, JavaScript-rendered pages.

Convert

Deterministic format conversion. No model, no AI quota.

AI

Workers AI: summarise, extract, translate, see.

Two audiences, one schema

The same parameter definition drives the form you fill in, the validation that runs on the edge, the spec your function-calling framework reads, and the tool list your agent discovers.

Call it over HTTP

curl -X POST https://YOUR-HOST/api/v1/html-to-markdown \
  -H 'content-type: application/json' \
  -d '{"url":"https://example.com","readability":true}'

Binary tools stream the file by default. Add ?output=json to get a descriptor with a download URL instead — much kinder to a model's context window.

Or plug in the MCP server

{
  "mcpServers": {
    "ai-function-nodes": {
      "type": "http",
      "url": "https://YOUR-HOST/mcp"
    }
  }
}

One stateless HTTP endpoint, all 12 tools, no session to manage. Works with Claude Code, Claude Desktop and anything else speaking Streamable HTTP.

Built to fit inside the free tier

Not a trial. The architecture is shaped by the limits: streaming HTML parsing instead of a DOM, browser-session reuse instead of cold launches, deterministic converters before AI ones.

10 browser-minutes/day

Browser jobs reuse warm sessions and are rate limited per caller, so one heavy user cannot drain the day's allowance.

10 ms CPU/request

HTML → Markdown runs as a streaming HTMLRewriter pass: a couple of milliseconds even on large pages, and no AI quota at all.

10,000 neurons/day

AI nodes default to the cheapest capable model and tell you what a call costs before you make it.

Graceful degradation

Optional KV and R2 bindings improve things when present. Without them everything still works — files just come back as base64.