Skip to main content
Glama

url_to_markdown

Read-only

Extract page content as clean Markdown. Requires an API key purchased at https://url-pdf.hammbox.com/buy. If this MCP request carries a valid "x-api-key" or "Authorization: Bearer" header, it renders directly and returns a 1-hour download URL; otherwise it returns purchase guidance.

Input Schema

NameRequiredDescriptionDefault
urlYesAbsolute http(s) URL of the page to extract. Required.
widthNoViewport width in px, 320-3840. Default 1280.
heightNoViewport height in px, 240-2160. Default 900.
waitMsNoExtra settle time after load, 0-10000ms. Few dynamics pages need this.
blockAdsNoBlock requests to major ad/analytics domains before rendering. Default false.
darkModeNoRender with prefers-color-scheme: dark. Default false.
timeoutMsNoNavigation timeout in ms, 5000-100000. Default 45000.
waitUntilNoPuppeteer navigation wait condition. Default networkidle2.
keepImagesNoKeep image links in the Markdown output. Default false.
clickSelectorNoCSS selector to click before rendering (expand, dismiss modal, switch tab).
removeSelectorsNoCSS selectors to strip before extraction, e.g. ["nav", ".ads", "footer"].
waitForSelectorNoOptional CSS selector to wait for before rendering.
deviceScaleFactorNoDevice pixel ratio, 0.5-3. Default 1. Set 2 for retina.
hideCookieBannersNoRemove elements that look like cookie consent banners. Default false.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed8 schema fields changed
    • addedInput schema / properties / blockAds
      Added value: +{
      +  "description": "Block requests to major ad/analytics domains before rendering. Default false.",
      +  "type": "boolean"
      +}
    • addedInput schema / properties / clickSelector
      Added value: +{
      +  "description": "CSS selector to click before rendering (expand, dismiss modal, switch tab).",
      +  "type": "string"
      +}
    • addedInput schema / properties / darkMode
      Added value: +{
      +  "description": "Render with prefers-color-scheme: dark. Default false.",
      +  "type": "boolean"
      +}
    • addedInput schema / properties / deviceScaleFactor
      Added value: +{
      +  "description": "Device pixel ratio, 0.5-3. Default 1. Set 2 for retina.",
      +  "type": "number"
      +}
    • addedInput schema / properties / height
      Added value: +{
      +  "description": "Viewport height in px, 240-2160. Default 900.",
      +  "type": "number"
      +}
    • addedInput schema / properties / hideCookieBanners
      Added value: +{
      +  "description": "Remove elements that look like cookie consent banners. Default false.",
      +  "type": "boolean"
      +}
    • addedInput schema / properties / timeoutMs
      Added value: +{
      +  "description": "Navigation timeout in ms, 5000-100000. Default 45000.",
      +  "type": "number"
      +}
    • addedInput schema / properties / width
      Added value: +{
      +  "description": "Viewport width in px, 320-3840. Default 1280.",
      +  "type": "number"
      +}
  2. First observed

TDQS

A3.5/5.0
Behavior4/5

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

Annotations cover the safety profile (readOnly, non-destructive, open-world). The description adds genuinely new behavior: the API-key precondition, the dual branching (render vs. purchase guidance), and the fact that output is a 1-hour download URL that expires. That expiry detail is material and not captured anywhere else.

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?

Three sentences, front-loaded with the purpose before the auth/billing detail. The inline quoting of headers is slightly noise-prone, but nothing is repetitive or padding.

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 purpose, auth prerequisites, and the return artifact (a 1-hour download URL / purchase guidance). The rendering behavior of the many viewport, ad-blocking and cookie options is left to the schema, which documents them fully, so the remaining gap is small.

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, with ranges, defaults and enum values already documented. The description adds no parameter-level meaning, so this sits at the baseline of 3.

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 opening sentence gives a specific verb and resource: 'Extract page content as clean Markdown.' That cleanly separates it from url_to_pdf and url_to_screenshot. However it never explicitly contrasts itself with the closer sibling url_to_extract, so it stops 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?

The description explains the billing/auth gate but gives no guidance on when to choose this tool over url_to_extract, url_to_pdf or url_to_screenshot, nor any prerequisites beyond the API key. An agent gets no alternative-selection signal.

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

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.