Skip to main content
Glama

ReadFetch

readfetch_section

Read-only

Extract one heading or one CSS selector from a public page instead of the whole document. Returns matched Markdown or text, title, chars, content_sha256, and billed. If the heading is missing, returns HTTP 200 with empty text and available_headings so you can retry. mode: fast (plain HTTP) or render (default, Chromium when the page blocks HTTP). max_chars truncates output (default 8000, max 20000). Prefer readfetch_text for full articles; readfetch_scrape when content needs JavaScript.

Input Schema

NameRequiredDescriptionDefault
urlYesPublic page URL to extract from.
modeNofast = HTTP-first; render = one browser pass when plain HTTP fails (default).render
formatNoOutput flavour for the matched section (markdown default).markdown
headingNoHeading text to match (case-insensitive, whitespace-normalised). Required unless `selector` is set — send exactly one of `heading` or `selector`, not both.
selectorNoCSS selector; up to 20 matches concatenated. Required unless `heading` is set — use selector when the section has no stable heading text.
max_charsNoTruncate matched text after this many characters.

Output Schema

NameRequiredDescriptionDefault
urlNo
hintNo
textNo
charsNo
titleNo
billedNo
statusNo
matchedNo
status_codeNo
used_browserNo
content_sha256No
available_headingsNo

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed1 schema field changed
    • changedOutput schema / properties / hint / type
      Previous value: -"null"New value: +[
      +  "string",
      +  "null"
      +]
  2. Changed2 schema fields changed
    • changedInput schema / properties / heading / description
      Previous value: -"Case-insensitive, whitespace-normalised."New value: +"Heading text to match (case-insensitive, whitespace-normalised). Required unless `selector` is set — send exactly one of `heading` or `selector`, not both."
    • changedInput schema / properties / selector / description
      Previous value: -"CSS selector; up to 20 matches concatenated."New value: +"CSS selector; up to 20 matches concatenated. Required unless `heading` is set — use selector when the section has no stable heading text."
  3. Changed5 schema fields changed
    • addedInput schema / properties / format / description
      Added value: +"Output flavour for the matched section (markdown default)."
    • addedInput schema / properties / max_chars / description
      Added value: +"Truncate matched text after this many characters."
    • addedInput schema / properties / mode / description
      Added value: +"fast = HTTP-first; render = one browser pass when plain HTTP fails (default)."
    • addedInput schema / properties / url / description
      Added value: +"Public page URL to extract from."
    • changedOutput schema / (root)
      Previous value: -nullNew value: +{
      +  "properties": {
      +    "available_headings": {
      +      "items": {
      +        "type": "string"
      +      },
      +      "type": "array"
      +    },
      +    "billed": {
      +      "type": "boolean"
      +    },
      +    "chars": {
      +      "type": "integer"
      +    },
      +    "content_sha256": {
      +      "type": "string"
      +    },
      +    "hint": {
      +      "type": "null"
      +    },
      +    "matched": {
      +      "properties": {
      +        "kind": {
      +          "type": "string"
      +        },
      +        "label": {
      +          "type": "string"
      +        },
      +        "level": {
      +          "type": "integer"
      +        }
      +      },
      +      "type": "object"
      +    },
      +    "status": {
      +      "type": "string"
      +    },
      +    "status_code": {
      +      "type": "integer"
      +    },
      +    "text": {
      +      "type": "string"
      +    },
      +    "title": {
      +      "type": "string"
      +    },
      +    "url": {
      +      "format": "uri",
      +      "type": "string"
      +    },
      +    "used_browser": {
      +      "type": "boolean"
      +    }
      +  },
      +  "type": "object"
      +}
  4. Changed1 schema field changed
    • removedInput schema / properties / egress
      Removed value: -{
      -  "description": "Exit to leave through: `direct` (this service's own datacentre egress) or `residential` (a residential address pool, for targets that refuse datacentre addresses). Omit to use the default route.",
      -  "title": "Egress",
      -  "type": "string"
      -}
  5. First observed

TDQS

A4.4/5.0
Behavior4/5

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

Annotations only cover readOnlyHint and openWorldHint; the description adds genuinely non-obvious behavior — a missing heading still returns HTTP 200 with empty text plus `available_headings` for retry, and `render` uses Chromium when HTTP is blocked. The enumeration of return fields (chars, content_sha256, billed) is somewhat redundant given an output schema exists, which keeps it off 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?

Densely front-loaded: purpose and the sibling alternatives lead, then fallback behavior, then parameter notes. The one wasteful stretch is the list of return fields, which duplicates the output schema, but no sentence is otherwise padding.

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 read-only, single-section extraction tool with a full output schema, everything an agent needs is present: selection mode, truncation, HTTP-fallback semantics, and how it fits among the other readfetch tools. Nothing material is left to inference.

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%, so the baseline is 3. The description restates the `mode` defaults and `max_chars` bounds (default 8000, max 20000) already documented in the schema, adding only the minor detail that render mode uses Chromium; the heading-vs-selector mutual exclusivity is already in the schema descriptions.

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 precise verb and resource ('Extract one heading or one CSS selector from a public page') and immediately scopes it against the whole-document case. An agent can distinguish it from readfetch_text and readfetch_scrape without opening any schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly names both alternatives and the condition that selects each: 'Prefer readfetch_text for full articles; readfetch_scrape when content needs JavaScript.' It also frames the tool itself as the narrow-section option, so the routing decision is fully specified.

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.

Resources