Skip to main content
Glama

@copperline/rendex-mcp

npm version npm downloads License: MIT MCP Badge

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

Related MCP server: RendShot MCP Server

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 (Starter+; Free/Basic poll job status)

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)

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 contentmarkdown 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 / Basic 180 / Starter 60 / 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

Available Tools

11 tools
rendex_extractAInspect

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 — 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.

ParametersJSON Schema
NameRequiredDescriptionDefault
urlYesThe webpage URL to extract readable content from.
extractFormatNoOutput shape — markdown (default, LLM-friendly prose), json (structured fields: title/byline/excerpt/siteName/length), or html (cleaned reader-mode HTML).markdown
waitUntilNoPage readiness event. networkidle2 (default) is best for most sites. Use domcontentloaded for speed, networkidle0 for completeness.networkidle2
timeoutNoMaximum seconds to wait for page load (5-60). Cloudflare has a 60s hard cap.
deviceNoDevice preset that sets viewport, scale factor, and user agent in one shot. E.g. 'iphone_15' to extract the mobile version of a page.
blockAdsNoBlock ads and trackers before extraction
blockCookieBannersNoHide common cookie/consent walls (GDPR/CCPA banners) before extraction. A curated selector list, lighter than custom hideSelectors.
hideSelectorsNoCSS selectors to hide (display:none) before extraction. E.g. ['.modal', '#newsletter-popup'] to remove overlays. Max 50 selectors.

TDQS

A4.1/5.0
Behavior4/5

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

No annotations are provided, so the description fully bears the burden. It discloses that the tool runs a full Chromium render, captures after JavaScript execution (important for SPAs), strips nav/ads/boilerplate, and returns structured content. It also mentions Cloudflare's 60s hard cap on timeout. Missing explicit disclosure of potential failure cases or resource usage.

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

Conciseness5/5

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

The description is concise (5 sentences), front-loads the main action, and avoids unnecessary details. Every sentence adds value and contributes to clarity.

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

Completeness3/5

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

With no output schema, the description should fully explain return values. It mentions returning article body plus title, byline, and excerpt but does not specify how these vary across formats (markdown, HTML). It also lacks details on error handling or behavior on failure, leaving some gaps.

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 coverage is 100% with detailed descriptions for all 8 parameters, so baseline is 3. The description does not add significant parameter-level detail beyond what is already in the schema, though it provides context for how parameters like device and waitUntil affect rendering.

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?

The description clearly states the tool extracts clean reader-mode content from any webpage, specifying output formats (Markdown, JSON, HTML) and the rendering process. It distinguishes from the sibling tool (screenshot) by focusing on content extraction rather than visual capture.

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?

The description explicitly recommends the tool for feeding page content to LLMs, summarization, or RAG ingestion. It contrasts with fetch-only readers that miss SPAs, implying when this tool is preferable. However, it does not explicitly state when not to use it or provide direct comparison with the sibling tool.

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

rendex_screenshotAInspect

Capture 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).

ParametersJSON Schema
NameRequiredDescriptionDefault
urlNoThe webpage URL to capture. Mutually exclusive with 'html' and 'markdown'.
htmlNoRaw HTML to render and capture. Mutually exclusive with 'url' and 'markdown'. Great for invoices, social cards, email templates, OG images.
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.
formatNoOutput format — png (lossless), jpeg (smaller), webp (smallest), or pdf (document). Use pdf for invoices, reports, archival.png
fullPageNoCapture the full scrollable page instead of just the viewport
darkModeNoEmulate dark color scheme (prefers-color-scheme: dark)
widthNoViewport width in pixels (320-3840)
heightNoViewport height in pixels (240-2160)
qualityNoImage quality 1-100 (JPEG/WebP only, ignored for PNG/PDF)
delayNoMilliseconds to wait after page load before capture (useful for JS-rendered content)
blockAdsNoBlock ads and trackers before capture
blockResourceTypesNoBlock specific resource types to speed up capture. E.g. ['font', 'image'] for text-only screenshots.
deviceScaleFactorNoDevice pixel ratio (1 = standard, 2 = retina). Defaults to 2× Retina.
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.
timeoutNoMaximum seconds to wait for page load (5-60). Cloudflare has a 60s hard cap.
waitUntilNoPage readiness event. networkidle2 (default) is best for most sites. Use domcontentloaded for speed, networkidle0 for completeness.networkidle2
waitForSelectorNoCSS selector to wait for before capture. Essential for SPAs (e.g. '.main-content', '#app-loaded')
bestAttemptNoIf true (default), capture whatever is rendered on timeout instead of failing. Set to false to get a hard error on timeout.
selectorNoCSS selector of a specific element to capture instead of the full page. Useful for OG images, component extraction (e.g. '#hero', '.pricing-card')
hideSelectorsNoCSS selectors to hide (display:none) before capture. E.g. ['.modal', '#newsletter-popup'] to remove overlays. Max 50 selectors.
blockCookieBannersNoHide common cookie/consent walls (GDPR/CCPA banners) before capture. A curated selector list, lighter than custom hideSelectors.
resizeWidthNoDownscale the captured image to this width in pixels (16-3840). Aspect ratio is preserved if resizeHeight is omitted. Ignored for PDF.
resizeHeightNoDownscale the captured image to this height in pixels (16-2160). Aspect ratio is preserved if resizeWidth is omitted. Ignored for PDF.
cssNoCustom CSS to inject into the page before capture. Hide cookie banners, add watermarks, override styles. Max 50KB.
jsNoCustom JavaScript to execute in the page before capture. Runs in the browser sandbox. Max 50KB.
cookiesNoCookies to set before capture. Useful for authenticated pages. Max 50 cookies.
headersNoCustom HTTP headers to send with the page request. Cannot override Host, Connection, Content-Length, or Transfer-Encoding.
userAgentNoOverride the browser user agent string.
pdfFormatNoPDF page size. Only used when format='pdf'. Default: A4
pdfLandscapeNoPDF landscape orientation. Only used when format='pdf'.
pdfPrintBackgroundNoPrint background colors/images in PDF. Default: true
pdfScaleNoPDF scale factor (0.1-2). Default: 1
pdfMarginNoPDF page margins. Only used when format='pdf'. Accepts CSS values.
asyncNoProcess capture asynchronously. Returns a jobId immediately instead of waiting. Poll GET /v1/jobs/:jobId for status, or use webhookUrl for push notification.
webhookUrlNoURL to receive a POST callback when async capture completes. Payload is HMAC-SHA256 signed. Requires async=true.
cacheTtlNoSeconds to cache the result in R2 storage (3600-2592000). Returns a signed URL for retrieval. Requires async=true.
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.
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.
geoCityNoCity for more precise geo-targeting (e.g., 'Berlin', 'New York'). Requires 'geo'.
geoStateNoState or region for more precise geo-targeting (e.g., 'California'). Requires 'geo'.

TDQS

A3.8/5.0
Behavior4/5

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

With no annotations, the description fully carries the burden of disclosing behavioral traits. It mentions key behaviors like full-page capture, dark mode, ad blocking, bestAttempt (partial renders on timeout), async processing, and geo limitations. While it could detail error handling or authentication, the disclosure is comprehensive for a screenshot tool.

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

Conciseness3/5

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

The description is a single dense paragraph that lists features. It is not overly long but lacks a structured format (e.g., bullet points or clear sections). The first sentence captures the essence, but the rest reads as a feature dump. It is adequate but not optimally concise or front-loaded.

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

Completeness4/5

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

Given the high parameter count (40), no output schema, and no annotations, the description covers the tool's scope well. It explains key behaviors like bestAttempt, async, and geo restrictions. However, it omits the exact return format (e.g., image data or signed URL) and may leave some details about parameter interactions implied. Still, it is fairly complete for a complex tool.

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

Parameters4/5

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

Schema description coverage is 100%, providing a baseline of 3. The description adds value beyond the schema by summarizing high-level capabilities, noting mutual exclusivity among 'url', 'html', and 'markdown', and giving usage examples (e.g., 'Great for invoices, social cards'). This enriches the semantic understanding.

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?

The description clearly states the tool captures screenshots or PDFs of webpages, raw HTML, or Markdown, listing many features. It uses a specific verb ('Capture') and resource, making the purpose unambiguous. Although it doesn't explicitly contrast with the sibling 'rendex_extract', the capabilities are distinct enough to differentiate.

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

Usage Guidelines2/5

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

The description provides no guidance on when to use this tool versus the sibling 'rendex_extract'. It lacks explicit when-to-use or when-not-to-use advice, and no alternatives are mentioned. The context is clear for the tool itself, but the absence of comparative guidance reduces the score.

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

watch_createBInspect

Create a 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). An active watch captures its baseline immediately. Returns the created watch as JSON.

ParametersJSON Schema
NameRequiredDescriptionDefault
urlYesThe page to monitor (a schemeless host like 'rendex.dev/pricing' is upgraded to https).
nameNoOptional label for the watch.
intervalMinutesNoCheck frequency in minutes. Minimum is your plan's floor — Free 1440 (daily), Starter 180, Pro 30, Enterprise 5.
diffModeNovisual = pixel diff + highlighted overlay; text = extracted-text diff; both runs each.visual
thresholdNoVisual-change noise floor as a 0..1 fraction; the diff must EXCEED it to count as changed.
renderParamsNoRender knobs applied on every check (a subset of the screenshot capture params).
aiSummaryNoPro+ — attach an AI 'what changed' summary (roadmap).
webhookUrlNoStarter+ — HMAC-signed change-webhook target.
notifyEmailNoAny plan — send change alerts here. Must be your OWN account email (others are rejected). Defaults to it if omitted.
pausedNoCreate the watch paused (no baseline capture or charge until resumed).

TDQS

B3.4/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full burden. It mentions baseline capture on creation and JSON return, but omits key behaviors like plan/rate limits, cost implications, authentication requirements, error handling, or what happens if the URL is invalid. The description is insufficient for a tool with many parameters.

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

Conciseness5/5

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

The description is two sentences, front-loaded with the core action and purpose. Every sentence adds value, with no unnecessary words.

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

Completeness2/5

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

Given the tool's complexity (10 parameters, nested object, no output schema), the description is incomplete. It lacks operational details such as watch lifecycle, plan restrictions, usage limits, error handling, and how to manage the created watch. The schema covers parameter details, but the description does not provide enough context for an agent to use the tool effectively.

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?

The input schema has 100% description coverage, so parameters are well documented there. The description adds no additional meaning or context about parameters beyond summarizing the tool's overall function. Baseline score of 3 is appropriate.

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?

The description clearly states the tool's action: 'Create a Rendex Watch' to monitor a URL on a schedule and get notified when it changes. It specifies the diff modes (visual, text, both) and mentions immediate baseline capture and JSON return. This distinguishes it from sibling tools like watch_list or 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 Guidelines3/5

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

The description implies the use case (monitoring a URL for changes) but does not explicitly state when to use this tool versus alternatives like rendex_screenshot for one-off captures or watch_list for listing watches. It also lacks exclusions or prerequisites.

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

watch_deleteAInspect

Delete a watch and its run history. Irreversible.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesThe watch ID (UUID).

TDQS

A4/5.0
Behavior4/5

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

With no annotations, the description carries full burden. 'Irreversible' is a key behavioral trait, but it could mention permission requirements or cascading effects.

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

Conciseness5/5

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

Two short sentences, no wasted words, action front-loaded.

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

Completeness4/5

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

For a simple delete with one parameter and no output schema, the description covers the action and irreversibility. Could mention error behavior or idempotency.

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 coverage is 100% and the schema already describes the 'id' parameter as a UUID. The description adds no extra meaning beyond the schema.

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?

The description clearly states the verb 'Delete' and the resource 'a watch and its run history', which is specific and distinguishes from sibling tools like watch_create, watch_get, etc.

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

Usage Guidelines3/5

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

The description implies destructive usage with 'Irreversible' but does not explicitly state when to use or avoid this tool, nor compare it to alternatives.

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

watch_getAInspect

Fetch one watch by ID, including its current baseline image URL and status. Returns JSON.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesThe watch ID (UUID).

TDQS

A3.5/5.0
Behavior2/5

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

No annotations are provided, so the description carries full burden for behavioral disclosure. It only states 'Fetch' and 'Returns JSON', without clarifying read-only nature, idempotency, error handling, or any side effects. This is inadequate for a tool that could have network or permission implications.

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

Conciseness5/5

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

The description is a single sentence covering action, resource, and return type with no superfluous words. Every part adds value: verb, resource, included data, and format.

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

Completeness3/5

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

Given the tool's simplicity (1 parameter, no output schema), the description is minimally adequate. It states what is returned but lacks details on the JSON structure, possible error responses, or performance considerations. The mention of 'baseline image URL and status' partially compensates for the missing output schema, but is not exhaustive.

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 coverage is 100% with a single parameter 'id' already described as 'The watch ID (UUID)'. The description adds no further meaning beyond restating 'by ID', so it meets the baseline but does not exceed it.

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?

The description clearly states 'Fetch one watch by ID', providing a specific verb and resource, and differentiates from sibling tools like watch_list (list) by focusing on a single watch retrieval. The inclusion of 'including its current baseline image URL and status' adds specificity.

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

Usage Guidelines3/5

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

The description implies when to use (when you have a specific watch ID) but lacks explicit guidance on when not to use or comparison with alternatives. No mention of exclusions or preferred scenarios, leaving the agent to infer context from sibling tool names.

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

watch_listAInspect

List your watches (newest first), optionally filtered by status and paged. Returns { items, nextCursor }.

ParametersJSON Schema
NameRequiredDescriptionDefault
statusNoFilter by status.all
cursorNoPagination cursor from a previous nextCursor.
limitNoPage size (1–100).

TDQS

A4/5.0
Behavior3/5

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

Describes ordering and pagination but does not explicitly state read-only nature or other behavioral traits like no side effects. Annotations absent, so description carries full burden.

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

Conciseness5/5

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

Extremely concise single sentence with no fluff. Front-loads action and result format.

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

Completeness4/5

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

Adequate for a 3-param list tool with no output schema. Describes return structure but not individual item fields.

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

Parameters4/5

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

Adds context beyond schema by noting optional filtering and output structure ({ items, nextCursor }). Schema already covers param details.

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?

Description clearly states 'List your watches' with ordering and optional filters. Distinguishes from siblings like watch_get (single) and watch_create (create).

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

Usage Guidelines3/5

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

No explicit when-to-use or alternatives, but purpose is clear enough that an agent would infer when to list watches. Lacks guidance on when not to use.

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

watch_runAInspect

Run an immediate check now (charges 1 credit). Returns the queued run; poll watch_runs for the result or receive a watch.changed webhook.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesThe watch ID (UUID).

TDQS

A4.3/5.0
Behavior4/5

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

Discloses important behavior: charges 1 credit, returns a queued run (not final result), and directs to polling or webhook for results. Since no annotations provided, this covers essential behavioral traits.

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

Conciseness5/5

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

Two sentences, front-loaded with core action and credit cost, then result and follow-up options. No wasted words.

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?

Given the tool's simplicity (single parameter, no output schema), the description fully covers what it does, cost, result format, and next steps, making it complete for an agent.

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 has 100% coverage with description 'The watch ID (UUID)'. Description does not add extra meaning beyond what the schema provides, so baseline score of 3 is appropriate.

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?

Clearly states the tool runs an immediate check (verb 'Run' + resource 'check now'), and specifies it charges 1 credit, distinguishing it from sibling tools like watch_runs which poll for results.

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?

Explains when to use (to run a check now) and mentions alternatives: poll watch_runs or receive a watch.changed webhook for results. No explicit 'when not to use' but sufficient guidance.

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

watch_runsAInspect

Read a watch's run history (newest first), paged. Each run includes changed, diffScore, and signed before/after/overlay image URLs. Returns { items, nextCursor }.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesThe watch ID (UUID).
cursorNoPagination cursor from a previous nextCursor.
limitNoPage size (1–100).

TDQS

A3.8/5.0
Behavior4/5

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

No annotations are provided, so the description carries the full burden. It explicitly discloses that the tool is read-only, returns paged results, and specifies the fields included in each run. However, it does not mention rate limits or authentication requirements.

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

Conciseness5/5

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

The description is extremely concise, comprising two sentences that front-load the main purpose and key details. Every sentence adds value, with no redundancy or unnecessary information.

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

Completeness4/5

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

Given the absence of an output schema, the description adequately explains the return structure. It covers the primary use case and parameter roles. Minor gaps include lack of error handling or edge cases, but these are acceptable for a simple read operation.

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 coverage is 100%, so the schema already documents all parameters. The description adds context by explaining pagination flow (cursor and limit) and the role of the ID, but does not provide additional semantic value beyond the schema.

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?

The description clearly states the action ('read'), resource ('watch's run history'), ordering ('newest first'), and pagination. It distinguishes this tool from siblings like 'watch_list' (list watches) and 'watch_run' (trigger a run).

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

Usage Guidelines2/5

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

No explicit guidance on when to use this tool vs alternatives. The description does not mention prerequisites, such as requiring a watch ID, nor does it state when not to use it (e.g., for triggering a run).

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

watch_testAInspect

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
urlYesThe page to monitor (a schemeless host like 'rendex.dev/pricing' is upgraded to https).
nameNoOptional label for the watch.
intervalMinutesNoCheck frequency in minutes. Minimum is your plan's floor — Free 1440 (daily), Starter 180, Pro 30, Enterprise 5.
diffModeNovisual = pixel diff + highlighted overlay; text = extracted-text diff; both runs each.visual
thresholdNoVisual-change noise floor as a 0..1 fraction; the diff must EXCEED it to count as changed.
renderParamsNoRender knobs applied on every check (a subset of the screenshot capture params).
aiSummaryNoPro+ — attach an AI 'what changed' summary (roadmap).
webhookUrlNoStarter+ — HMAC-signed change-webhook target.
notifyEmailNoAny plan — send change alerts here. Must be your OWN account email (others are rejected). Defaults to it if omitted.
pausedNoCreate the watch paused (no baseline capture or charge until resumed).

TDQS

A4.2/5.0
Behavior4/5

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

Discloses that no watch, baseline, or diff is created; reports captured content, reachability, and text for comparison. With no annotations, this provides essential behavioral info, though could mention resource consumption or rate limits.

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

Conciseness5/5

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

Three sentences, front-loaded with purpose, no unnecessary words. Efficient and easy to parse.

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

Completeness4/5

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

Handles complexity of 10 params and nested objects well by summarizing output (JSON with capture and reachability). Lacks explicit field details but sufficient for a dry-run tool. No output schema to rely on.

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 coverage is 100%, so baseline is 3. Description adds minimal extra meaning beyond the schema; only reinforces validation purpose. No new parameter insights.

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?

Description clearly states it dry-runs a watch config before creation, emphasizing it does not create, baseline, or diff. It distinguishes from sibling tools like watch_create and watch_run by explicitly noting the dry-run nature and validation purpose.

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?

Explicitly advises using it before creating a watch to validate selectors/scope/identity. It does not contrast with all sibling tools, but the context (dry-run vs. actual creation) is clear.

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

watch_updateAInspect

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesThe watch ID (UUID) to update.
urlNoRe-point to a new URL (clears the baseline; the next check re-baselines).
nameNoRename the watch (null to clear).
intervalMinutesNoNew check frequency in minutes (subject to your plan's floor).
diffModeNoChange what counts as a change.
thresholdNoChange the visual-change noise floor (0..1).
renderParamsNoRender knobs to deep-merge over the existing capture config.
aiSummaryNoPro+ — toggle the AI 'what changed' summary (roadmap).
webhookUrlNoStarter+ — set or replace the change-webhook target; null to turn it off.
notifyEmailNoSet the alert email (your account email only); null to turn it off.
pausedNotrue to pause the watch, false to resume.

TDQS

A4.4/5.0
Behavior4/5

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

With no annotations, the description carries full burden. It discloses in-place mutation, partial updates, deep-merge, re-baselining, and return value. Missing details on idempotency, rate limits, or permissions, but overall adequate for a mutation tool.

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

Conciseness5/5

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

A single, focused paragraph of four sentences. Every sentence adds value, no fluff, and the main purpose is front-loaded. Excellent structure.

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

Completeness4/5

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

For 11 parameters with nested objects and no output schema, the description covers core behaviors, parameter effects, and return type. Lacks mention of error handling or watch existence checks, but is adequate for a complex tool.

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

Parameters4/5

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

Schema coverage is 100%, baseline 3. The description adds value by explaining effects like url clearing baseline, deep-merge of renderParams, and nullifying channels. It goes beyond schema definitions with practical context.

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?

The description begins with 'Update a watch in place' and lists specific actions (pause/resume, re-point url, change schedule/diff/notify, turn off channel), clearly stating the verb and resource. It distinguishes from siblings like watch_create and watch_delete.

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?

The description explains partial updates ('Only the fields you send change') and deep-merge behavior for renderParams, as well as re-baselining on scope changes. However, it does not explicitly contrast with watch_create or watch_get for read workflows, nor state prerequisites like watch existence.

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

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 9 tool updatesv1.5.0
    • Addedrendex_render_link
    • Addedwatch_create
    • Addedwatch_delete
    • Addedwatch_get
    • Addedwatch_list
    • Addedwatch_run
    • Addedwatch_runs
    • Addedwatch_test
    • Addedwatch_update
  2. 2 tool updatesv1.2.0
    • Addedrendex_extract
    • Changedrendex_screenshot9 fields changed
      • addedInput schema / properties / blockCookieBanners
        Added value: +{
        +  "description": "Hide common cookie/consent walls (GDPR/CCPA banners) before capture. A curated selector list, lighter than custom hideSelectors.",
        +  "type": "boolean"
        +}
      • addedInput schema / properties / data
        Added value: +{
        +  "additionalProperties": {},
        +  "description": "Key-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.",
        +  "type": "object"
        +}
      • addedInput schema / properties / device
        Added value: +{
        +  "description": "Device 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.",
        +  "enum": [
        +    "desktop",
        +    "iphone_15",
        +    "iphone_se",
        +    "pixel_8",
        +    "ipad",
        +    "ipad_pro"
        +  ],
        +  "type": "string"
        +}
      • addedInput schema / properties / hideSelectors
        Added value: +{
        +  "description": "CSS selectors to hide (display:none) before capture. E.g. ['.modal', '#newsletter-popup'] to remove overlays. Max 50 selectors.",
        +  "items": {
        +    "type": "string"
        +  },
        +  "maxItems": 50,
        +  "type": "array"
        +}
      • changedInput schema / properties / html / description
        Previous value: -"Raw HTML to render and capture. Mutually exclusive with 'url'. Great for invoices, social cards, email templates, OG images."New value: +"Raw HTML to render and capture. Mutually exclusive with 'url' and 'markdown'. Great for invoices, social cards, email templates, OG images."
      • addedInput schema / properties / markdown
        Added value: +{
        +  "description": "Markdown 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.",
        +  "maxLength": 5242880,
        +  "type": "string"
        +}
      • addedInput schema / properties / resizeHeight
        Added value: +{
        +  "description": "Downscale the captured image to this height in pixels (16-2160). Aspect ratio is preserved if resizeWidth is omitted. Ignored for PDF.",
        +  "maximum": 2160,
        +  "minimum": 16,
        +  "type": "integer"
        +}
      • addedInput schema / properties / resizeWidth
        Added value: +{
        +  "description": "Downscale the captured image to this width in pixels (16-3840). Aspect ratio is preserved if resizeHeight is omitted. Ignored for PDF.",
        +  "maximum": 3840,
        +  "minimum": 16,
        +  "type": "integer"
        +}
      • changedInput schema / properties / url / description
        Previous value: -"The webpage URL to capture. Mutually exclusive with 'html'."New value: +"The webpage URL to capture. Mutually exclusive with 'html' and 'markdown'."
  3. 1 tool updatev0.1.1
    • Changedrendex_screenshot2 fields changed
      • changedInput schema / properties / deviceScaleFactor / default
        Previous value: -1New value: +2
      • changedInput schema / properties / deviceScaleFactor / description
        Previous value: -"Device pixel ratio (1 = standard, 2 = retina)"New value: +"Device pixel ratio (1 = standard, 2 = retina). Defaults to 2× Retina."
  4. 1 tool updatev0.1.0
    • First observedrendex_screenshot

TDQS

A4/5.0

Scored across 11 tools

Disambiguation4/5

The two tool families are clearly separated (rendering vs. watch management), and each watch operation has a distinct role. However, rendex_screenshot and rendex_render_link share nearly the same rendering pipeline and options, and watch_run vs. watch_runs differ by only one letter, so a couple of tools could still be misselected without careful reading.

Naming Consistency4/5

All tool names use snake_case and a recognizable family prefix: rendex_* for rendering and watch_* for watch management. The imperative verb pattern is mostly consistent within the watch family, though watch_runs is a noun rather than a verb and rendex_screenshot reads as a noun, creating minor inconsistency.

Tool Count5/5

At 11 tools, the surface is well-scoped and reasonable for the server's dual purpose: three rendering/capture tools and eight watch lifecycle tools. Each tool has a clear job, and none feel redundant or unnecessary.

Completeness5/5

The watch family is fully fleshed out with create, read, list, update, delete, test, run, and history operations. The rendering family covers capture, extraction, and hosted-link generation, which covers the apparent domain without obvious dead ends.

Maintenance

ActivityMaintained
ResponsivenessUnresponsive

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    B
    maintenance
    Enables AI agents to capture any public URL as PNG, JPEG, or PDF via REST API or MCP tools, including screenshot capture, page description, and PDF rendering.
    17 npm
    MIT
  • A
    license
    Not graded
    quality
    C
    maintenance
    Hosted, SSRF-safe, cached screenshots and Open Graph images for AI agents - no headless Chrome to run.
    16 npm
    MIT