Token-lean web content fetcher for LLMs — distills pages to clean Markdown. Exposes the distillation pipeline as MCP tools so Claude Code can fetch web content natively, without raw HTML ever entering the conversation.
RustBrowser defines 8 tools with comprehensive input schemas and descriptions. All tools have detailed parameter documentation (avg 72 chars per param, exceeding baseline). Naming follows verb_noun convention (fetch, session_*). Schemas are well-typed with enums and constraints. However, output schemas are not explicitly documented in the source, only inferred from code. Error handling lacks recovery guidance (no 'try X instead' patterns). Session-based tools lack idempotency guarantees. No tool annotations (readOnlyHint, destructiveHint) despite clear risk profiles.
Fetch and distill a single URL to clean Markdown, text, or JSON. Optionally extract links, tables, and actions.
Fetch and distill multiple URLs concurrently. Returns an array of results, one per URL, preserving input order.
Click a link or button within the current page snapshot (identified by action_id).
Close a live browsing session and free its resources.
Navigate to a new URL within an existing session.
Open a new live browsing session. Returns a session_id for use in subsequent session_* calls.
Submit a form within the current page snapshot (identified by action_id). Non-GET submissions require explicit confirmation.
Output schemas not documented. Tool descriptions state what is returned (e.g., 'snapshot, redirect history, action tree') but formal JSON Schema output types are absent from visible code. LLMs cannot plan downstream operations without knowing response field names and types.
No tool annotations (readOnlyHint, destructiveHint, idempotentHint). session_submit_form is marked WRITE and session_close is REVERSIBLE in metadata, but these hints are not exposed in the MCP tool schema. Agents cannot infer safety properties from the tool definition alone.
Error handling lacks recovery guidance. No tool description includes 'If X fails, try Y instead' or categorizes errors as retryable vs. user-fixable. Agents cannot self-correct on failure.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 62 | 2026-07-28+ | v2 |
Get the current state of a live browsing session (snapshot, redirect history, action tree).
Session tools lack idempotency guarantees. session_click and session_navigate do not document whether repeated calls with identical parameters produce the same result. Agents retrying on ambiguous failures risk duplicate side effects.
session_submit_form 'confirm' parameter defaults to false for non-GET forms. This is a dangerous default, agents may accidentally submit destructive forms without explicit confirmation. Default should require explicit opt-in for non-GET submissions.