MCP screenshot service Cloudflare Workers

Give your agent a clear view of the page.

RenderSight turns generated HTML into a screenshot your agent can inspect, compare, and improve. No more editing a page it cannot see.

HTML inone tool call PNG outinline or URL 24 hourstemporary sharing

01 / The gap

Agents can write a page. They just can't see it.

ChatGPT's built-in cloud browser runs in an environment isolated from the agent. RenderSight closes that gap over MCP, so visual feedback becomes part of the work.

  • 01

    Close the isolation gap

    HTML, CSS, and JavaScript created in the agent's environment can finally be loaded, presented, and inspected.

  • 02

    Render where the page lives

    Cloudflare Browser Run renders the content in the cloud, waits for webfonts, and captures a PNG when it is ready.

  • 03

    Keep the loop moving

    Screenshot, inspect, fix, screenshot again. Give landing pages, email templates, and reports a visual quality check.

  • 04

    Share without keeping it forever

    Store results in R2 and pass along a temporary download link that stays valid for 24 hours.

02 / How it works

A render loop the agent can actually use.

The Worker is protected by Cloudflare Access Managed OAuth. A successful call returns image content, a temporary URL, or both.

  1. 01

    Send the draft

    ChatGPT connects to the MCP server through Managed OAuth and calls render with HTML.

  2. 02

    Run the browser

    Browser Run renders the page in the cloud, waits for content and webfonts, then captures a PNG.

  3. 03

    Stage the result

    R2 stores the PNG and returns a presigned download URL valid for 24 hours when a URL is requested.

  4. 04

    Review and iterate

    The agent reads the image content or URL, then turns what it sees into the next useful edit.

A typical call render({ html, output: "both" }) screenshot + metadata

03 / Tool reference

One tool. The details you need.

Render HTML to a PNG image, returned inline, as a temporary download URL, or both.

Call render({ html, output: "both" })
PNG in, inspect next

Parameters

htmlrequired
The HTML to render.
width, height
Viewport size. Defaults to 800 x 800, with each value clamped to 1-4096 px.
omitBackground
Use a transparent background instead of the default opaque background.
waitForFonts
Wait for document.fonts.ready plus two repaints before capture. Defaults to true.
waitForSelector
Optional readiness condition: a CSS selector with attached, visible, or hidden state and a 30-second time budget.
waitForTimeout
Extra fixed wait after readiness, from 0-10000 ms. Defaults to 0.
output
Choose inline, url, or both. Defaults to both.
filename
Filename shown on download. A missing .png extension is appended automatically.

Timed-out wait conditions return a tool error instead of capturing an unfinished page. Inline encoding is capped at 8 MiB to stay under the Workers 128 MB isolate memory limit.

Output modes

Choose how the screenshot comes back.

  • inline

    Returns MCP image content; nothing is written to R2.

  • url

    Streams the result to R2 and returns only a text presigned URL with resource metadata.

  • both

    Returns both, degrading automatically to inline or url when needed.

Every successful result includes output, filename, mimeType, width, height, and byteLength. Temporary URLs are valid for 24 hours.

A better next edit

Stop guessing. Start iterating.

Connect RenderSight to ChatGPT, send a page, and give the agent something concrete to look at.

Open the deployment guide