Rendex: Rendering API for Images, PDFs & Content Extraction
by copperline-labs · remote · local (npm) · no sign-in to list tools · v1.8.2 · published by GitHub user copperline-labs
Render HTML, Markdown, or URLs to images, PDF, or branded artifacts; extract and watch pages.
13 tools: 1 can delete or cancel things, 9 change things and 3 only read.
Scanned Oct 21, 2026
- Deletes or cancels1Claude Code: deny: see these tools
- Can't be undone0Claude Code: ask
- Changes things9Claude Code: ask: see these tools
- Only reads3Claude Code: allow: see these tools
2 checks matched something in the tool definitions. No finding is not a safety guarantee. How the checks work.
claude mcp add --transport http rendex https://mcp.rendex.dev/mcpFindings
Matches of fixed checks, with the text they matched.
The server marks "rendex_render_link" read-only (readOnlyHint: true), and its own name, description or input give the class "write".
What this check looks forMatched text
annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":false,"openWorldHint":true}; The name "rendex_render_link" says "link": a word for a change.
- Warnwatch_runs
The server marks "watch_runs" read-only (readOnlyHint: true), and its own name, description or input give the class "write".
What this check looks forMatched text
annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The name "watch_runs" says "run": a word for a change.
Tools
Open a tool for its reasons and full description. Descriptions are the publisher's own words, shown as they are.
13 tools
Deletes or cancels 1Claude Code: deny
watch_deleteDelete a watch and its run history.No findings
Why it is in this group
- The name "watch_delete" says "delete": a word for removing or ending something.
- The description says "Irreversible".
- The server marks it destructive (destructiveHint: true).
Description, as the server wrote it Delete a watch and its run history. Irreversible.
Annotations the server declares
- readOnlyHint: false
- destructiveHint: true
- idempotentHint: true
- openWorldHint: false
Changes things 9Claude Code: ask
render_artifactUse this when the user asks to make or create a branded report, invoice, summary, release notes, or document — or to 'turn this Markdown/HTML into a PDF and PNG' (optionally with a…No findings
Why it is in this group
- Nothing in its name or description says what it does, so it is counted as a write.
- The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
Description, as the server wrote it Use this when the user asks to make or create a branded report, invoice, summary, release notes, or document — or to 'turn this Markdown/HTML into a PDF and PNG' (optionally with a logo or accent color). Do NOT use to screenshot an existing URL (use rendex_screenshot). Turns Markdown or HTML into a branded, downloadable artifact — a PDF, a PNG, and a hosted share page — in one call. Apply a logo, accentColor, font, header, and footer. Returns hosted URLs { pdfUrl, pngUrl, shareUrl, expiresAt }. Each requested format costs 1 render credit.
Annotations the server declares
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: false
- openWorldHint: true
rendex_accountCheck the Rendex account: which plan it's on, how many render credits have been used vs.No findings
Why it is in this group
- Nothing in its name or description says what it does, so it is counted as a write.
- The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
Description, as the server wrote it Check the Rendex account: which plan it's on, how many render credits have been used vs. the monthly limit (and when it resets), the per-minute rate limit, and a one-tap link to upgrade to a higher tier. Use this whenever the user asks about their usage, remaining quota, current plan, or how to get more renders / stop hitting limits. Read-only — costs no credits.
Annotations the server declares
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
rendex_extractUse this when the user asks to read, extract, get the text/content/article of, or summarize a webpage/URL.No findings
Why it is in this group
- Nothing in its name or description says what it does, so it is counted as a write.
- The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
Description, as the server wrote it Use this when the user asks to read, extract, get the text/content/article of, or summarize a webpage/URL. Do NOT use for a visual screenshot (use rendex_screenshot). Extracts 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 — 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. Costs 1 render credit per call.
Annotations the server declares
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: false
- openWorldHint: true
rendex_render_linkUse this when the user wants a reusable, HOSTED image URL — an og:image or a link to embed in an <img> tag — rather than the image bytes.1 finding
Why it is in this group
- The name "rendex_render_link" says "link": a word for a change.
- The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
Findings
- Warn
The server marks "rendex_render_link" read-only (readOnlyHint: true), and its own name, description or input give the class "write".
What this check looks forMatched text
annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":false,"openWorldHint":true}; The name "rendex_render_link" says "link": a word for a change.
Description, as the server wrote it Use this when the user wants a reusable, HOSTED image URL — an og:image or a link to embed in an <img> tag — rather than the image bytes. Do NOT use for a one-off inline screenshot (use rendex_screenshot). Renders a URL, raw HTML, or Markdown and gives 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 options as rendex_screenshot, plus an optional expiresIn. Returns { url, expiresAt, format, cacheTtl } as JSON. Costs 1 render credit per fresh render; cached repeat hits don't re-charge.
Annotations the server declares
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: false
- openWorldHint: true
watch_createUse this when the user asks to monitor, watch, or track a webpage for changes, or to be alerted/notified when a page changes.No findings
Why it is in this group
- The name "watch_create" says "create": a word for a change.
Description, as the server wrote it Use this when the user asks to monitor, watch, or track a webpage for changes, or to be alerted/notified when a page changes. Do NOT use for a one-time capture (use rendex_screenshot). Creates a Rendex Watch — monitors a URL on a schedule and notifies when it changes (real-Chrome visual diff with a highlighted overlay, an extracted-text diff, or both). An active watch captures its baseline immediately. Returns the created watch as JSON.
Annotations the server declares
- readOnlyHint: false
- destructiveHint: false
- idempotentHint: false
- openWorldHint: true
watch_runRun an immediate check now (charges 1 credit).No findings
Why it is in this group
- The name "watch_run" says "run": a word for a change.
Description, as the server wrote it Run an immediate check now (charges 1 credit). Returns the queued run; poll watch_runs for the result or receive a watch.changed webhook.
Annotations the server declares
- readOnlyHint: false
- destructiveHint: false
- idempotentHint: false
- openWorldHint: true
watch_runsRead a watch's run history (newest first), paged.1 finding
Why it is in this group
- The name "watch_runs" says "run": a word for a change.
- The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
Findings
- Warn
The server marks "watch_runs" read-only (readOnlyHint: true), and its own name, description or input give the class "write".
What this check looks forMatched text
annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The name "watch_runs" says "run": a word for a change.
Description, as the server wrote it Read a watch's run history (newest first), paged. Each run includes changed, diffScore, and signed before/after/overlay image URLs. Returns { items, nextCursor }.
Annotations the server declares
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
watch_testDry-run a watch config BEFORE creating it — render the proposed config once and report what was captured + whether the page is reachable (and the text a text-watch would compare).No findings
Why it is in this group
- Nothing in its name or description says what it does, so it is counted as a write.
- The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
Description, as the server wrote it Dry-run a watch config BEFORE creating it — render the proposed config once and report what was captured + whether the page is reachable (and the text a text-watch would compare). Creates no watch, no baseline, no diff. Use this to validate a selector/scope/identity first. Returns JSON.
Annotations the server declares
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: false
- openWorldHint: true
watch_updateUpdate a watch in place — pause/resume (paused), re-point (url), change schedule/diff/notify settings, or turn a channel off (webhookUrl/notifyEmail = null).No findings
Why it is in this group
- The name "watch_update" says "update": a word for a change.
Description, as the server wrote it Update a watch in place — pause/resume (paused), re-point (url), change schedule/diff/notify settings, or turn a channel off (webhookUrl/notifyEmail = null). Only the fields you send change; renderParams is deep-merged over the existing config. A scope change (url/selector/fullPage/size/device) re-baselines on the next check. Returns the updated watch as JSON.
Annotations the server declares
- readOnlyHint: false
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
Only reads 3Claude Code: allow
rendex_screenshotUse this when the user asks to screenshot, capture, or take a picture of a webpage/URL, or to render raw HTML or Markdown to an image or PDF.No findings
Why it is in this group
- The name "rendex_screenshot" says "screenshot": a word for reading.
Description, as the server wrote it Use this when the user asks to screenshot, capture, or take a picture of a webpage/URL, or to render raw HTML or Markdown to an image or PDF. Do NOT use to get a reusable hosted image URL (use rendex_render_link) or to make a branded multi-format document (use render_artifact). Captures a screenshot or PDF of any webpage, raw HTML, or Markdown. Supports full-page capture, dark mode, ad blocking, custom viewports, CSS/JS injection, cookie/header injection, PDF output, HTML and Markdown rendering, and progressive fallback for heavy sites. Returns partial renders on timeout by default (bestAttempt mode). Costs 1 render credit per call. Cookie/header injection requires Starter+; geo-targeting requires Pro+.
Annotations the server declares
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: false
- openWorldHint: true
watch_getFetch one watch by ID, including its current baseline image URL and status.No findings
Why it is in this group
- The name "watch_get" says "get": a word for reading.
Description, as the server wrote it Fetch one watch by ID, including its current baseline image URL and status. Returns JSON.
Annotations the server declares
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
watch_listList your watches (newest first), optionally filtered by status and paged.No findings
Why it is in this group
- The name "watch_list" says "list": a word for reading.
Description, as the server wrote it List your watches (newest first), optionally filtered by status and paged. Returns { items, nextCursor }.
Annotations the server declares
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
This is not a safety rating, and no finding is not a safety guarantee. The groups and findings come from fixed checks of the tool definitions the server returned on the date shown, not from its code or what it does when called. How the checks work.
Install
Pinned to version 1.8.2. Values in angle brackets are yours to fill in.
claude mcp add --transport http rendex https://mcp.rendex.dev/mcpRun in a terminal.
Claude Code permissions
Allow the reads, ask before a change, deny the deletes. Paste into .claude/settings.json.
{
"permissions": {
"allow": [
"mcp__rendex__rendex_screenshot",
"mcp__rendex__watch_list",
"mcp__rendex__watch_get"
],
"ask": [
"mcp__rendex__rendex_extract",
"mcp__rendex__rendex_render_link",
"mcp__rendex__render_artifact",
"mcp__rendex__rendex_account",
"mcp__rendex__watch_create",
"mcp__rendex__watch_test",
"mcp__rendex__watch_run",
"mcp__rendex__watch_runs",
"mcp__rendex__watch_update"
],
"deny": [
"mcp__rendex__watch_delete"
]
}
}Tools that only read are allowed, tools that change things ask first, tools that delete or cancel are denied. It assumes the server is installed as rendex. Review it before you use it.
