Skip to main content
Glama

Read web page

read_page
Read-only

Read a web page as clean text or Markdown, WITH JavaScript executed. Use this when a plain fetch returns an empty shell or a loading spinner: single page apps, dashboards, docs sites and anything client-side rendered only produce their content after scripts run. Returns title, description, readable content and links, with navigation and cookie banners stripped. Free demo: 3 reads/day. With a free ToolForte API key (Authorization: Bearer tf_..., get one at https://toolforte.com/developers): 50 reads/month, then 1 credit per read.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
urlYesPublic http(s) URL to read
formatNomarkdown keeps headings and lists; text is plainmarkdown
maxCharsNoTruncate the content at this many characters

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault
urlNoHosted download URL of the produced file
linksNoLinks found in the main content
titleNoPage title
formatNo
resultNoThe result, when it is not an object
contentNoReadable content of the page
finalUrlNo
meteringNoWhat this call cost and what allowance remains
truncatedNoWhether the content was cut at the size limit
charactersNo
descriptionNo

Schema Changelog

Changes observed during successful MCP inspections. Dates show when Glama detected each change.

  1. Changed1 schema field changed
    • changedOutput schema / (root)
      Previous value: -nullNew value: +{
      +  "$schema": "https://json-schema.org/draft/2020-12/schema",
      +  "additionalProperties": {},
      +  "properties": {
      +    "characters": {
      +      "type": "number"
      +    },
      +    "content": {
      +      "description": "Readable content of the page",
      +      "type": "string"
      +    },
      +    "description": {
      +      "type": "string"
      +    },
      +    "finalUrl": {
      +      "type": "string"
      +    },
      +    "format": {
      +      "type": "string"
      +    },
      +    "links": {
      +      "description": "Links found in the main content",
      +      "items": {},
      +      "type": "array"
      +    },
      +    "metering": {
      +      "additionalProperties": {},
      +      "description": "What this call cost and what allowance remains",
      +      "properties": {
      +        "remaining": {
      +          "type": "number"
      +        },
      +        "source": {
      +          "type": "string"
      +        }
      +      },
      +      "type": "object"
      +    },
      +    "result": {
      +      "description": "The result, when it is not an object"
      +    },
      +    "title": {
      +      "description": "Page title",
      +      "type": "string"
      +    },
      +    "truncated": {
      +      "description": "Whether the content was cut at the size limit",
      +      "type": "boolean"
      +    },
      +    "url": {
      +      "description": "Hosted download URL of the produced file",
      +      "type": "string"
      +    }
      +  },
      +  "type": "object"
      +}
  2. First observed

TDQS

A4.4/5.0
Behavior5/5

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

Annotations already mark this as read-only and non-destructive, and the description adds valuable behavioral context: JavaScript is executed, navigation/cookie banners are stripped, and output includes title, description, content, and links. It also discloses rate limits and authentication requirements, which are beyond the annotations. There is no contradiction between description and 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?

The description is reasonably concise with the core purpose and key differentiator front-loaded. The usage guidance, output summary, and rate-limit information all earn their place, though the API-key and pricing details could be considered slightly extraneous. It remains structured and readable without being verbose.

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?

An output schema exists, so return values are covered. The description covers when to use, how it behaves differently from plain fetches, what output users can expect, and includes authentication/rate-limit details. For a tool with three simple parameters, this is fully sufficient for an agent to select and invoke it correctly.

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 url, format, and maxChars well. The description does not add significant new meaning for parameters beyond what the schema provides. It mentions clean text vs. Markdown, but the schema already explains the format enum values, so the 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 states a specific verb and resource: reads a web page as clean text or Markdown, with JavaScript execution. It distinguishes itself from plain fetch and sibling URL tools by highlighting the JS execution and clean output. The mention of 'clean text or Markdown' also differentiates it from screenshot/PDF tools among the siblings.

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 gives an explicit condition for use: when a plain fetch returns an empty shell or loading spinner, particularly for client-side rendered sites. It clearly explains the context but does not explicitly mention when not to use it or name alternatives like url_screenshot or url_to_pdf. This earns a 4 rather than a 5.

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.

TDQS

A3.8/5.0
Disambiguation5/5

Every tool targets a distinct resource or action, and the detailed descriptions clearly separate near neighbors like generate_test_bsn versus generate_brp_test_data, read_page versus url_screenshot versus url_to_pdf, and image_compress/convert/resize. Even with 40 tools, there is no real boundary-blurring overlap.

Naming Consistency3/5

All names are snake_case and readable, but the set mixes conventions: verb_noun (generate_*, validate_*), noun_verb (pdf_merge, image_resize), conversion-style names (csv_to_json, html_to_pdf), and bare nouns (base64, qr_code_png). The groups are recognizable, but there is no single predictable pattern.

Tool Count2/5

Forty tools is an oversized surface for an agent to consider on every call, well above the point where tool selection cost starts to hurt. The broad purpose explains the count, but many one-off utilities could be grouped or exposed selectively.

Completeness3/5

The server covers many domains—encoding, Dutch test data, image/PDF handling, memory, and workflows—but several categories are partial: there are no reverse conversions like json_to_csv or html_to_markdown, no PDF text extraction, and no workflow create/update/delete tools. Agents can work around some gaps, but notable operations are missing.

Resources