Rendex
Recipe

Let an AI Agent Read Any Web Page as Clean Markdown

Add the Rendex MCP server to Claude, Cursor, or Claude Code and rendex_extract appears as a tool. When the agent needs what a page actually says — to summarize it, answer from it, or ingest it — it gets clean reader-mode Markdown back: nav, ads, and cookie walls removed, and content that only appears after JavaScript runs included, because it's a real browser render, not a fetch.

Last updated 2026-07-21

The Problem

When an agent needs the content of a web page, a plain HTTP fetch usually fails it twice: the response is buried in nav bars, cookie walls, ads, and share widgets that pollute the model's context, and for any modern JavaScript-rendered site the fetch returns an empty shell before the real content loads. Building a reliable reader means running a headless browser and a readability pass — scraping infrastructure the agent's host is trying not to own.

The Solution

The Rendex MCP server exposes rendex_extract: the agent passes a URL and Rendex runs the same Chromium render pass a screenshot would — so JavaScript-driven content that fetch-only readers miss is fully present — then applies a reader-mode extraction that strips nav, ads, and boilerplate and returns the article body plus its title, byline, and excerpt. Ask for markdown (LLM-friendly prose, the default), json (structured title/byline/excerpt/siteName/length), or html (cleaned reader-mode). blockAds and blockCookieBanners clean the page first. It's one tool call, one render credit, and it runs on the free tier.

How the Workflow Runs

Agent hits a cluttered URL

An article, a docs page, a changelog — wrapped in nav, cookie walls, ads, and share widgets.

rendex_extract

One MCP tool call with the URL. A full Chromium pass runs the page's JS, then reader-mode strips the chrome.

Clean Markdown back

Title + byline + excerpt + body as Markdown (or JSON/HTML) — LLM-ready context, no scraping code.

Input → Rendered Output

Left: a cluttered web page in a browser frame — cookie banner, nav, sidebar ad, share buttons around the article. Right: a rendex_extract tool call and the clean Markdown it returns — a title, byline, and prose body with all the chrome stripped, ready for an LLM.

Rendered by Rendex

What You Need

  • A Rendex API key — the free tier includes 100 renders/month, no card required.
  • An MCP client: Claude Desktop, Claude Code, or Cursor.
  • The Rendex MCP server configured with your key (remote at mcp.rendex.dev, or the stdio server via npx) — see /docs/mcp.
  • Nothing else — extraction takes a URL; no CSS selectors or scraping rules required.

What This Recipe Uses

Reader-mode, LLM-ready

Strips nav, ads, cookie walls, and share widgets and returns the article body plus title, byline, and excerpt — clean context that doesn't waste the model's tokens on page chrome.

Renders JavaScript first

Runs the same full Chromium pass as a screenshot, so content that only appears after JS executes — SPAs, hydrated docs — comes back populated, where a plain fetch returns an empty shell.

Markdown, JSON, or HTML

extractFormat picks the shape: markdown (default prose) to feed an LLM, json (title/byline/excerpt/siteName/length) to store, or cleaned reader-mode html.

The read half of the toolkit

No scraping code, no selectors — just a URL. Pair it with rendex_screenshot (the visual half) so one agent can both read and see the web through the same MCP server.

Build It

rendex_extract.json
// The agent reads a page as clean Markdown to summarize it.
{
  "tool": "rendex_extract",
  "arguments": {
    "url": "https://rendex.dev/blog/mcp-rendering-guide",
    "extractFormat": "markdown",
    "blockCookieBanners": true
  }
}
// Returns text: "{title} — {siteName}\n\n{clean markdown body}"
extract-json.json
// Ask for JSON when you're storing the page, not just reading it.
{
  "tool": "rendex_extract",
  "arguments": {
    "url": "example.com/docs/pricing",
    "extractFormat": "json"
  }
}
// -> { "title": "...", "byline": "...", "excerpt": "...",
//      "siteName": "...", "length": 4820, "content": "..." }
what-the-tool-sends.sh
# rendex_extract wraps POST /v1/extract under the hood.
curl -X POST https://api.rendex.dev/v1/extract \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "url": "https://rendex.dev/blog/mcp-rendering-guide", "extractFormat": "markdown" }'
# -> { "data": { "title": "...", "content": "# ...clean markdown..." } }

100 free API calls/month — no credit card required. Get your API key and start building.

Reach for this whenever the agent needs to reason over what a page says rather than how it looks: summarizing an article a user pasted, answering a question from live documentation, or ingesting a batch of URLs into a knowledge base. It removes the two failure modes of a naive fetch at once — the content arrives clean, with the nav and ad clutter that would waste tokens and confuse the model already gone, and because Rendex runs the page in a real browser first, single-page apps and JS-hydrated docs that return an empty shell to a plain fetch come back fully populated. The markdown default is the natural shape for feeding an LLM, while json gives you structured fields to store and html gives cleaned markup when you need it. It's the read half of an agent's web toolkit — pair it with rendex_screenshot when the task needs the visual too — and at one credit per call on the free 100-a-month tier, you can wire it into a RAG ingest loop and prove the pipeline before it costs anything.

Frequently Asked Questions

Related Resources