Skip to main content
Glama
lmcc-dev

mult-fetch-mcp-server

by lmcc-dev

fetch

Retrieve an http(s) URL and return its content as Markdown, HTML, plaintext, JSON, or raw text, with readable-article extraction and continuation cursors for truncated responses.

Instructions

Fetch an http(s) URL and return its content in one response. Use this to read a web page or a JSON/text URL. Default format is markdown with readable-article extraction. Do not send startCursor. Parameters that matter: url (required on the first call), format (html | markdown | plaintext | json | txt, default markdown). Optional: maxChars (default 100000), maxBytes (default 1048576), timeout (default 30000). If the response is truncated it includes nextCursor and chunkId; call fetch again with that cursor to continue. Private, loopback, and link-local targets are blocked. Browser rendering is off unless useBrowser or autoDetectMode is true.

Input Schema

NameRequiredDescriptionDefault
urlYesAbsolute http(s) URL to fetch. Required on the first call. Optional when cursor or chunkId continues a truncated response.
debugNoWrite debug logs to stderr. Default: false. Do not enable unless the user asked for diagnostics.
proxyNoOptional proxy URL (http://host:port or https://host:port).
cursorNoContinuation token from a previous truncated response (nextCursor). Omit on the first call. When set, the server returns the next slice and does not refetch the URL.
formatNoOutput format. markdown (default) and plaintext extract readable content over HTTP. html returns markup. json expects a JSON document. txt returns the raw body.
chunkIdNoLegacy or document id. Prefer cursor. With a 1.x byte chunk, also pass startCursor.
headersNoOptional request headers as a string-to-string map.
noDelayNoSkip the random delay between redirects. Default: false.
timeoutNoRequest timeout in milliseconds. Default: 30000.
maxBytesNoMaximum UTF-8 bytes to return in this response. Default: 1048576. Used together with maxChars; the smaller budget wins.
maxCharsNoMaximum characters to return in this response. Default: 100000. The cut prefers a newline or space. Omit this on a normal fetch.
useBrowserNoUse the optional headless browser. Default: false. Requires puppeteer to be installed. Leave false for normal HTTP fetches.
saveCookiesNoKeep cookies for the same site across browser-mode calls. Default: true.
startCursorNoLegacy byte offset used only with chunkId from a 1.x split. Not required. Do not send this for a normal fetch or for a cursor continuation.
closeBrowserNoClose the browser after this call. Default: false.
maxRedirectsNoMaximum redirects to follow. Default: 10. Each redirect is checked for SSRF.
autoDetectModeNoRetry with the browser after an HTTP 403 or challenge page. Default: false. Set true only when the HTTP fetch is blocked and puppeteer is installed.
extractContentNoExtract the main article with Readability before converting. Default: true for markdown and plaintext, false for html, json, and txt.
scrollToBottomNoScroll to the bottom before reading the page in browser mode. Default: false.
useSystemProxyNoUse HTTP_PROXY / HTTPS_PROXY / NO_PROXY when no proxy argument is set. Default: true.
waitForTimeoutNoExtra wait after load in browser mode, in milliseconds. Default: 5000.
includeMetadataNoInclude title, byline, and site name when extractContent is true. Default: true.
waitForSelectorNoCSS selector to wait for in browser mode.
contentSizeLimitNoLegacy byte chunk size. When set without maxChars/maxBytes, the 1.x byte splitter is used. Prefer maxChars.
fallbackToOriginalNoIf Readability finds no article, convert the original document. Default: true.
enableContentSplittingNoWhen false, oversized content is truncated with no continuation cursor. Default: true.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Addedv2.0.0

TDQS

A3.8/5.0
Behavior4/5

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

With no annotations, the description carries the full burden and does substantial work: it discloses truncation semantics (nextCursor/chunkId returned on truncation, re-call with the cursor), an SSRF safety boundary ('Private, loopback, and link-local targets are blocked'), the default-off browser rendering, and the default extraction mode. It does not mention rate limiting, retry behavior on non-403 failures, or what the response envelope looks like beyond 'content', which keeps it from 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.

Conciseness4/5

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

Front-loaded with purpose and default behavior before parameters, which is the right order for an agent skimming. It is dense but every clause is functional; the only waste is mild duplication between 'Default format is markdown' and the later 'format (... default markdown)' enumeration.

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 26-parameter tool with no annotations and no output schema, the description covers the main fetch path, pagination continuation, safety blocking, and the browser-mode toggle, which is enough to call it correctly on a normal request. The notable gaps are the relationship to the five format-specific siblings and any description of the response envelope beyond raw content, both of which an agent would have to discover by trial.

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 baseline is 3 and the schema already documents every one of the 26 properties. The description earns extra credit by triaging that surface for the agent ('Parameters that matter: url ... format ...', then optional maxChars/maxBytes/timeout with defaults) and by flagging the cursor continuation protocol as the alternative to url. It still repeats defaults that the schema already states verbatim, so it stops short of 5.

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 first sentence gives a specific verb and resource ('Fetch an http(s) URL') plus the output contract ('return its content in one response'), and the second sentence names the concrete use case (read a web page or a JSON/text URL). It never mentions the format-specific siblings (fetch_html, fetch_json, fetch_txt, fetch_markdown, fetch_plaintext), so an agent cannot tell from the description alone why it should call this multiplexed tool instead of one of 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 context is implied rather than stated: 'Use this to read a web page or a JSON/text URL' covers the general case, and 'Do not send startCursor' plus 'Browser rendering is off unless useBrowser or autoDetectMode is true' give two explicit exclusions. There is no guidance on when to prefer this tool over the five sibling fetchers, and no prerequisites (auth, proxy setup) are described, leaving the routing decision to inference.

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