Skip to main content
Glama

Zactonz MCP server

A Model Context Protocol server for the Zactonz APIs. It lets an AI assistant capture a screenshot of a web page, read a page as Markdown, preview a link, look up DNS, SSL and WHOIS records, check a domain's email setup, verify addresses, generate QR codes, barcodes and social card images, convert images and translate text.

It runs on your machine over stdio and needs Node.js 18 or newer.

Install

Not on npm yet. @zactonz/mcp has not been published, so the npx commands below do not work yet. Until it is, install from source — the steps are at the end of this section and take about a minute.

From source

Needs Node.js 18 or newer and git.

git clone https://github.com/zactonz/zactonz-mcp.git
cd zactonz-mcp
npm ci --omit=dev

That is the whole install: two runtime dependencies, no build step. Check it starts — it will wait for input, so press Ctrl+C to leave:

node bin/zactonz-mcp.js

Then point your client at the absolute path, in place of the npx form used below:

{
  "mcpServers": {
    "zactonz": {
      "command": "node",
      "args": ["/absolute/path/to/zactonz-mcp/bin/zactonz-mcp.js"],
      "env": {
        "ZACTONZ_API_KEYS": "zk_screen_…,zk_markdown_…"
      }
    }
  }
}

Use the real absolute path — ~ and relative paths are not expanded by most clients. On Windows, write it with forward slashes or escaped backslashes, for example C:/Users/you/zactonz-mcp/bin/zactonz-mcp.js.

For Claude Code:

claude mcp add zactonz --env ZACTONZ_API_KEYS="zk_screen_…" -- node /absolute/path/to/zactonz-mcp/bin/zactonz-mcp.js

If you would rather have zactonz-mcp on your PATH, run npm link in the clone, then use "command": "zactonz-mcp" with no args.

To update later: git pull && npm ci --omit=dev.

Related MCP server: rasterly-mcp

Setup

  1. Create a key for each product you want to use in the API console. There is a free plan.

  2. Install the server — see Install above.

  3. Add the server to your MCP client, with the keys in ZACTONZ_API_KEYS separated by commas.

The examples below use npx -y @zactonz/mcp, which will work once the package is published. Until then substitute the "command" and "args" shown under From source.

Clients that read an mcpServers block, such as Claude Desktop, Cursor and Windsurf:

{
  "mcpServers": {
    "zactonz": {
      "command": "npx",
      "args": ["-y", "@zactonz/mcp"],
      "env": {
        "ZACTONZ_API_KEYS": "zk_screen_…,zk_markdown_…,zk_domain_…"
      }
    }
  }
}

VS Code (.vscode/mcp.json):

{
  "servers": {
    "zactonz": {
      "command": "npx",
      "args": ["-y", "@zactonz/mcp"],
      "env": { "ZACTONZ_API_KEYS": "zk_screen_…,zk_markdown_…" }
    }
  }
}

Claude Code:

claude mcp add zactonz --env ZACTONZ_API_KEYS="zk_screen_…,zk_markdown_…" -- npx -y @zactonz/mcp

On Windows, if the client cannot start npx directly, use "command": "cmd" with "args": ["/c", "npx", "-y", "@zactonz/mcp"].

Keys

A Zactonz key works for one product, and the product is part of the key: zk_screen_… is a screenshot key, zk_markdown_… a Markdown key. Put every key you have in ZACTONZ_API_KEYS. The server uses the right one for each call and offers the assistant only the tools those keys can call.

Keys stay in the server process. They are sent to api.zactonz.com in the Authorization header and nowhere else, and they are never included in anything returned to the assistant.

Tools

Tool

Purpose

Key

capture_screenshot

Capture a web page as an image or PDF

screen

render_html

Render HTML to an image or PDF

screen

read_webpage

Read a web page as Markdown

markdown

convert_html_to_markdown

Convert HTML to Markdown

markdown

preview_link

Title, description, image and metadata of a URL

unfurl

lookup_dns

DNS records and DNSSEC status

domain

inspect_ssl_certificate

Certificate, chain, expiry and TLS details

domain

lookup_whois

Registrar, dates and nameservers of a domain

domain

check_email_domain

MX, SPF, DKIM, DMARC and related records, scored

email

verify_emails

Whether addresses can receive mail

mverifier

generate_qr_code

Generate a QR code

qr

read_qr_code

Decode a QR code

qr

generate_barcode

Generate a barcode

barcode

generate_social_image

Generate an Open Graph image

og

convert_image

Convert, resize or crop an image

image

inspect_image

Dimensions, format and colours of an image

image

translate_text

Translate between 46 languages

translator

get_drive_download_link

Direct download link for a Google Drive file

gdrive

check_api_key

Plan and remaining quota of a key

any

docs/tools.md lists the arguments of each tool.

Example requests once it is connected:

  • "Take a screenshot of example.com on a 390 pixel wide screen and tell me whether the menu fits."

  • "Read https://example.com/pricing and summarise the plans."

  • "Does example.com have SPF and DMARC set up correctly?"

  • "When does the SSL certificate for example.com expire?"

Results

A tool returns JSON text. Two things differ from the raw API:

  • read_webpage and convert_html_to_markdown return the Markdown as plain text, followed by the remaining fields as JSON. They request at most 20,000 characters unless the assistant asks for more.

  • A tool that produces an image returns the link and, when the file is 750 KB or smaller, the image as well, so the assistant can look at it. capture_screenshot and render_html use JPEG quality 80 unless told otherwise, to stay under that size. PDFs and larger images are returned as a link only.

A refused call is returned as a tool error carrying the API's message, the status, how long to wait when a limit was reached, and the request id.

Limits and timing

Calls spend units from your plan's quota, the same as direct API calls. See rate limits and quotas.

A tool call is given 55 seconds in total, because MCP clients stop waiting after 60. Within that time the server retries once, and only where a retry cannot repeat work: after a 429 with a short Retry-After, after a gateway error on a read, or ten seconds after the API's request burst limit rejects a call. If the client cancels a call, the server stops.

Configuration

Variable

Purpose

Default

ZACTONZ_API_KEYS

API keys, separated by commas

none

ZACTONZ_MCP_INLINE_IMAGE_BYTES

Largest image returned inline, in bytes. 0 returns links only

750000

ZACTONZ_BASE_URL

API base URL

https://api.zactonz.com

Without keys the server still starts and lists every tool, and each call answers with setup instructions. Values in ZACTONZ_API_KEYS that are not Zactonz keys are ignored and reported on stderr.

Security and privacy

  • Untrusted content. read_webpage, preview_link and read_qr_code return text written by whoever controls the page or the code. That text can contain instructions aimed at the assistant. The server labels it as third-party data, but the label is advice to the model, not a guarantee. Review what an assistant does after reading pages you do not control.

  • Generated files are public links. Screenshots, PDFs, QR codes, barcodes and converted images are stored on api.zactonz.com at unguessable URLs that anyone holding the link can open, for the period given on each endpoint's reference page. Do not render documents that must stay private.

  • What is sent. Tool arguments go to api.zactonz.com and nowhere else. The server keeps no logs and stores nothing on disk. The API's own handling of data is covered by the privacy policy.

  • Arguments are validated against each tool's schema before any request is made, and arguments outside the schema are refused.

  • Images are fetched for inline display only from the API's own host, over HTTPS, without following redirects.

  • Tools that fetch a URL do so from Zactonz's servers, which refuse private and internal addresses.

Report a vulnerability as described in SECURITY.md.

Troubleshooting

  • A tool is missing. Only tools with a key are listed. Add a key for that product and restart the client.

  • Every call answers with setup instructions. ZACTONZ_API_KEYS is empty or holds no valid key. The server prints the reason on stderr, which most clients show in their MCP log.

  • "Missing or invalid API key." The key was revoked or mistyped. Ask the assistant to run check_api_key, or check the key in the console.

  • A screenshot has no inline image. The file is over the inline limit. Lower the quality or size, or raise ZACTONZ_MCP_INLINE_IMAGE_BYTES.

Versioning

This package follows semantic versioning. While it is at 0.x, a minor release may rename a tool or an argument; such changes are listed in the changelog.

Development

See CONTRIBUTING.md.

Licence

MIT. See LICENSE. Maintained by Zactonz Technologies.

Available Tools

19 tools
capture_screenshotCapture a screenshot of a web pageA

Loads a public web page in a headless browser and captures it as a JPEG, PNG or WebP image, or as a PDF. Returns a link to the file, and the image itself when it is small enough to look at directly. Suited to checking how a page renders or keeping a visual record of it.

ParametersJSON Schema
NameRequiredDescriptionDefault
urlYesAbsolute URL of the page to capture.
delayNoSeconds to wait after the page has loaded before capturing, 0 to 15. Default 5.
scaleNoPDF only. Render scale.
widthNoViewport width in pixels, 200 to 3840. Values outside the range are clamped. Default 1280.
formatNoOutput type. `jpeg` (default), `png`, `webp`, or `pdf` for a paged document.jpeg
heightNoViewport height in pixels, 150 to 4320. Values outside the range are clamped. Default 1024.
qualityNoJPEG quality from 1 to 100. Sent as 80 when omitted, which keeps most captures small enough to be returned inline. Ignored for other formats.
marginTopNoPDF only. Top margin in inches, 0 to 5. Default 0.4.
marginLeftNoPDF only. Left margin in inches, 0 to 5. Default 0.4.
paperWidthNoPDF only. Paper width in inches.
marginRightNoPDF only. Right margin in inches, 0 to 5. Default 0.4.
orientationNoPDF only.portrait
paperHeightNoPDF only. Paper height in inches.
marginBottomNoPDF only. Bottom margin in inches, 0 to 5. Default 0.4.

TDQS

A3.7/5.0
Behavior4/5

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

Annotations are present (readOnlyHint=false, openWorldHint=true, idempotentHint=false, destructiveHint=false) and the description does not contradict them. Beyond the annotations it adds real context: pages must be public, capture runs in a headless browser, output may be a link or an inline image depending on size. It omits any mention of rate limits or failure modes for unreachable pages.

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?

Two sentences, front-loaded with the mechanism and output, then the use case. No filler, and the return behavior is stated before the softer suitability note. Tight and readable.

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 14-parameter tool with no output schema, the description covers the essentials: public-page constraint, headless-browser execution, supported formats, and the dual return shape (link vs inline image). The PDF-specific and viewport parameters are left entirely to the schema, which is acceptable given 100% coverage.

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% across all 14 parameters, so the schema already documents url, format, delay, dimensions, and the PDF-only fields in detail. The description only restates the format choices (JPEG/PNG/WebP/PDF) already enumerated in the schema, adding no meaning beyond it. Baseline 3 is appropriate.

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

Purpose4/5

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

States a specific verb and resource: loads a public web page in a headless browser and captures it as an image or PDF. Clear enough to act on, but it never differentiates itself from closely related siblings like render_html, read_webpage, convert_html_to_markdown, or preview_link, which an agent must disambiguate among.

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?

"Suited to checking how a page renders or keeping a visual record of it" implies the use case but gives no explicit when-to-use-vs-alternative guidance. With render_html and read_webpage as siblings, the agent is left to infer which tool applies to a given page-inspection task.

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

check_api_keyCheck a Zactonz API keyA
Read-only

Reports the plan of a configured Zactonz API key and the quota it has left today and this month. Costs nothing.

ParametersJSON Schema
NameRequiredDescriptionDefault
productYesThe product whose key to check.

TDQS

A4/5.0
Behavior4/5

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

Annotations declare readOnlyHint and openWorldHint, so safety is partly covered, but the description adds genuinely new behavioral facts: it reports both daily and monthly quota remaining, and 'Costs nothing' tells the agent the call consumes no quota. It stops short of covering invalid/missing-key behavior or return shape.

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 tight sentences with the returned information front-loaded and the zero-cost caveat last. No filler or restatement of the title.

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?

With no output schema, the description does the work of naming the returned fields (plan, daily quota, monthly quota) and the cost profile. It omits edge-case behavior such as unconfigured or invalid keys, which is a minor gap for a single-parameter read tool.

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% with a single enum-constrained 'product' parameter that is fully documented in the schema. The description adds nothing beyond the schema for this parameter, so the 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 ('Reports') and resource (plan of a configured Zactonz API key plus its quota for today and the month). No sibling tool inspects API keys, so the agent can distinguish it without opening the schema.

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 a pre-flight use case via 'Costs nothing' (safe to call freely), but never states when to call it versus alternatives or what happens when no key is configured. Usage is implied rather than explicit.

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

check_email_domainCheck the email setup of a domainB
Read-only

Audits how a domain is configured for email: MX, SPF, DKIM, DMARC, MTA-STS, TLS-RPT and BIMI records, whether it is a disposable or free mail provider, a score out of 100 and a list of findings.

ParametersJSON Schema
NameRequiredDescriptionDefault
probeNoWhen true, connects to the primary MX to read its banner and STARTTLS support.
domainYesDomain to audit. An email address is accepted and reduced to its domain.
selectorsNoDKIM selectors to check in addition to the common ones, up to 20.

TDQS

B3.4/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true and openWorldHint=true, so the safety and network-access profile is covered. The description adds scope (which records are inspected) but no additional behavioral traits such as rate limits, auth requirements, or latency from the probe option.

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 front-loaded sentence that packs the record coverage, provider classification, and return contents with zero filler. Nothing is wasted.

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?

With no output schema, the description usefully signals the return shape (score out of 100 and a list of findings) and the audit scope. It is nearly complete, only missing guidance on the probe/selectors trade-offs already handled by the schema.

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%, with probe, domain, and selectors all documented in the schema itself. The description adds no parameter-level meaning beyond that, so the baseline of 3 applies.

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

Purpose4/5

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

States a specific verb ('Audits') and resource ('domain email configuration') and enumerates the exact record types checked (MX, SPF, DKIM, DMARC, MTA-STS, TLS-RPT, BIMI) plus the disposable/free-provider detection. This clearly separates it from the generic lookup_dns, though it never names a sibling outright.

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 explains what is audited but gives no when-to-use context, no prerequisites, and no indication of when to prefer this over lookup_dns or verify_emails. The agent must infer the routing on its own.

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

convert_html_to_markdownConvert HTML to MarkdownB
Read-only

Converts HTML you already hold to Markdown. Nothing is fetched.

ParametersJSON Schema
NameRequiredDescriptionDefault
htmlYesThe HTML to convert, up to 2 MB.
modeNo`article` (default) keeps the main content. `full` converts the whole body.article
linksNoWhen false, replaces links with their text.
imagesNoWhen false, drops images from the output.
max_charsNoLongest Markdown to return, in characters, from 1000 to 500000. Sent as 20000 when omitted.

TDQS

B3.4/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true and openWorldHint=true, so the safe/read-only profile is covered. The description usefully adds that no fetching occurs (a pure local transform), but says nothing about error behavior or output shape, so this is an incremental addition over the annotations.

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?

Two short, front-loaded sentences with no filler; the core purpose comes first and the scoping clarification second. It is lean, though it could carry a bit more operational detail without bloating.

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?

This is a low-complexity pure transform with full schema coverage, and the description covers the essential 'no network fetch' point. It omits anything about the returned Markdown or error/limit handling, which for a converter tool would be nice but is not strictly required.

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 all five parameters (including the enum and the 2 MB limit) are already documented in the schema. The description adds no parameter-level detail, which is the expected baseline when the schema does the heavy lifting.

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

Purpose4/5

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

States a specific verb and resource ('Converts HTML ... to Markdown') and adds the scoping phrase 'HTML you already hold,' which separates it from fetch-oriented siblings like render_html and read_webpage. It does not name a sibling outright, but the purpose is unambiguous.

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?

'Nothing is fetched' implies the use case is HTML already in hand, guiding the agent away from network tools. However, it never states when-not to use this or names the alternative, so usage is only implied rather than explicit.

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

convert_imageConvert or resize an imageA

Converts an image at a public URL to WebP, AVIF, JPEG, PNG or GIF, optionally resizing, cropping, rotating, flipping, blurring, sharpening or removing colour. Returns a link valid for 24 hours with the source and output details, and the image itself when it is small enough.

ParametersJSON Schema
NameRequiredDescriptionDefault
fitNo`inside` (default, shrink to fit, never enlarge), `cover` (fill and crop), `contain` (fit with padding, see `background`) or `fill` (stretch).inside
urlYesPublic URL of the image to convert.
blurNoGaussian blur passes, 0 to 20.
flipNo`h`, `v` or `both`.
widthNoTarget width in pixels, up to 8000. Omit to derive from the height.
formatNoOutput format: `webp` (default), `avif`, `jpeg`, `png`, `gif`, or `keep` to keep the source format.webp
heightNoTarget height in pixels, up to 8000. Omit to derive from the width.
rotateNoClockwise degrees, 0 to 359. EXIF orientation is always applied first.
qualityNo1 to 100 for lossy formats.
sharpenNoWhen true, applies a sharpening kernel.
grayscaleNoWhen true, converts to grayscale.
backgroundNoSix hex digits used to flatten transparency and to pad `contain`. JPEG output is flattened on white when unset.

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=false, openWorldHint=true and destructiveHint=false, so the safety profile is largely covered. The description nonetheless adds real behavioral context beyond the annotations: the output link expires after 24 hours, the response includes source and output details, and the image itself is only returned when small enough. It omits any statement about auth or rate limits, keeping it short of a 5.

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 tightly packed clauses with zero filler: the conversion/transformation capabilities come first, followed by the return-value contract. Nothing is redundant with the schema and the most decision-relevant information is front-loaded.

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 12-parameter tool with no output schema, the description covers both the operation surface and the return contract (24-hour link, source/output details, conditional image body). Nothing an agent needs in order to invoke it correctly is missing.

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 every parameter including enum meanings, ranges and defaults. The description only restates the operations in prose without adding syntax, format or interaction detail beyond what the schema provides. 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 (converts) and resource (an image at a public URL), enumerates the supported output formats and the transformation operations, so an agent can distinguish it from inspect_image and generate_social_image without opening the schema.

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 requirement of a public source URL implicitly scopes usage, but the description never states when to prefer this tool over siblings like inspect_image, generate_social_image or capture_screenshot, and gives no exclusions or prerequisites. Usage is inferable rather than stated.

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

generate_barcodeGenerate a barcodeA

Renders a barcode: Code 128, Code 39, Code 93, EAN-13, EAN-8, UPC-A, UPC-E, ITF-14 or Codabar. Returns a link valid for 24 hours, the dimensions and the image itself.

ParametersJSON Schema
NameRequiredDescriptionDefault
typeNo`code128` (printable ASCII, up to 80 characters), `code39` (digits, capitals and `- . $ / + %`), `code93`, `ean13` (12 digits, or 13 with the check digit), `ean8` (7 or 8 digits), `upca` (11 or 12 digits), `upce` (6 to 8 digits), `itf14` (13 or 14 digits), `codabar` (a start and stop letter A to D around digits).code128
colorNoBar colour as six hex digits.000000
scaleNoWidth of the narrowest bar in pixels, 1 to 10.
formatNo`png` (default), `svg` or `jpg`.png
heightNoBar height in pixels, 20 to 300.
bgcolorNoBackground colour as six hex digits.ffffff
contentYesThe value to encode. Each symbology has its own alphabet and length, listed under the `type` parameter.

TDQS

A3.6/5.0
Behavior4/5

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

Annotations already declare openWorldHint=true, non-read-only, non-idempotent and non-destructive. The description adds genuinely non-obvious behavior: the returned link expires in 24 hours and the response includes dimensions plus the image itself. That expiry detail meaningfully affects how an agent should handle the result.

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 clauses, zero filler, and the core action is front-loaded before the supported types. Nothing would be lost by keeping it exactly as written.

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 7-parameter tool with no output schema, the description covers the action, the full symbology set, and the return shape (link with expiry, dimensions, image). The only gap is the absence of any when-to-use guidance relative to generate_qr_code.

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% and every parameter (type alphabets, color, scale, format, height, bgcolor, content) is fully documented in the schema. The description adds nothing beyond the schema, so the baseline 3 applies.

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

Purpose4/5

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

States a specific verb (Renders) and resource (a barcode) and enumerates all nine supported symbologies, which implicitly separates it from the sibling generate_qr_code. It never names that sibling or explicitly contrasts the two, but the symbology list makes the scope unambiguous.

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?

There is no guidance on when to choose this tool over generate_qr_code or when a barcode is inappropriate. The only orienting statement is the 24-hour link lifetime, which is output behavior rather than usage context.

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

generate_qr_codeGenerate a QR codeA

Encodes text or a URL as a QR code. Returns a link to the image and the image itself. With the text format it returns the code as rows of 0 and 1 instead.

ParametersJSON Schema
NameRequiredDescriptionDefault
sizeNoPixels per QR module, from `1` to `20`.
colorNoForeground colour as six hex digits, for example `ff6700`, or a decimal RGB integer. Default black.000000
formatNo`png` (default), `jpg`, `svg`, or `text` for a 0/1 matrix in JSON.png
bgcolorNoBackground colour as six hex digits, for example `ff6700`, or a decimal RGB integer. Default white.FFFFFF
contentYesThe text or URL to encode, up to 4000 characters.
paddingNoQuiet zone around the code in modules, 0 to 20. Default 2.
accuracyNoError-correction level. Higher levels survive more damage but produce denser codes.normal

TDQS

A3.6/5.0
Behavior4/5

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

With annotations only covering safety/idempotency hints, the description carries useful extra weight by disclosing the return shape: a link to the image, the image itself, or a 0/1 row matrix in text format. It does not mention determinism or any rate/size limits, but the output disclosure is genuinely valuable given there is no output schema.

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 short sentences with zero filler, and the core purpose is front-loaded before the return-value detail. Every sentence earns its place.

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 generation tool with full schema coverage and no output schema, the description supplies the essential return-value information an agent needs. The main omission is any routing guidance relative to sibling generation tools.

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 all seven parameters (size, color, bgcolor, padding, accuracy, format, content) are fully documented in the schema itself. The description only echoes the text-format behavior already stated in the format enum, adding little beyond the baseline.

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

Purpose4/5

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

States a specific verb and resource ("Encodes text or a URL as a QR code") and specifies the two output shapes, which clearly separates it from read_qr_code and is distinguishable from generate_barcode by name. It never names a sibling explicitly, so it falls short of the top band.

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 guidance on when to choose this over generate_barcode or read_qr_code, and no mention of prerequisites or limits beyond the schema. Usage must be inferred entirely from the name and parameter set.

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

generate_social_imageGenerate a social card imageA

Creates an Open Graph image, the card shown when a link is shared, from a title and an optional subtitle, site label and logo. Returns a link valid for seven days and the image itself.

ParametersJSON Schema
NameRequiredDescriptionDefault
bgNoBackground colour as six hex digits, overriding the theme.
fontNo`titillium`, `system` or `serif`.titillium
logoNoPublic URL of a PNG, JPEG, WebP, GIF or SVG logo, up to 512 KB.
siteNoShort label shown at the bottom, for example your domain, up to 60 characters.
sizeNoPixel size.1200x630
themeNo`light` or `dark`.light
titleYesMain text, up to 120 characters.
accentNoAccent colour as six hex digits.ff6700
formatNo`png` (default), `jpeg` or `webp`.png
subtitleNoSecondary line, up to 200 characters.
templateNo`card` (accent bar and logo), `minimal` (centred) or `split` (text beside an accent panel).card

TDQS

A4/5.0
Behavior4/5

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

Annotations already declare a non-read-only, open-world, non-idempotent write, and the description is consistent with that by describing creation. It adds genuinely new behavioral context the annotations cannot convey: the returned link is valid for only seven days, and the image itself is returned alongside it.

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, zero waste, with the core identity ('Open Graph image') front-loaded before the inputs and the return contract. Every clause earns its place.

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?

With no output schema, the description carries the return-value burden and does so adequately by stating both the link (with its seven-day validity) and the image. It stops short of clarifying the image's form (binary vs URL) or any size/rate limits, minor gaps for an otherwise complete definition.

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% with enums for font, size, theme, format and template, so the schema already documents every parameter in detail. The description names title, subtitle, site and logo but adds no syntax or constraint beyond what the schema provides, so the 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 and resource ('Creates an Open Graph image') and immediately glosses the concept as 'the card shown when a link is shared', which no sibling tool produces. An agent can tell it apart from capture_screenshot, render_html or generate_qr_code without opening the schema.

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 contextualises when the output is useful ('shown when a link is shared'), implying the use case, but gives no explicit when-to-use or when-not-to-use guidance and never names an alternative. With no exclusions, an agent must infer this over render_html or preview_link itself.

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

inspect_imageInspect an imageA
Read-only

Reports the width, height, format, file size, orientation, transparency and dominant colours of an image at a public URL.

ParametersJSON Schema
NameRequiredDescriptionDefault
urlYesPublic URL of the image to inspect.

TDQS

A3.6/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and openWorldHint=true, so the safety profile is covered. The description adds real value beyond that by enumerating exactly which attributes are reported (dimensions, format, size, orientation, transparency, dominant colours), telling the agent what it will receive without an output schema. It doesn't cover failure modes such as unreachable or non-image URLs.

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?

One sentence, front-loaded with the verb and resource, and every listed attribute earns its place. Nothing is redundant or padded.

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?

With no output schema, the description usefully compensates by listing the returned fields, and the read-only annotation covers the safety dimension. It would be complete with a note on error behavior for invalid or non-public URLs, but as a simple one-parameter read tool it is nearly sufficient.

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% for the single url parameter, so the schema already documents it fully, and the description adds only the qualifier 'public'. Baseline 3 is appropriate when the schema does the heavy lifting.

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

Purpose4/5

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

The description uses a specific verb ('Reports') on a specific resource ('an image at a public URL') and enumerates the exact attributes returned, so an agent knows immediately this is a metadata-inspection tool rather than a transformation tool. It never names the closest sibling, convert_image, so it falls short of full sibling differentiation.

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?

There is no when-to-use guidance, no statement of when this is preferable to convert_image or capture_screenshot, and no mention of prerequisites beyond the URL being public. The agent must infer the use case entirely from the purpose statement.

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

inspect_ssl_certificateInspect an SSL certificateA
Read-only

Connects to a host and reports its TLS certificate: issuer, subject, validity dates, days remaining, whether the chain is trusted and the name matches, and the protocol and cipher in use.

ParametersJSON Schema
NameRequiredDescriptionDefault
hostYesHost name, or a URL from which the host is taken.
portNoTLS port: 443, 8443, 465, 993, 995, 636 or 5061.
freshNoWhen true, bypasses the cache.

TDQS

A3.8/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and openWorldHint=true, so safety is covered. The description adds genuine behavioral context by disclosing that it opens a live network connection to the host and evaluates chain trust and hostname match, which is more than the annotations convey. It does not mention timeouts, connectivity failure behavior, or caching semantics beyond what the 'fresh' parameter implies.

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 front-loaded sentence that delivers the connection behavior first and the reported fields second, with no filler or repetition of the title.

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?

With no output schema present, the description usefully enumerates the returned fields, and annotations cover the read-only/open-world safety profile. The only gap is the absence of any usage or failure-mode context, which is minor for a straightforward inspection tool.

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 host, port (with enum) and fresh are all fully documented in the schema. The description adds no parameter-level meaning beyond that, which is the expected baseline when the schema does the work.

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 names a specific verb ('connects... and reports') and resource ('TLS certificate'), then enumerates exactly what is returned: issuer, subject, validity dates, days remaining, trust, name match, protocol and cipher. It is unmistakable against siblings like lookup_dns or lookup_whois, which serve different purposes.

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 guidance on when to choose this tool over neighbors such as lookup_dns, lookup_whois, or check_email_domain, and no stated prerequisites (e.g. network reachability, need for open ports). Usage is only implied by the tool's subject matter.

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

lookup_dnsLook up DNS recordsB
Read-only

Returns the DNS records of a host or domain (A, AAAA, MX, TXT, NS, CNAME, SOA, CAA, SRV) and its DNSSEC status.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesHost or domain name.
typeNoRecord types to look up. Omit for A, AAAA, MX, TXT, NS, CNAME, SOA and CAA.

TDQS

B3.4/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true and openWorldHint=true, so the safety and external-network profile is covered. The description usefully adds that DNSSEC status is included alongside the records, but says nothing about timeout, rate limits, or behavior for non-existent domains — modest added value over the structured fields.

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 sentence that front-loads the return value and packs the record enumeration and DNSSEC note with no filler. Every clause earns its place.

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?

With no output schema, the description carries the burden of indicating what is returned, and it does so by naming the record types and DNSSEC status. Given a two-parameter read-only tool, this is nearly complete; only error/empty-result behavior is left implicit.

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% and both parameters are documented in the schema, so the baseline is 3. The description restates the record-type list but adds no syntax or format details beyond what the schema already provides; note the description mentions SRV while the schema default list omits it.

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

Purpose4/5

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

The description gives a specific verb ('Returns') plus resource ('DNS records of a host or domain') and enumerates the record types covered, so the agent knows exactly what comes back. It stops short of differentiating itself from near-neighbors like lookup_whois or check_email_domain, which also probe domain metadata.

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?

There is no statement of when to reach for this tool versus alternatives such as inspect_ssl_certificate, lookup_whois, or check_email_domain. Usage is only weakly implied by the record types listed.

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

lookup_whoisLook up a domain registrationA
Read-only

Returns the registration record of a domain from RDAP or WHOIS: registrar, creation, update and expiry dates, status codes, nameservers and abuse contact.

ParametersJSON Schema
NameRequiredDescriptionDefault
rawNoWhen true, includes the raw WHOIS text when the fallback service was used.
domainYesDomain name. A host name or URL is reduced to its registrable domain.

TDQS

A3.6/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true and openWorldHint=true, so safety and external-call behavior are covered. The description does add the upstream sources (RDAP with a WHOIS fallback), which is meaningful context, but it says nothing about rate limits, failure modes for unregistered domains, or latency.

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 front-loaded sentence that names the sources first and then the returned fields. No redundancy, no filler, and the most decision-relevant information leads.

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?

With no output schema, the description usefully enumerates the returned fields and the data sources, and annotations carry the read-only/open-world profile. It stops short of describing error behavior (e.g., domain not registered) or which source was used in a given response, which would complete the picture.

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 both 'domain' (host/URL reduced to registrable domain) and 'raw' (includes raw WHOIS text on fallback) are already fully documented in the schema. The description adds no parameter-level meaning beyond that, so the 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 and resource ('Returns the registration record of a domain') and enumerates exactly what the record contains (registrar, dates, status codes, nameservers, abuse contact). The RDAP/WHOIS framing cleanly separates it from siblings such as lookup_dns or inspect_ssl_certificate without needing to name them.

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?

There is no when-to-use versus when-not-to-use guidance and no alternative tool is named. An agent must infer from the sibling list whether registration data is what it wants. Nothing about prerequisites or fallback conditions is stated.

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

read_qr_codeRead a QR codeA
Read-only

Decodes the QR code in an image and returns the text it holds.

ParametersJSON Schema
NameRequiredDescriptionDefault
imageYesA link to the image, or the base64-encoded image bytes when format is `base64`.
formatNoHow `image` is given: `url` for a link, `base64` for the image bytes.url

TDQS

A3.8/5.0
Behavior3/5

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

Annotations declare readOnlyHint=true and openWorldHint=true, covering safety and network access. The description adds that the result is the decoded text, which is useful since there is no output schema, but it does not mention failure cases, multiple codes, or rate limits. With annotations carrying the safety profile, this is a 3.

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?

One sentence, front-loaded with the action and result. Every word earns its place; no redundancy.

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 two-parameter read tool with full schema coverage and annotations for safety/open-world, the definition is nearly complete. The description covers the return value in the absence of an output schema, though it omits error behavior for invalid or QR-less images.

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%: both image and format are fully described in the schema, including the base64 alternative and default. The description adds no parameter-level detail, so 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?

The description names a specific verb ('Decodes') and resource ('QR code in an image'), and states the output ('returns the text it holds'). This clearly separates it from generate_qr_code and other image tools without needing to name siblings.

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 usage by stating the action, but gives no explicit when-to-use, when-not, or alternatives (e.g., generate_qr_code or inspect_image). An agent must infer that it applies only when an image contains a QR code.

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

read_webpageRead a web page as MarkdownA
Read-only

Fetches a public web page and returns its main content as Markdown, without navigation, adverts or scripts. For pages that build their content with JavaScript, set render to true.

ParametersJSON Schema
NameRequiredDescriptionDefault
urlYesThe page to read.
modeNo`article` (default) keeps the main content. `full` converts the whole body.article
freshNoWhen true, bypasses the cache.
linksNoWhen false, replaces links with their text.
imagesNoWhen false, drops images from the output.
renderNoWhen true, loads the page in a headless browser first.
max_charsNoLongest Markdown to return, in characters, from 1000 to 500000. Sent as 20000 when omitted. The reply says whether the text was cut short.

TDQS

A3.9/5.0
Behavior4/5

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

Annotations already declare readOnlyHint and openWorldHint. The description adds real behavioral context beyond that: it strips navigation/adverts/scripts, and it explains the JS-rendering path. It stops short of noting caching behavior or rate limits, but covers the important 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, zero filler, with the core purpose and output format front-loaded and the conditional tip second. Every clause earns its place.

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?

There is no output schema, so the description carries the return-value burden, and it does state the output is Markdown main content with truncation signaled. For a read-only 7-param tool with full schema coverage, this is essentially complete, though it could confirm the public-only/no-auth boundary.

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%, so the 3 baseline applies, and the description earns above it by tying the render parameter to a concrete condition (JavaScript-built content). The other six parameters are left entirely to the schema, which is adequate but not additive.

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

Purpose4/5

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

States a specific verb (fetches) and resource (public web page) plus the output format (main content as Markdown with navigation, adverts and scripts stripped). It is clearly distinct from siblings like read_qr_code or capture_screenshot, though it does not name any sibling directly for differentiation.

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 only explicit guidance is conditional on the render flag (JS-built pages). There is no statement of when to prefer this over render_html, preview_link or convert_html_to_markdown, so usage is only implied by the 'public web page' framing.

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

render_htmlRender HTML to an image or PDFA

Renders an HTML document you provide as a JPEG, PNG or WebP image, or as a PDF: an invoice, a report, a certificate. Returns a link to the file, and the image itself when it is small enough. Images, fonts and stylesheets referenced by the HTML must use absolute URLs.

ParametersJSON Schema
NameRequiredDescriptionDefault
htmlYesThe HTML document to render, up to 2 MB.
widthNoViewport width in pixels, 200 to 3840. Values outside the range are clamped. Default 1280.
formatNoOutput type. `jpeg` (default), `png`, `webp`, or `pdf` for a paged document.jpeg
heightNoViewport height in pixels, 150 to 4320. Values outside the range are clamped. Default 1024.
qualityNoJPEG quality from 1 to 100. Sent as 80 when omitted, which keeps most captures small enough to be returned inline. Ignored for other formats.

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already declare the non-read-only, open-world, non-idempotent safety profile, so the bar is lower; the description still adds real value by disclosing the return shape (a link to the file, plus the image inline when small enough) and the external-resource constraint. It does not cover link lifetime, failure modes, or rendering latency.

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, zero filler. Output formats and use cases come first, then the return behavior and the absolute-URL constraint, so the most decision-relevant information is front-loaded.

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?

With no output schema, the description carries the return-value burden and does so ('returns a link to the file, and the image itself when it is small enough'). Combined with the 100%-covered schema and existing annotations, an agent has everything needed to select and call the tool.

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 baseline is 3. The description restates the format list and the 2 MB limit that the schema already documents, and adds no new meaning for width, height, or quality parameters.

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

Purpose4/5

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

States a specific verb and resource ('Renders an HTML document you provide') plus the concrete output surface (JPEG, PNG, WebP, PDF), so an agent can tell it apart from markdown converters in the sibling set. It never names an alternative such as capture_screenshot, though the 'HTML you provide' phrasing implicitly separates it from URL-based capture tools.

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?

Gives concrete use cases (invoice, report, certificate) and a hard prerequisite for correct use: referenced images, fonts and stylesheets must use absolute URLs. There is no explicit when-not guidance or named alternative, but the context and constraint are clear enough to invoke correctly.

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

translate_textTranslate textB
Read-only

Translates text from one language to another. 46 languages are supported.

ParametersJSON Schema
NameRequiredDescriptionDefault
toYesTwo-letter code of the target language, such as `es`, `fr`, `de`, `ar` or `ur`.
fromNoTwo-letter code of the source language, such as `en`. Defaults to English.en
textYesThe text to translate.

TDQS

B3.4/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true and openWorldHint=true, so the safety profile is covered externally. The description adds one genuinely useful behavioral constraint — 46 supported languages — but says nothing about rate limits, text length limits, or failure modes for unsupported language codes.

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, zero redundancy, with the core operation front-loaded before the scope fact. Every sentence earns its place.

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 3-parameter read-only utility with a fully documented schema and annotations covering read-only/open-world behavior, the definition is nearly sufficient. It could mention the return value (translated text) or constraints on input length, but nothing critical for correct invocation is missing.

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 all three parameters are documented in the schema itself, including the English default for `from` and example codes for `to`. The description's only added parameter-relevant information is the total language count, which does not clarify code formatting or enum membership.

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

Purpose4/5

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

States a specific verb (Translates) and resource (text) with the scope of the operation (one language to another). Sibling tools are unrelated utilities (DNS, QR codes, screenshots), so there is no competing translation tool to distinguish from, but the purpose is unambiguous.

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?

There is no when-to-use, when-not-to-use, or alternative guidance beyond the obvious implication of the name. No prerequisites, no note about the default source language being English in prose, and no indication of when another sibling might be preferred.

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

verify_emailsVerify email addressesA

Checks whether email addresses can receive mail by asking the receiving mail server, without sending a message. Returns valid or invalid for each address. Can take up to a minute.

ParametersJSON Schema
NameRequiredDescriptionDefault
emailsYesThe addresses to check, at most ten.

TDQS

A3.8/5.0
Behavior4/5

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

Annotations declare readOnlyHint=false, openWorldHint=true, and idempotentHint=false, so the agent already knows this performs an external, non-idempotent operation. The description adds valuable context: no message is sent, results can take up to a minute, and output is valid/invalid per address. It doesn't mention rate limits, authentication, or failure modes, but it meaningfully extends the annotated behavior.

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 tight sentences: what it does, what it returns, and the latency caveat. The latency warning is front-loaded enough to set expectations and nothing is wasted.

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 single-parameter tool with no output schema and full annotation coverage, the description covers mechanism, return values, and latency. It does not explain error handling (e.g., what happens for malformed addresses) or the distinction from check_email_domain, so it is not fully complete.

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 itself documents the emails array and its ten-address cap. The description adds no per-parameter syntax, format, or validation detail beyond what the schema already provides, so the baseline of 3 applies.

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

Purpose4/5

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

States a specific verb (checks/verify) and resource (email addresses) and clarifies the mechanism: querying the receiving mail server without sending a message. It could be confused with the sibling check_email_domain, which validates domains rather than individual addresses, but the description does not distinguish between them.

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?

Usage is implied by the purpose but there is no explicit when-to-use guidance, no mention of alternatives like check_email_domain, and no prerequisites stated. An agent can infer the context but must reason about it.

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. 19 tool updatesv0.1.0
    • First observedcapture_screenshot
    • First observedcheck_api_key
    • First observedcheck_email_domain
    • First observedconvert_html_to_markdown
    • First observedconvert_image
    • First observedgenerate_barcode
    • First observedgenerate_qr_code
    • First observedgenerate_social_image
    • First observedget_drive_download_link
    • First observedinspect_image
    • First observedinspect_ssl_certificate
    • First observedlookup_dns
    • First observedlookup_whois
    • First observedpreview_link
    • First observedread_qr_code
    • First observedread_webpage
    • First observedrender_html
    • First observedtranslate_text
    • First observedverify_emails

TDQS

A3.7/5.0

Scored across 19 tools

Disambiguation4/5

Each tool targets a clearly distinct operation (QR, DNS, SSL, WHOIS, email, web rendering, image processing, translation). The only mild overlap is among web-content tools (read_webpage, preview_link, capture_screenshot, render_html), but their descriptions clearly differentiate fetching text, metadata, visual capture, and rendering provided HTML.

Naming Consistency5/5

All 19 tools use snake_case with a leading verb (read_, lookup_, inspect_, check_, verify_, generate_, capture_, render_, convert_, preview_, translate_, get_), creating a highly predictable pattern. No mixing of conventions.

Tool Count3/5

19 tools is on the heavy side for a single MCP server; the rubric treats 16–25 as borderline. Each tool is distinct, but the broad utility scope means the set could feel large to an agent.

Completeness4/5

The surface covers many common web utilities well: QR/barcode generation and reading, image conversion/inspection, web rendering/screenshots, DNS/SSL/WHOIS lookups, email checks, translation, and Drive link conversion. Minor gaps include OCR beyond QR, PDF-to-text, URL expansion/shortening, or text summarization, but core utilities are present.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    C
    maintenance
    Enables AI assistants to capture webpage screenshots, generate PDFs from URLs or HTML, and extract rich metadata like Open Graph and JSON-LD data. It provides tools for web-to-image/PDF conversion and structured data extraction through the Junipr API.
    14 npm
    1
    MIT
  • A
    license
    Not graded
    quality
    B
    maintenance
    Enables AI agents to read, screenshot, or convert web pages to PDF using a real headless browser, turning any URL into clean Markdown, a visual image, or a print-ready document.
    82 npm
    MIT
  • A
    license
    A
    quality
    B
    maintenance
    Enables AI agents to read RSS/Atom feeds, extract web page content as text or Markdown, search the web, and batch-fetch multiple URLs without building custom crawlers.
    5
    MIT
  • A
    license
    A
    quality
    A
    maintenance
    Enables AI assistants to fetch and process web content securely, including HTML-to-markdown conversion, reader mode, metadata extraction, RSS/sitemap parsing, and robots.txt-aware requests with SSRF protection.
    15
    506 npm
    2
    MIT