Skip to main content
Glama

Read the text of one node

browser_text
Read-onlyIdempotent

Read visible text of ONE node or section by id, or its href when source:href is explicit, with a bounded character budget (maxChars defaults to 600, maximum 12000).

Instructions

Read visible text of ONE node or section by id, or its href when source:href is explicit, with a bounded character budget (maxChars defaults to 600, maximum 12000). Returns text, textSource, capturedAt (first-read timestamp), totalChars, returnedChars, offset, nextOffset, truncated, observationId and continuation in structuredContent. Pass a non-null continuation directly to browser_text for the next slice; it includes sessionId. offset > 0 requires observationId from the initial read. The first read freezes redacted text at capturedAt (not at observation time) so later slices cannot splice a changing document; re-observe and re-find to refresh it. Href recovery also uses frozen bounded slices; embedded data payload recovery is refused while privacy rules are active. Snapshot storage is bounded per observation (1000000 UTF-16 units / 128 nodes); exceeding it returns an explicit error. Continuations fail on expired observations, detached ids, navigation or privacy-policy changes. Offsets count JavaScript UTF-16 code units. A cut value must be continued, not recorded as complete; the prose also marks truncation.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
idYes
offsetNoInteger start offset; default 0. Positive offsets require observationId and an initial read.
sourceNoRead visible text (default), or explicitly recover a link destination in bounded slices.
maxCharsNoInteger characters per slice, 1–12000; default 600.
sessionIdNooptional: the session this call belongs to (from browser_session_open). Omitted uses the shared default session.
observationIdNoObservation owning the initial text read; required when offset > 0.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed1 schema field changed
    • addedInput schema / properties / source
      Added value: +{
      +  "description": "Read visible text (default), or explicitly recover a link destination in bounded slices.",
      +  "enum": [
      +    "text",
      +    "href"
      +  ],
      +  "type": "string"
      +}
  2. Changed3 schema fields changedv0.1.2
    • addedInput schema / properties / maxChars
      Added value: +{
      +  "description": "Integer characters per slice, 1–12000; default 600.",
      +  "maximum": 12000,
      +  "minimum": 1,
      +  "type": "number"
      +}
    • addedInput schema / properties / observationId
      Added value: +{
      +  "description": "Observation owning the initial text read; required when offset > 0.",
      +  "type": "string"
      +}
    • addedInput schema / properties / offset
      Added value: +{
      +  "description": "Integer start offset; default 0. Positive offsets require observationId and an initial read.",
      +  "minimum": 0,
      +  "type": "number"
      +}
  3. First observedv0.1.1

TDQS

A4.4/5.0
Behavior5/5

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

Annotations already cover the safety profile (readOnly, idempotent, non-destructive), and the description adds substantial extra context: frozen redacted text at capturedAt, continuation failure modes on expired/detached/navigated observations, privacy-refused payload recovery, storage bounds with explicit error, and UTF-16 offset accounting. This is well beyond what the annotations convey.

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-loads the core purpose and then layers constraints in dense but information-bearing sentences; little is pure filler. It is somewhat run-on and repeats continuation semantics, keeping it from a perfect score, but each clause earns its place.

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?

With no output schema present, the description enumerates the return fields (text, textSource, capturedAt, totalChars, returnedChars, offset, nextOffset, truncated, observationId, continuation) and explains continuation behavior, truncation marking, and error conditions. An agent has everything needed to invoke and iterate correctly.

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 already 83%, so the schema documents most parameters (offset, source, maxChars, sessionId, observationId). The description largely restates these (default 600, max 12000, offset>0 needs observationId) rather than adding much syntax or format detail the schema lacks, so baseline 3 is appropriate.

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 (read) and resource (visible text of ONE node or section) and scopes it tightly to a single node by id, plus the source:href variant. The 'ONE node' framing implicitly separates it from whole-page siblings like browser_page, letting an agent distinguish it 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 Guidelines4/5

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

Provides strong operational context for when continuations apply, when offset>0 is valid, and when a re-observe/re-find is required. However it never explicitly names an alternative tool for fetching broader content, so routing vs siblings like browser_page is implied rather than stated.

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