Skip to main content
Glama

Fetch Page

fetch_page
Read-onlyIdempotent

Retrieve public web pages as Markdown, plain text, or HTML while blocking private/internal addresses; use browser mode to capture JavaScript-rendered content.

Instructions

Fetch a public web page and return it as markdown, plain text or HTML. Private/internal addresses are blocked. Use method=browser for JavaScript-rendered pages.

Input Schema

NameRequiredDescriptionDefault
urlYesURL of the webpage to fetch (http/https only)
formatNoResponse formatmarkdown
methodNohttp (fast) or browser (renders JavaScript)
timeoutNoTimeout in milliseconds (1000-120000)
maxLengthNoMax characters of content to return (default 20000); use nextStartIndex to read the rest
startIndexNoCharacter offset to start from (for reading long pages in segments; default 0)
waitForSelectorNoBrowser only: CSS selector to wait for before extracting

Output Schema

NameRequiredDescriptionDefault
urlYes
titleNo
cachedNo
contentYes
rawHtmlNo
warningsNo
fetchTimeYes
fetchedByNo
truncatedNo
statusCodeYes
contentTypeNo
totalLengthNo
bodyTruncatedNo
contentLengthNo
nextStartIndexNo

Schema Changelog

Changes observed during successful MCP inspections.

  1. First observedv0.1.0

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already declare this is a safe, idempotent, open-world read, so the bar is lower. The description still adds real value beyond them: the SSRF guard on private/internal addresses and the JS-rendering trade-off for method=browser. It does not cover redirect/auth behavior, rate limits, or truncation semantics for long pages.

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, each with a distinct job: what it does, what is blocked, which mode to pick. The capability statement is front-loaded and nothing is repeated from the schema.

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?

Output schema and full param coverage exist, so return values and parameters need no explanation here. The description leaves minor gaps around long-page truncation and failure behavior, though those are partly addressed in the schema's startIndex/maxLength notes.

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?

With 100% schema coverage, the schema already documents all seven parameters, so the baseline would be 3. The description earns an extra point by telling the agent when to pick browser over http (JavaScript-rendered pages), which is the one decision the schema enum alone leaves ambiguous.

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 (fetch) and resource (public web page) plus the return representations (markdown, text, HTML). This is unmistakably distinct from the sibling search tools (web_search, image_search, wechat_search, list_engines), which retrieve links rather than page content.

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?

'Use method=browser for JavaScript-rendered pages' gives concrete selection guidance for the one ambiguous mode choice, and 'Private/internal addresses are blocked' sets a clear scope boundary. It stops short of explicit routing against siblings (e.g., 'call web_search first to discover URLs'), so no exclusions are named.

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