Skip to main content
Glama

ReadFetch

readfetch_fetch

Read-only

Send an HTTP request (GET, POST, PUT, PATCH, DELETE, HEAD) through egress and return status_code, response headers, and body as text or base64 (binary: true). max_bytes caps the stored body; follow_redirects (default true) and timeout_s (95 s ceiling) apply to the full redirect chain. Use json_body for JSON POST/PUT payloads; use body for raw bytes or strings. Prefer readfetch_text for readable HTML articles; readfetch_pdf to extract PDF text (not raw bytes alone). POST/PUT/DELETE can change remote state despite readOnlyHint.

Input Schema

NameRequiredDescriptionDefault
urlYesRequest URL (http or https).
bodyNoRaw request body string for POST/PUT/PATCH (mutually exclusive with json_body).
binaryNoWhen true, return body as base64 instead of UTF-8 text.
methodNoHTTP method (GET default).GET
headersNoOptional request headers, e.g. Authorization or Accept.
json_bodyNoJSON object serialized as the request body (Content-Type application/json).
max_bytesNoStop reading and truncate once the response body exceeds this size (bytes).
timeout_sNoTotal budget for the whole call in seconds, redirect hops included.
follow_redirectsNoFollow 3xx redirects (default true).

Output Schema

NameRequiredDescriptionDefault
urlNo
sizeNo
textNo
statusNo
status_codeNo
content_typeNo

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed9 schema fields changed
    • addedInput schema / properties / binary / description
      Added value: +"When true, return body as base64 instead of UTF-8 text."
    • addedInput schema / properties / body / description
      Added value: +"Raw request body string for POST/PUT/PATCH (mutually exclusive with json_body)."
    • addedInput schema / properties / follow_redirects / description
      Added value: +"Follow 3xx redirects (default true)."
    • addedInput schema / properties / headers / description
      Added value: +"Optional request headers, e.g. Authorization or Accept."
    • addedInput schema / properties / json_body / description
      Added value: +"JSON object serialized as the request body (Content-Type application/json)."
    • addedInput schema / properties / max_bytes / description
      Added value: +"Stop reading and truncate once the response body exceeds this size (bytes)."
    • addedInput schema / properties / method / description
      Added value: +"HTTP method (GET default)."
    • addedInput schema / properties / url / description
      Added value: +"Request URL (http or https)."
    • changedOutput schema / (root)
      Previous value: -nullNew value: +{
      +  "properties": {
      +    "content_type": {
      +      "type": "string"
      +    },
      +    "size": {
      +      "type": "integer"
      +    },
      +    "status": {
      +      "type": "string"
      +    },
      +    "status_code": {
      +      "type": "integer"
      +    },
      +    "text": {
      +      "type": "string"
      +    },
      +    "url": {
      +      "format": "uri",
      +      "type": "string"
      +    }
      +  },
      +  "type": "object"
      +}
  2. Changed2 schema fields 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"
      -}
    • removedInput schema / properties / egress_fallback
      Removed value: -{
      -  "description": "Pool to retry through once when the first attempt is refused (bot check, wall, empty extraction, origin 403/429/5xx); must differ from `egress`. Absent keeps one exit for the whole call.",
      -  "title": "Egress Fallback",
      -  "type": "string"
      -}
  3. First observed

TDQS

A4.1/5.0
Behavior1/5

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

Although the description adds useful behavioral detail such as redirect-chain scope, max_bytes truncation, and timeout ceiling, its final sentence explicitly says POST/PUT/DELETE can change remote state despite readOnlyHint. That directly contradicts the readOnlyHint=true annotation, so the rubric requires a score of 1 despite the otherwise strong disclosure.

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?

The description is dense but front-loaded, first stating the operation and return values before covering limits, redirect behavior, body choices, alternatives, and the mutation caveat. Every sentence carries actionable information.

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?

Given the output schema exists, the description need not explain return values, but it still summarizes them. It covers methods, body encoding, size limits, redirect behavior, timeout, alternatives, and the write-risk caveat, making it complete enough for an agent to invoke correctly.

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 adds useful synthesis beyond the schema: binary mode returns base64, max_bytes caps the stored body, follow_redirects and timeout_s apply across the redirect chain, and json_body versus body controls payload encoding.

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: sends an HTTP request with enumerated methods and returns status_code, response headers, and body. It clearly distinguishes the tool from readfetch_text and readfetch_pdf by naming those alternatives for HTML and PDF extraction.

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?

It gives explicit routing guidance: prefer readfetch_text for readable HTML articles and readfetch_pdf for PDF text extraction. It also explains when to use json_body versus body for request payloads, which directly affects invocation choice.

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