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- 1Open ChatGPT → Settings → Connectors. Under Advanced, enable Developer modeif you don’t see “Create”.
- 2Click Create to add a custom connector.
- 3Name it Rendex, paste the URL above, and set Authentication to OAuth.
- 4Confirm and create — sign in with your Rendex email (one-time code) to authorize.
- 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.
| Tool | What it does | Credits |
|---|---|---|
rendex_screenshot | Capture a URL, raw HTML, or Markdown as an image or PDF; returns the image inline. | 1 / call |
rendex_render_link | Same inputs, but returns a signed, hosted, edge-cached image URL for an og:image or <img>. | 1 / fresh render |
rendex_extract | Read any page as clean reader-mode Markdown / JSON / HTML (runs the page's JS first). | 1 / call |
render_artifact | Turn Markdown/HTML + branding into a hosted PDF + PNG + share page in one call. | 1 / format |
rendex_account | Plan, 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
| Parameter | Type | Default | Description |
|---|---|---|---|
url | string | — | URL to capture. Mutually exclusive with html and markdown. |
html | string | — | Raw HTML to render and capture. Mutually exclusive with url and markdown. Great for invoices, social cards, email templates, OG images. Max 5MB. |
markdown | string | — | Markdown to render as styled HTML, then capture. Mutually exclusive with url and html. Great for READMEs, docs, and reports. Max 5MB. |
data | object | — | Key-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
| Parameter | Type | Default | Description |
|---|---|---|---|
format | "png" | "jpeg" | "webp" | "pdf" | "png" | Output format. Use pdf for invoices, reports, and archival. |
quality | number | — | JPEG/WebP quality (1–100). Ignored for PNG and PDF. |
fullPage | boolean | false | Full scrollable page. |
selector | string | — | CSS selector of a specific element to capture instead of the full page (max 500 chars). |
resizeWidth | number | — | Downscale 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. |
resizeHeight | number | — | Downscale the output to this height in pixels (16\u20132160). Image formats only. |
Viewport
| Parameter | Type | Default | Description |
|---|---|---|---|
width | number | 1280 | Viewport width (320–3840). |
height | number | 800 | Viewport height (240–2160). |
deviceScaleFactor | number | 2 | Pixel 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. |
darkMode | boolean | false | Dark color scheme. |
userAgent | string | — | Override the browser user agent string (max 512 chars). |
Timing
| Parameter | Type | Default | Description |
|---|---|---|---|
delay | number | 0 | Wait after page load (ms, 0–10000). |
timeout | number | 30 | Navigation timeout in seconds (5–60). |
waitUntil | string | "networkidle2" | Navigation event: "load", "domcontentloaded", "networkidle0", "networkidle2". |
waitForSelector | string | — | CSS selector to wait for before capture. |
bestAttempt | boolean | true | Return partial screenshot on timeout instead of failing. |
Content Blocking
| Parameter | Type | Default | Description |
|---|---|---|---|
blockAds | boolean | true | Block ads and trackers. |
blockResourceTypes | string[] | — | Block specific resource types: "font", "image", "media", "stylesheet", "other". |
hideSelectors | string[] | — | CSS selectors to hide (display: none) before capture \u2014 popups, sticky nav, chat bubbles (max 50). Never errors on a miss. |
blockCookieBanners | boolean | false | Hide common cookie/consent walls (OneTrust, Cookiebot, Quantcast, and similar) via a curated CSS list. |
CSS & JS Injection
| Parameter | Type | Default | Description |
|---|---|---|---|
css | string | — | Custom CSS to inject before capture. Hide cookie banners, add watermarks, override styles. Max 50KB. |
js | string | — | Custom JavaScript to execute before capture. Runs in the browser sandbox. Max 50KB. |
Cookies & Headers
| Parameter | Type | Default | Description |
|---|---|---|---|
cookies | object[] | — | 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. |
headers | Record<string, string> | — | Custom HTTP headers to send with the page request. |
PDF Options
These parameters only apply when format="pdf".
| Parameter | Type | Default | Description |
|---|---|---|---|
pdfFormat | "A4" | "Letter" | "Legal" | "Tabloid" | "A3" | "A4" | PDF page size. |
pdfLandscape | boolean | false | PDF landscape orientation. |
pdfPrintBackground | boolean | true | Print background colors and images in PDF. |
pdfScale | number | 1 | PDF scale factor (0.1–2). |
pdfMargin | object | — | PDF 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.
| Parameter | Type | Default | Description |
|---|---|---|---|
geo | string | — | ISO 3166-1 alpha-2 country code (e.g. "US", "DE", "JP"). Pro/Enterprise only. |
geoCity | string | — | City for more precise geo-targeting (e.g. "Berlin"). Requires geo. |
geoState | string | — | State or region for more precise geo-targeting (e.g. "California"). Requires geo. |
Async Processing
| Parameter | Type | Default | Description |
|---|---|---|---|
async | boolean | false | Process capture asynchronously. Returns a jobId immediately instead of waiting. Poll GET /v1/jobs/:jobId for status. |
webhookUrl | string | — | URL to receive a POST callback when async capture completes. Requires async=true. |
cacheTtl | number | — | Seconds 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.
| Parameter | Type | Default | Description |
|---|---|---|---|
url | string | — | Required. 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). |
waitUntil | string | "networkidle2" | Page readiness event: "load", "domcontentloaded", "networkidle0", "networkidle2". |
timeout | number | 30 | Maximum 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. |
blockCookieBanners | boolean | — | Hide common cookie/consent walls (GDPR/CCPA banners) before extraction. |
hideSelectors | string[] | — | 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.
| Parameter | Type | Default | Description |
|---|---|---|---|
content | string | — | Required. 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. |
branding | object | — | { logo, accentColor, font, header, footer } — theme applied to the artifact. |
pageSetup | object | — | { size, orientation, margin, scale, width, height, fullPage }. |
data | object | — | Optional Mustache data — content is rendered as a logic-less template before conversion. |
expiresIn | number | 86400 | Seconds 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.
| Tool | What it does | Writes? |
|---|---|---|
watch_create | Create a monitor: url, intervalMinutes, diffMode (both = pixel + text), threshold, notifyEmail/webhookUrl, aiSummary, renderParams. | Yes |
watch_test | Dry-run a scope (no watch, no baseline, no charge) to validate a URL / selector / capture identity first. | No |
watch_list | List watches, filterable by status (active / paused / all), paginated. | No |
watch_get | Fetch one watch by id. | No |
watch_run | Force a check now instead of waiting for the schedule. | Yes |
watch_runs | Read run history for a watch — each run carries changed, an optional AI summary, and signed before/after/overlay image URLs. | No |
watch_update | Edit in place; only fields you send change, renderParams is deep-merged, and webhookUrl/notifyEmail = null clears a channel. | Yes |
watch_delete | Delete 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.
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.
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.
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.
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.
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.
Response Format
rendex_screenshot returns two content items:
- Image: Base64-encoded screenshot as an
imagecontent block - 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:
| Method | Best For | Install |
|---|---|---|
| JavaScript SDK | Node.js, Deno, Bun apps | npm install @copperline/rendex |
| Python SDK | Python apps, scripts, notebooks | pip install rendex |
| REST API | Any language, cURL, webhooks | See 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.