Get API key

MCP Server

Rendex provides a Model Context Protocol server so AI agents can render HTML and capture screenshots natively.

Remote Server (Recommended)

Connect directly to mcp.rendex.dev — no installation needed.

Add to claude_desktop_config.json:

{
  "mcpServers": {
    "rendex": {
      "url": "https://mcp.rendex.dev/mcp",
      "headers": {
        "Authorization": "Bearer YOUR_API_KEY"
      }
    }
  }
}

macOS: ~/Library/Application Support/Claude/claude_desktop_config.json

Windows: %APPDATA%\Claude\claude_desktop_config.json

Linux: ~/.config/claude/claude_desktop_config.json

ChatGPT, Claude, and other OAuth-capable clients can connect with no API key — the remote server is fronted by OAuth 2.1 (authorization code + PKCE). You sign in once with your Rendex email and each agent renders against your own plan and credit pool. Clients that prefer a static key can pass Authorization: Bearer rdx_… as shown above.

Local via npx

Run the MCP server locally using stdio transport:

Add to claude_desktop_config.json:

{
  "mcpServers": {
    "rendex": {
      "command": "npx",
      "args": ["-y", "@copperline/rendex-mcp"],
      "env": {
        "RENDEX_API_KEY": "YOUR_API_KEY"
      }
    }
  }
}

macOS: ~/Library/Application Support/Claude/claude_desktop_config.json

Windows: %APPDATA%\Claude\claude_desktop_config.json

Linux: ~/.config/claude/claude_desktop_config.json

Claude Code (CLI)

Add a .mcp.json file to your project root:

{
  "mcpServers": {
    "rendex": {
      "command": "npx",
      "args": ["-y", "@copperline/rendex-mcp"],
      "env": {
        "RENDEX_API_KEY": "YOUR_API_KEY"
      }
    }
  }
}

Then restart Claude Code. The rendex_screenshot tool will be available automatically.

Important: Add .mcp.json to your .gitignore — it contains your API key.

Add to ChatGPT or Claude

Prefer the chat app? Add Rendex as a custom connectorin ChatGPT or Claude and authenticate once with OAuth — no API key to paste. Each agent then renders against your own plan and credits.

Server URL:

https://mcp.rendex.dev/mcp
  1. 1Open ChatGPT → Settings → Connectors. Under Advanced, enable Developer modeif you don’t see “Create”.
  2. 2Click Create to add a custom connector.
  3. 3Name it Rendex, paste the URL above, and set Authentication to OAuth.
  4. 4Confirm and create — sign in with your Rendex email (one-time code) to authorize.
  5. 5If no tools appear yet, click Refresh. Then try: “Use Rendex to screenshot example.com”.

Renders run against your own Rendex plan and credits — there’s no API key to paste. You authenticate once via OAuth.

Available Tools

The Rendex MCP server registers 13 tools— five rendering tools and the eight Rendex Watch change-monitoring tools. Each is annotated read-only or destructive/idempotent so a client can reason about safety.

ToolWhat it doesCredits
rendex_screenshotCapture a URL, raw HTML, or Markdown as an image or PDF; returns the image inline.1 / call
rendex_render_linkSame inputs, but returns a signed, hosted, edge-cached image URL for an og:image or <img>.1 / fresh render
rendex_extractRead any page as clean reader-mode Markdown / JSON / HTML (runs the page's JS first).1 / call
render_artifactTurn Markdown/HTML + branding into a hosted PDF + PNG + share page in one call.1 / format
rendex_accountPlan, this-month usage, rate limit, and an upgrade link. Read-only.Free
watch_* (8)Create, test, list, get, run, read runs, update, and delete website-change monitors. See Rendex Watch tools.1 / check

rendex_screenshot

Capture a screenshot or PDF of any webpage or raw HTML.

Source

ParameterTypeDefaultDescription
urlstringURL to capture. Mutually exclusive with html and markdown.
htmlstringRaw HTML to render and capture. Mutually exclusive with url and markdown. Great for invoices, social cards, email templates, OG images. Max 5MB.
markdownstringMarkdown to render as styled HTML, then capture. Mutually exclusive with url and html. Great for READMEs, docs, and reports. Max 5MB.
dataobjectKey-value data for Mustache templating. When present, the html or markdown source is rendered as a logic-less Mustache template before capture \u2014 {{var}} HTML-escaped, {{{var}}} raw, {{#items}}...{{/items}} loops, {{a.b}} nested. Not valid with url. Max 256KB.

Output

ParameterTypeDefaultDescription
format"png" | "jpeg" | "webp" | "pdf""png"Output format. Use pdf for invoices, reports, and archival.
qualitynumberJPEG/WebP quality (1–100). Ignored for PNG and PDF.
fullPagebooleanfalseFull scrollable page.
selectorstringCSS selector of a specific element to capture instead of the full page (max 500 chars).
resizeWidthnumberDownscale the output to this width in pixels (16\u20133840). Image formats only. Aspect ratio preserved when only one of resizeWidth/resizeHeight is set. Never upscales.
resizeHeightnumberDownscale the output to this height in pixels (16\u20132160). Image formats only.

Viewport

ParameterTypeDefaultDescription
widthnumber1280Viewport width (320–3840).
heightnumber800Viewport height (240–2160).
deviceScaleFactornumber2Pixel ratio (1–3). 2× Retina by default.
device"desktop" | "iphone_15" | "iphone_se" | "pixel_8" | "ipad" | "ipad_pro"Device preset that sets viewport, scale factor, and user agent in one shot. Explicit width, height, and userAgent still win.
darkModebooleanfalseDark color scheme.
userAgentstringOverride the browser user agent string (max 512 chars).

Timing

ParameterTypeDefaultDescription
delaynumber0Wait after page load (ms, 0–10000).
timeoutnumber30Navigation timeout in seconds (5–60).
waitUntilstring"networkidle2"Navigation event: "load", "domcontentloaded", "networkidle0", "networkidle2".
waitForSelectorstringCSS selector to wait for before capture.
bestAttemptbooleantrueReturn partial screenshot on timeout instead of failing.

Content Blocking

ParameterTypeDefaultDescription
blockAdsbooleantrueBlock ads and trackers.
blockResourceTypesstring[]Block specific resource types: "font", "image", "media", "stylesheet", "other".
hideSelectorsstring[]CSS selectors to hide (display: none) before capture \u2014 popups, sticky nav, chat bubbles (max 50). Never errors on a miss.
blockCookieBannersbooleanfalseHide common cookie/consent walls (OneTrust, Cookiebot, Quantcast, and similar) via a curated CSS list.

CSS & JS Injection

ParameterTypeDefaultDescription
cssstringCustom CSS to inject before capture. Hide cookie banners, add watermarks, override styles. Max 50KB.
jsstringCustom JavaScript to execute before capture. Runs in the browser sandbox. Max 50KB.

Cookies & Headers

ParameterTypeDefaultDescription
cookiesobject[]Cookies to set before capture (max 50). Each object has name and value (required), plus optional domain, path, httpOnly, secure, sameSite, and expires. Useful for authenticated pages.
headersRecord<string, string>Custom HTTP headers to send with the page request.

PDF Options

These parameters only apply when format="pdf".

ParameterTypeDefaultDescription
pdfFormat"A4" | "Letter" | "Legal" | "Tabloid" | "A3""A4"PDF page size.
pdfLandscapebooleanfalsePDF landscape orientation.
pdfPrintBackgroundbooleantruePrint background colors and images in PDF.
pdfScalenumber1PDF scale factor (0.1–2).
pdfMarginobjectPDF page margins with optional top, right, bottom, left properties. Accepts CSS values (e.g. "1cm", "20px").

Geo-Targeting

Render the page as seen from a specific country. Requires a Pro or Enterprise plan.

ParameterTypeDefaultDescription
geostringISO 3166-1 alpha-2 country code (e.g. "US", "DE", "JP"). Pro/Enterprise only.
geoCitystringCity for more precise geo-targeting (e.g. "Berlin"). Requires geo.
geoStatestringState or region for more precise geo-targeting (e.g. "California"). Requires geo.

Async Processing

ParameterTypeDefaultDescription
asyncbooleanfalseProcess capture asynchronously. Returns a jobId immediately instead of waiting. Poll GET /v1/jobs/:jobId for status.
webhookUrlstringURL to receive a POST callback when async capture completes. Requires async=true.
cacheTtlnumberSeconds to cache the result (3600\u20132592000). Returns a signed URL for retrieval. Requires async=true.

rendex_extract

Extract clean reader-mode content from any webpage as Markdown, JSON, or HTML. Runs the same Chromium render pass as a screenshot, so it captures content after JavaScript runs \u2014 handles SPAs that fetch-only readers miss. Strips nav, ads, and boilerplate, returning the article body plus title, byline, and excerpt. Great for feeding page content to an LLM, summarization, or RAG ingestion. Available on every plan, including Free.

ParameterTypeDefaultDescription
urlstringRequired. The webpage URL to extract readable content from.
extractFormat"markdown" | "json" | "html""markdown"Output shape — markdown (LLM-friendly prose), json (structured fields: title/byline/excerpt/siteName/length), or html (cleaned reader-mode HTML).
waitUntilstring"networkidle2"Page readiness event: "load", "domcontentloaded", "networkidle0", "networkidle2".
timeoutnumber30Maximum seconds to wait for page load (5–60).
device"desktop" | "iphone_15" | "iphone_se" | "pixel_8" | "ipad" | "ipad_pro"Device preset — extract the mobile or tablet version of a page.
blockCookieBannersbooleanHide common cookie/consent walls (GDPR/CCPA banners) before extraction.
hideSelectorsstring[]CSS selectors to hide before extraction \u2014 e.g. [".modal", "#newsletter-popup"] to remove overlays. Max 50.

Returns the extracted content as a text block. For image plus text in one call, use rendex_screenshot on POST /v1/screenshot/json with extract: true.

render_artifact

Turn Markdown or HTML into a branded, downloadable artifact — a PDF, a PNG, and a hosted share page — in one call. Apply a logo, accent color, font, header, and footer, and choose the PDF page size, orientation, and margins. Returns hosted URLs { pdfUrl, pngUrl, shareUrl, expiresAt }. Each requested format costs 1 render credit.

ParameterTypeDefaultDescription
contentstringRequired. The Markdown or HTML body to render (up to ~4MB).
inputFormat"markdown" | "html""markdown"Interpret content as Markdown (converted to styled HTML) or as an HTML body fragment.
formats("pdf" | "png")[]["pdf","png"]Which formats to produce. Each costs 1 render credit.
brandingobject{ logo, accentColor, font, header, footer } — theme applied to the artifact.
pageSetupobject{ size, orientation, margin, scale, width, height, fullPage }.
dataobjectOptional Mustache data — content is rendered as a logic-less template before conversion.
expiresInnumber86400Seconds until the hosted URLs expire (3600–2592000).

rendex_render_link

Render a URL, HTML, or Markdown and get back a signed, hosted, edge-cached image URL instead of the bytes — ideal for dynamic og:image tags. Takes the same parameters as rendex_screenshot, plus an optional expiresIn (60–2592000s). Returns { url, expiresAt, format, cacheTtl }. Costs 1 render credit per fresh render; cached repeat hits don't re-charge.

rendex_account

Check the account from inside the agent: the current plan, this month's usage (used / limit / remaining and the reset date), the per-minute rate limit, and a one-tap upgrade link. Takes no parameters. Read-only — costs no credits.

Rendex Watch tools

Rendex Watchmonitors a page for changes on a schedule; over MCP the whole lifecycle is available as eight tools, so an agent can stand up, inspect, retune, and tear down a monitor in conversation — no dashboard. Handlers return watch metadata and signed before/after/overlay image URLs as JSON text. Plan walls (interval floor, watch cap, webhooks = Starter+, geo & AI summary = Pro+) surface as tool errors. See the Watch docs for the full change-detection model.

ToolWhat it doesWrites?
watch_createCreate a monitor: url, intervalMinutes, diffMode (both = pixel + text), threshold, notifyEmail/webhookUrl, aiSummary, renderParams.Yes
watch_testDry-run a scope (no watch, no baseline, no charge) to validate a URL / selector / capture identity first.No
watch_listList watches, filterable by status (active / paused / all), paginated.No
watch_getFetch one watch by id.No
watch_runForce a check now instead of waiting for the schedule.Yes
watch_runsRead run history for a watch — each run carries changed, an optional AI summary, and signed before/after/overlay image URLs.No
watch_updateEdit in place; only fields you send change, renderParams is deep-merged, and webhookUrl/notifyEmail = null clears a channel.Yes
watch_deleteDelete a watch by id.Yes

MCP workflow recipes

Step-by-step agent walkthroughs of these tools — screenshotting, extracting, watching, and rendering share links — each source-accurate to a real MCP tool. Browse the full set on the recipes hub.

Let an AI Agent Render a Branded PDF from Markdown (Rendex MCP)

Give Claude, Cursor, or any MCP client the Rendex render_artifact tool and it turns the Markdown or HTML it just wrote into a branded PDF + PNG with a hosted share link — one tool call, no file plumbing, no headless browser.

Agent writes contentrender_artifactShare link back
Give Your AI Agent a Live Screenshot Tool (Rendex MCP)

Add the Rendex MCP server to Claude, Cursor, or Windsurf and the agent gains a rendex_screenshot tool — it can capture any URL, raw HTML, or Markdown as an image mid-task and see the result inline, no headless browser to run.

Agent needs to see a pagerendex_screenshotImage + metadata back
Let an AI Agent Read Any Web Page as Clean Markdown (Rendex MCP)

Give Claude, Cursor, or any MCP client the rendex_extract tool and it reads any URL as clean reader-mode Markdown — nav, ads, and boilerplate stripped, JavaScript-rendered content included — ready to summarize or drop into a RAG pipeline.

Agent hits a cluttered URLrendex_extractClean Markdown back
Have an AI Agent Watch a Page for Changes (Rendex MCP)

Give Claude, Cursor, or any MCP client the Rendex Watch tools and it can set up, test, run, and manage website-change monitors in conversation — validate a scope, create a watch, force a check, and read what changed, all without leaving the chat.

watch_test the scopewatch_createwatch_run + watch_runs
Generate a Hosted Share Image from an AI Agent (Rendex MCP)

Give Claude, Cursor, or any MCP client the rendex_render_link tool and it mints a signed, edge-cached image URL from a URL, HTML, or Markdown — drop it straight into an og:image tag or an <img> src instead of handling raw image bytes.

Agent has content to picturerendex_render_linkHosted URL back

Response Format

rendex_screenshot returns two content items:

  1. Image: Base64-encoded screenshot as an image content block
  2. Metadata: JSON text block with URL, dimensions, format, and file size

rendex_extract returns the cleaned content (title, site name, and body) as a single text block.

Example Usage in Claude

Once connected, simply ask:

"Take a screenshot of https://example.com in dark mode"

Claude will call the rendex_screenshot tool and display the captured image directly in the conversation.

Not Using AI Agents?

If you're building a regular application (not an AI agent), use the official SDKs instead of MCP:

MethodBest ForInstall
JavaScript SDKNode.js, Deno, Bun appsnpm install @copperline/rendex
Python SDKPython apps, scripts, notebookspip install rendex
REST APIAny language, cURL, webhooksSee API Reference

See the Quick Start for SDK examples.

Related

Building an agent that captures or reads web pages? See screenshots for AI agents for the capability deep-dive, or browse workflow recipes for end-to-end blueprints.

Was this page helpful?