@copperline/rendex-mcp

MCP server for Rendex — render raw HTML, Markdown, or any URL to an image or PDF via AI agents using the Model Context Protocol.
Quick Start
Claude Desktop / Cursor / Windsurf (npx)
Add to your MCP client config:
{
"mcpServers": {
"rendex": {
"command": "npx",
"args": ["-y", "@copperline/rendex-mcp"],
"env": {
"RENDEX_API_KEY": "your-api-key"
}
}
}
}
Where to add this:
| Claude Desktop | ~/Library/Application Support/Claude/claude_desktop_config.json (macOS) |
| Cursor | .cursor/mcp.json in project root, or Settings > MCP |
| Windsurf | Settings > MCP Servers |
Claude Code (CLI)
Add a .mcp.json to your project root with the same config above. Then restart Claude Code.
Important: Add .mcp.json to your .gitignore — it contains your API key.
Remote (zero-install)
Connect directly — no installation needed (Claude Desktop only):
{
"mcpServers": {
"rendex": {
"url": "https://mcp.rendex.dev/mcp",
"headers": {
"Authorization": "Bearer your-api-key"
}
}
}
}
Tools
rendex_screenshot
Capture a screenshot or PDF of any webpage, raw HTML, or Markdown.
"Take a screenshot of https://example.com"
"Capture the full page of https://news.ycombinator.com in dark mode"
"Generate a PDF of https://github.com with A4 page size"
"Capture https://amazon.de as seen from Germany"
"Render this HTML invoice as a PDF"
"Render this Markdown release note as a PDF"
Parameters:
url | string | required* | Webpage URL to capture. Mutually exclusive with html and markdown. |
html | string | — | Raw HTML to render. Mutually exclusive with url and markdown. |
markdown | string | — | Markdown to render (server converts to HTML). Mutually exclusive with url and html. |
data | object | — | Key-value data for Mustache templating. When set, the html or markdown string is rendered as a logic-less Mustache template before capture. Invalid with url. |
format | "png" | "jpeg" | "webp" | "pdf" | "png" | Output format |
fullPage | boolean | false | Capture full scrollable page |
darkMode | boolean | false | Emulate dark color scheme |
width | number | 1280 | Viewport width (320-3840) |
height | number | 800 | Viewport height (240-2160) |
quality | number | 80 | Image quality 1-100 (JPEG/WebP only, default 80) |
delay | number | 0 | Wait ms before capture |
blockAds | boolean | true | Block ads and trackers |
blockResourceTypes | string[] | — | Block resource types: font, image, media, stylesheet |
deviceScaleFactor | number | 2 | Device pixel ratio (1-3). 2× Retina by default |
timeout | number | 30 | Max seconds to wait for page load (5-60) |
waitUntil | string | "networkidle2" | Page readiness: load, domcontentloaded, networkidle0, networkidle2 |
waitForSelector | string | — | CSS selector to wait for before capture |
bestAttempt | boolean | true | Return partial render on timeout instead of failing |
selector | string | — | CSS selector of element to capture instead of full page |
css | string | — | Custom CSS to inject before capture (max 50KB) |
js | string | — | Custom JavaScript to execute before capture (max 50KB) |
cookies | array | — | Cookies to set for authenticated captures (max 50) |
headers | object | — | Custom HTTP headers for the page request |
userAgent | string | — | Override browser user agent string |
pdfFormat | string | — | PDF page size: A4, Letter, Legal, Tabloid, A3 |
pdfLandscape | boolean | — | PDF landscape orientation |
pdfPrintBackground | boolean | true | Print background in PDF |
pdfScale | number | 1 | PDF scale factor (0.1-2) |
pdfMargin | object | — | PDF margins: {top, right, bottom, left} as CSS values |
geo | string | — | ISO country code for geo-targeted capture (Pro/Enterprise) |
geoCity | string | — | City for geo-targeting (requires geo) |
geoState | string | — | State for geo-targeting (requires geo) |
async | boolean | — | Process asynchronously (returns job ID) |
webhookUrl | string | — | URL to receive callback when async capture completes |
cacheTtl | number | — | Seconds to cache result (3600-2592000) |
Data templating
Turn one reusable template into many documents. Pass a data object alongside html
or markdown, and Rendex renders the string as a logic-less Mustache
template before capture — {{var}} interpolation, {{#items}}…{{/items}} loops, and
nested {{a.b}} access. Great for invoices, reports, certificates, and OG cards.
"Render this HTML invoice template to a PDF, filling it with this data:
<h1>Invoice {{number}}</h1><p>Total: {{total}}</p>
data = { number: 'INV-014', total: '$2,400' }"
data is valid only with html or markdown — combining it with url returns a
validation error.
Authentication
Get your API key at rendex.dev.
Set the RENDEX_API_KEY environment variable in your MCP client configuration.
Pricing
| Free | 500 | 10/min |
| Starter | 10,000 | 60/min |
| Pro | 100,000 | 300/min |
| Enterprise | Custom | 1,000/min |
License
MIT — Copperline Labs LLC