Skip to main content
Glama

ReadFetch

readfetch_diff

Read-only

Stateless change detection on readable page text (same HTTP-first extraction as readfetch_text): fetch the URL, compare to a hash or prior body you store client-side, return changed/unchanged plus optional line diff. First call with no prior fields returns a baseline hash (see hint). previous_hash alone detects change without a line diff; add previous_content when you need added/removed/diff. A no-change answer is still billable when text was delivered. Prefer readfetch_text when you need the full article once; readfetch_probe (free) for a short preview and content_sha256 before spending on text.

Input Schema

NameRequiredDescriptionDefault
urlYesPublic http(s) page to re-fetch and compare; must match the extraction used when you saved the hash (same `format`).
formatNoExtraction flavour for this fetch and for the hash (default text). Must match how you built `previous_content` if you send it.text
timeout_sNoTotal budget for the whole call in seconds, both fetches included. 60 s is the ceiling on this route.
previous_hashNo`sha256:…` or bare hex from readfetch_diff, readfetch_probe `content_sha256`, or a prior text read. Omit on the first poll to establish a baseline hash in the response.
previous_contentNoFull prior extracted text (what you stored from readfetch_text/readfetch_diff). Required for `added`/`removed`/`diff` output; hash-only compares do not emit a line diff.

Output Schema

NameRequiredDescriptionDefault
urlNo
diffNo
hashNo
hintNo
addedNo
billedNo
statusNo
changedNo
removedNo
status_codeNo

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. Changed4 schema fields changed
    • addedInput schema / properties / format / description
      Added value: +"Extraction flavour for this fetch and for the hash (default text). Must match how you built `previous_content` if you send it."
    • changedInput schema / properties / previous_content / description
      Previous value: -"Previous text, for an added/removed diff."New value: +"Full prior extracted text (what you stored from readfetch_text/readfetch_diff). Required for `added`/`removed`/`diff` output; hash-only compares do not emit a line diff."
    • changedInput schema / properties / previous_hash / description
      Previous value: -"sha256:... from a previous call."New value: +"`sha256:…` or bare hex from readfetch_diff, readfetch_probe `content_sha256`, or a prior text read. Omit on the first poll to establish a baseline hash in the response."
    • addedInput schema / properties / url / description
      Added value: +"Public http(s) page to re-fetch and compare; must match the extraction used when you saved the hash (same `format`)."
  3. Changed1 schema field changed
    • changedOutput schema / (root)
      Previous value: -nullNew value: +{
      +  "properties": {
      +    "added": {
      +      "items": {
      +        "type": "string"
      +      },
      +      "type": "array"
      +    },
      +    "billed": {
      +      "type": "boolean"
      +    },
      +    "changed": {
      +      "type": "boolean"
      +    },
      +    "diff": {
      +      "type": "string"
      +    },
      +    "hash": {
      +      "type": "string"
      +    },
      +    "hint": {
      +      "type": "null"
      +    },
      +    "removed": {
      +      "items": {
      +        "type": "string"
      +      },
      +      "type": "array"
      +    },
      +    "status": {
      +      "type": "string"
      +    },
      +    "status_code": {
      +      "type": "integer"
      +    },
      +    "url": {
      +      "format": "uri",
      +      "type": "string"
      +    }
      +  },
      +  "type": "object"
      +}
  4. Changed3 schema fields changed
    • addedInput schema / properties / timeout_s / default
      Added value: +30
    • addedInput schema / properties / timeout_s / description
      Added value: +"Total budget for the whole call in seconds, both fetches included. 60 s is the ceiling on this route."
    • changedInput schema / properties / timeout_s / maximum
      Previous value: -120New value: +60
  5. 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"
      -}
  6. First observed

TDQS

A4.8/5.0
Behavior5/5

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

Annotations only declare readOnlyHint and openWorldHint; the description adds the non-obvious traits: statelessness with client-side hash/content storage, the billing rule that a no-change answer is still billable when text was delivered, the 60 s ceiling, and the requirement that extraction format match the stored hash. That is real context an agent cannot get from the annotation block.

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 the core mechanism, then baselines, then routing to alternatives — a logical order. It is a dense single block with mild overlap between the first sentence and the hash/diff sentence, so it is efficient but slightly heavier than necessary.

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 need no explanation; the description still covers everything an agent must know to call this correctly — baseline establishment, hash vs content, format matching, timeout budget, and cost behavior. Nothing material is missing for a 5-parameter, stateless tool.

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; the description earns more by explaining the interaction between parameters — hash-only compares emit no line diff, and `previous_content` is what enables `added`/`removed`/`diff`, and `format` must match how `previous_content` was built. That is cross-parameter semantics the schema does not spell out.

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 and resource — 'stateless change detection on readable page text' — plus exactly what it returns (changed/unchanged plus optional line diff). It also names the extraction parity with readfetch_text, so an agent can tell it apart from plain fetch siblings without opening the 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?

Gives explicit when-to-use rules: first call with no prior fields establishes a baseline, `previous_hash` alone for change detection, add `previous_content` only when a line diff is needed. It also routes to alternatives by condition — readfetch_text for a one-shot full read, readfetch_probe (free) for a preview and `content_sha256` before spending.

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