Featured

Deploy OpenClaw in 60 seconds β€” 20% off logoDeploy OpenClaw in 60 seconds β€” 20% off

Launch OpenClaw on Hostinger in about 60 seconds and keep your agent live 24/7. Our referral link gives you 20% off, no coupon code needed.

Launch on Hostinger β†’
Run your Hermes agent on Hostinger, fully managed logoRun your Hermes agent on Hostinger, fully managed

Launch Hermes on Hostinger in one click, fully managed, no VPS knowledge needed. Use code ZACAARON10 for 10% off.

Launch on Hostinger β†’
Crawl and scrape any site into clean data, 10% off logoCrawl and scrape any site into clean data, 10% off

Firecrawl crawls and scrapes any site into clean markdown for your agent. Get 1,000 free credits, and new users get 10% off their first purchase.

Try Firecrawl free β†’
Your own AI agent, running 24/7 with QwikClaw logoYour own AI agent, running 24/7 with QwikClaw

QwikClaw sets up and runs an always-on OpenClaw agent for you. One click, no config files, no server setup.

Deploy now β†’
One API to scrape, enrich, and extract the internet. logoOne API to scrape, enrich, and extract the internet.

Context.dev gives your agents a single API to scrape, enrich, and extract live web data β€” no proxies, no parsers, no maintenance.

Start building free β†’
SetupClaw: done-for-you OpenClaw for founders & exec teams logoSetupClaw: done-for-you OpenClaw for founders & exec teams

White-glove OpenClaw for founders and exec teams (4–50+ employees): we install, harden, integrate your tools, and maintain it β€” secured from day one.

Get it set up for you β†’
SEO data APIs for your agent, $1 free credit logoSEO data APIs for your agent, $1 free credit

DataForSEO gives your agent live access to SERP results, keyword data, backlinks, and on-page SEO data through one API. New accounts get a $1 credit, good for up to 20,000 keyword or backlink lookups.

Try DataForSEO free β†’
Reach 47,000+ AI builders

A flat monthly placement in front of developers actively installing AI tools. No lock-in, cancel anytime.

Advertise here β†’
rendex-mcp logo

rendex-mcp

copperline-labs/rendex-mcp
βœ“ Verified working Β· Jul 10, 2026 3 starsv0.1.2HTTPRegistry activeMITUpdated 2026-06-18Community

Works with

Claude CodeClaude DesktopCursorVS CodeClineCodex CLIOpenClaw+ any MCP client

Install to Claude Code

claude mcp add --transport http rendex https://mcp.rendex.dev/mcp

Summary

rendex-mcp MCP server](https://glama.ai/mcp/servers/copperline-labs/rendex-mcp/badges/score.svg)](https://glama.ai/mcp/servers/copperline-labs/rendex-mcp) πŸ“‡ ☁️ - Screenshot, PDF, and HTML rendering API for AI agents.

Connect from your MCP client

Claude Code

Run this once and Claude Code registers the server for you:

claude mcp add --transport http rendex https://mcp.rendex.dev/mcp

Claude Desktop

Add this to claude_desktop_config.json under Settings β†’ Developer β†’ Edit Config:

{
  "mcpServers": {
    "rendex": {
      "command": "npx",
      "args": [
        "-y",
        "mcp-remote",
        "https://mcp.rendex.dev/mcp"
      ]
    }
  }
}

Cursor

Add this to .cursor/mcp.json in your project (or ~/.cursor/mcp.json for all projects):

{
  "mcpServers": {
    "rendex": {
      "url": "https://mcp.rendex.dev/mcp"
    }
  }
}

Cline and other MCP clients

Most MCP clients accept the standard mcpServers JSON block:

{
  "mcpServers": {
    "rendex": {
      "url": "https://mcp.rendex.dev/mcp"
    }
  }
}

Codex CLI

Codex CLI connects to remote servers via config.toml β€” add this block to ~/.codex/config.toml:

# ~/.codex/config.toml
[mcp_servers.rendex]
url = "https://mcp.rendex.dev/mcp"

OpenClaw

OpenClaw reads MCP servers from the mcp.servers section of ~/.openclaw/openclaw.json (managed via `openclaw mcp add` or the mcporter skill):

{
  "mcp": {
    "servers": {
      "rendex": {
        "url": "https://mcp.rendex.dev/mcp",
        "transport": "streamable-http"
      }
    }
  }
}

README.md

@copperline/rendex-mcp

![npm version](https://www.npmjs.com/package/@copperline/rendex-mcp) ![npm downloads](https://www.npmjs.com/package/@copperline/rendex-mcp) ![License: MIT](https://opensource.org/licenses/MIT) ![MCP Badge](https://lobehub.com/mcp/copperline-labs-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:

| Client | Config location | |--------|----------------| | 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, OAuth or API key)

Connect to the hosted server at https://mcp.rendex.dev/mcp β€” no install needed. It's fronted by OAuth 2.1 (authorization-code + PKCE S256), so OAuth-capable clients (ChatGPT, Claude, Cursor, the MCP Inspector) connect with no API key β€” you sign in with a one-time email code and each caller bills against their own Rendex plan and credit pool.

Clients that prefer a static key can still pass one directly:

{
  "mcpServers": {
    "rendex": {
      "url": "https://mcp.rendex.dev/mcp",
      "headers": {
        "Authorization": "Bearer your-api-key"
      }
    }
  }
}

Tools

rendex_screenshot

Render any webpage, raw HTML, or Markdown to an image or PDF.

"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:

| Parameter | Type | Default | Description | |-----------|------|---------|-------------| | 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) | | resizeWidth | number | β€” | Downscale output to this width in px (aspect ratio preserved if resizeHeight omitted). Ignored for PDF | | resizeHeight | number | β€” | Downscale output to this height in px (aspect ratio preserved if resizeWidth omitted). Ignored for PDF | | 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 | | blockCookieBanners | boolean | β€” | Hide common cookie/consent banners (GDPR/CCPA) before capture | | blockResourceTypes | string[] | β€” | Block resource types: font, image, media, stylesheet, other | | device | string | β€” | Device preset: desktop, iphone_15, iphone_se, pixel_8, ipad, ipad_pro β€” sets viewport, scale, and user agent in one shot. Overrides width/height/deviceScaleFactor/userAgent | | 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 | | hideSelectors | string[] | β€” | CSS selectors to hide (display:none) before capture, e.g. ['.modal', '#newsletter-popup']. Max 50 | | 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) |

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 β€” handling 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.

"Extract the article text from https://example.com/post as Markdown"
"Pull the readable content from this SPA as JSON so I can summarize it"

Parameters:

| Parameter | Type | Default | Description | |-----------|------|---------|-------------| | url | string | required | Webpage URL to extract readable content from | | extractFormat | "markdown" \| "json" \| "html" | "markdown" | Output shape β€” markdown (LLM-friendly prose), json (structured: title/byline/excerpt/siteName/length), or html (cleaned reader-mode HTML) | | device | string | β€” | Device preset (desktop, iphone_15, iphone_se, pixel_8, ipad, ipad_pro) β€” extract the mobile/tablet version of a page | | blockAds | boolean | true | Block ads and trackers before extraction | | blockCookieBanners | boolean | β€” | Hide common cookie/consent walls before extraction | | hideSelectors | string[] | β€” | CSS selectors to hide before extraction, e.g. ['.modal', '#newsletter-popup']. Max 50 | | waitUntil | string | "networkidle2" | Page readiness: load, domcontentloaded, networkidle0, networkidle2 | | timeout | number | 30 | Max seconds to wait for page load (5-60) |

rendex_render_link

Render a URL, raw HTML, or Markdown and get back a signed, hosted, edge-cached image URL instead of the bytes β€” ideal for dynamic OG images. Drop the URL into <meta property="og:image"> or an <img> tag and Rendex serves a cached copy on every share. Takes the same parameters as rendex_screenshot, plus an optional expiresIn. Returns { url, expiresAt, format, cacheTtl }.

"Make me a hosted OG-image URL for this Markdown release note"
"Give me a render link for this HTML card that I can drop into og:image"

| Parameter | Type | Default | Description | |-----------|------|---------|-------------| | (all rendex_screenshot params) | β€” | β€” | Same source (url/html/markdown), format, sizing, and templating options | | expiresIn | number | server TTL | Seconds until the signed URL expires (60–2592000) |

render_artifact

Turn Markdown or HTML into a branded, downloadable artifact β€” a PDF, a PNG, and a hosted share page β€” in one call. Ideal for agent outputs: reports, invoices, summaries, release notes, dashboards. Apply a logo, accent color, font, header, and footer; choose PDF page size/orientation/margins. Returns hosted URLs { pdfUrl, pngUrl, shareUrl, expiresAt } β€” no storage needed on your side. Each requested format costs 1 render credit.

"Turn this Markdown report into a branded PDF and PNG with our logo and an orange accent"
"Render this invoice HTML to a PDF and give me a share link that expires in a week"

| Parameter | Type | Default | Description | |-----------|------|---------|-------------| | content | string | required | The Markdown or HTML body to render (up to ~4MB) | | inputFormat | "markdown" \| "html" | "markdown" | How to interpret content β€” markdown is converted to styled HTML; html is used as a body fragment | | formats | ("pdf" \| "png")[] | ["pdf","png"] | Which formats to produce. Each costs 1 credit | | accentColor | string | β€” | CSS accent color for the bar, links, and headings (e.g. #EA580C) | | logo | string | β€” | http(s) URL of a logo image shown in the header | | header | string | β€” | plain-text header line shown beside the logo | | footer | string | β€” | plain-text footer line shown at the bottom | | font | string | β€” | CSS font-family stack for the body | | pageSetup | object | β€” | { size, orientation, margin{top,right,bottom,left}, scale, width, height, fullPage } | | data | object | β€” | Mustache data β€” when set, content is rendered as a logic-less Mustache template (plus {{logo}}/{{header}}/… from branding) before conversion | | expiresIn | number | 86400 | Seconds until the hosted URLs expire (3600–2592000). Default 24h |

Rendex Watch

Monitor a URL on a schedule and get notified when it changes β€” real-Chrome visual diff (with a highlighted overlay), an extracted-text diff, or both. Eight tools let an agent set up, inspect, edit, and tear down watches on the shared Rendex platform (one rdx_ key, one credit pool).

"Watch https://example.com/pricing for visual changes and alert my webhook"
"Before I save it, test whether you can capture #pricing on that page"
"Show me the last few runs of watch <id> β€” did anything change?"

| Tool | Purpose | Key inputs | |------|---------|-----------| | watch_create | Create a watch (active β†’ captures its baseline now) | url, name?, intervalMinutes?, diffMode? (visual/text/both), threshold?, renderParams?, webhookUrl? (Starter+), notifyEmail?, paused? | | watch_test | Dry-run a config first (creates nothing) | same as watch_create | | watch_list | List your watches | status? (active/paused/all), cursor?, limit? | | watch_get | Fetch one watch (+ baseline URL) | id | | watch_run | Run a check now (1 credit) | id | | watch_runs | Run history with signed before/after/overlay URLs | id, cursor?, limit? | | watch_update | Edit a watch in place β€” interval, diff mode, channels, render params | id, plus any watch_create field; webhookUrl/notifyEmail accept null to clear a channel | | watch_delete | Delete a watch + its runs | id |

renderParams carries the per-check capture knobs (fullPage defaults to true, selector, device, geo (Pro+), plus noise controls ignoreRegions/ignoreText/minTextChars/suppressWhilePresent and uaMode). Interval floors are per-plan (Free 1440 / Starter 180 / Pro 30 / Enterprise 5). Watch metadata + signed image URLs are returned as JSON text.

rendex_account

Check the account from inside the agent: which plan it's on, how many render credits have been used this month vs. the limit (and when it resets), the per-minute rate limit, and a one-tap upgrade link. Lets an agent answer "how much have I used?" or "how do I get more renders?" without sending the user to the dashboard. Read-only β€” costs no credits.

"How many Rendex renders do I have left this month?"
"What plan am I on, and how do I upgrade for more?"

Returns { plan, usage: { used, limit, remaining, unlimited, resetsAt }, rateLimitPerMinute, upgrade: { recommendedPlan, recommendedPlanCredits, upgradeUrl, manageBillingUrl } }.

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

| Plan | Calls/Month | Rate | |------|------------|------| | Free | 100 | 3/min | | Starter | 10,000 | 60/min | | Pro | 100,000 | 300/min | | Enterprise | Custom | 1,000/min |

License

MIT β€” Copperline Labs LLC

See related servers & alternatives β†’

Related MCP servers

Browse all β†’

Related guides

Hand-picked reading to help you choose and use Cloud & DevOps servers.