Skip to main content
Glama

Rendex: Rendering API for Images, PDFs & Content Extraction

Mint Hosted Render URL

rendex_render_link

Use this when the user wants a reusable, HOSTED image URL — an og:image or a link to embed in an tag — rather than the image bytes. 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 or an 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.

Tool call template

This tool declares no required parameters. Add optional parameters from the input schema as needed.

{
  "id": 1,
  "jsonrpc": "2.0",
  "method": "tools/call",
  "params": {
    "arguments": {},
    "name": "rendex_render_link"
  }
}

Input Schema

NameRequiredDescriptionDefault
jsNoCustom JavaScript to execute in the page before capture. Runs in the browser sandbox. Max 50KB.
cssNoCustom CSS to inject into the page before capture. Hide cookie banners, add watermarks, override styles. Max 50KB.
geoNoISO 3166-1 alpha-2 country code for geo-targeted capture (e.g., 'US', 'DE', 'JP'). Renders the page as seen from that country. Pro/Enterprise only. Note: CSS/JS injection, cookies, element capture, dark mode, and some other features are not available with geo-targeting.
urlNoThe webpage URL to capture (a schemeless host like 'example.com' is accepted). Mutually exclusive with 'html' and 'markdown'.
dataNoKey-value data object for Mustache templating. When provided, the 'html' or 'markdown' string is rendered as a logic-less Mustache template before capture — {{var}} inserts HTML-escaped, {{{var}}} inserts raw, {{#items}}...{{/items}} iterates arrays, {{a.b}} accesses nested fields. Not valid with 'url'. Max 256KB serialized.
htmlNoRaw HTML to render and capture. Mutually exclusive with 'url' and 'markdown'. Great for invoices, social cards, email templates, OG images.
delayNoMilliseconds to wait after page load before capture (useful for JS-rendered content)
widthNoViewport width in pixels (320-3840)
deviceNoDevice preset that sets viewport, scale factor, and user agent in one shot. E.g. 'iphone_15' for a mobile screenshot. Overrides width/height/deviceScaleFactor/userAgent.
formatNoOutput format — png (lossless), jpeg (smaller), webp (smallest), or pdf (document). Use pdf for invoices, reports, archival.png
heightNoViewport height in pixels (240-2160)
cookiesNoCookies to set before capture. Useful for authenticated pages. Max 50 cookies.
geoCityNoCity for more precise geo-targeting (e.g., 'Berlin', 'New York'). Requires 'geo'.
headersNoCustom HTTP headers to send with the page request. Cannot override Host, Connection, Content-Length, or Transfer-Encoding.
qualityNoImage quality 1-100 (JPEG/WebP only, ignored for PNG/PDF)
timeoutNoMaximum seconds to wait for page load (5-60). Cloudflare has a 60s hard cap.
blockAdsNoBlock ads and trackers before capture
darkModeNoEmulate dark color scheme (prefers-color-scheme: dark)
fullPageNoCapture the full scrollable page instead of just the viewport
geoStateNoState or region for more precise geo-targeting (e.g., 'California'). Requires 'geo'.
markdownNoMarkdown to render to an image or PDF. Mutually exclusive with 'url' and 'html'. The server converts it to HTML before rendering. Great for reports, release notes, README snapshots, documentation cards.
pdfScaleNoPDF scale factor (0.1-2). Default: 1
selectorNoCSS selector of a specific element to capture instead of the full page. Useful for OG images, component extraction (e.g. '#hero', '.pricing-card')
expiresInNoSeconds until the signed URL expires (60–2592000). Defaults to the server's TTL.
pdfFormatNoPDF page size. Only used when format='pdf'. Default: A4
pdfMarginNoPDF page margins. Only used when format='pdf'. Accepts CSS values.
userAgentNoOverride the browser user agent string.
waitUntilNoPage readiness event. networkidle2 (default) is best for most sites. Use domcontentloaded for speed, networkidle0 for completeness.networkidle2
bestAttemptNoIf true (default), capture whatever is rendered on timeout instead of failing. Set to false to get a hard error on timeout.
resizeWidthNoDownscale the captured image to this width in pixels (16-3840). Aspect ratio is preserved if resizeHeight is omitted. Ignored for PDF.
pdfLandscapeNoPDF landscape orientation. Only used when format='pdf'.
resizeHeightNoDownscale the captured image to this height in pixels (16-2160). Aspect ratio is preserved if resizeWidth is omitted. Ignored for PDF.
hideSelectorsNoCSS selectors to hide (display:none) before capture. E.g. ['.modal', '#newsletter-popup'] to remove overlays. Max 50 selectors.
waitForSelectorNoCSS selector to wait for before capture. Essential for SPAs (e.g. '.main-content', '#app-loaded')
deviceScaleFactorNoDevice pixel ratio (1 = standard, 2 = retina). Defaults to 2× Retina.
blockCookieBannersNoHide common cookie/consent walls (GDPR/CCPA banners) before capture. A curated selector list, lighter than custom hideSelectors.
blockResourceTypesNoBlock specific resource types to speed up capture. E.g. ['font', 'image'] for text-only screenshots.
pdfPrintBackgroundNoPrint background colors/images in PDF. Default: true

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed4 schema fields changed
    • removedInput schema / properties / async
      Removed value: -{
      -  "description": "Process capture asynchronously. Returns a jobId immediately instead of waiting. Poll GET /v1/jobs/:jobId for status, or use webhookUrl for push notification.",
      -  "type": "boolean"
      -}
    • removedInput schema / properties / cacheTtl
      Removed value: -{
      -  "description": "Seconds to cache the result in R2 storage (3600-2592000). Returns a signed URL for retrieval. Requires async=true.",
      -  "maximum": 2592000,
      -  "minimum": 3600,
      -  "type": "integer"
      -}
    • changedInput schema / properties / url / description
      Previous value: -"The webpage URL to capture. Mutually exclusive with 'html' and 'markdown'."New value: +"The webpage URL to capture (a schemeless host like 'example.com' is accepted). Mutually exclusive with 'html' and 'markdown'."
    • removedInput schema / properties / webhookUrl
      Removed value: -{
      -  "description": "URL to receive a POST callback when async capture completes. Payload is HMAC-SHA256 signed. Requires async=true.",
      -  "format": "uri",
      -  "type": "string"
      -}
  2. Added

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Adds substantial context beyond the annotations: signed/edge-cached delivery, the return shape { url, expiresAt, format, cacheTtl }, and billing behavior (1 credit per fresh render, cached hits free). The non-idempotent/readOnly hints are not contradicted. It stops short of saying what happens when a URL expires or whether expiry can be extended.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Dense but front-loaded: the primary use case lands in the first clause, followed by mechanics, return shape, and cost. Minor redundancy between 'rather than the image bytes' and 'instead of the bytes', and the OG-image example is restated in the second sentence.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 38-parameter rendering tool with no output schema, the description supplies the missing return contract ({ url, expiresAt, format, cacheTtl }) and the credit-cost model. Nothing an agent needs to select or call this correctly is absent.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents all 38 parameters thoroughly. The description contributes only the inheritance note 'Takes the same options as rendex_screenshot, plus an optional expiresIn', which is useful framing but adds no per-parameter meaning. Baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource (mints a hosted render URL) and immediately distinguishes the output from sibling tools: 'gives back a signed, hosted, edge-cached image URL instead of the bytes.' The contrast with image bytes makes it unambiguous versus rendex_screenshot.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Front-loads a clear trigger: 'Use this when the user wants a reusable, HOSTED image URL — an og:image or a link to embed in an <img> tag.' It names rendex_screenshot as the shared-option sibling but never explicitly says 'use rendex_screenshot when you need bytes', so the routing is implied rather than stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.