FastMCP server exposing pyfetcher capabilities for fetching URLs, scraping content, generating browser headers, extracting articles, and downloading files
14 tools with complete schemas and descriptions, but quality is uneven. Most descriptions are adequate (50-150 chars) and parameters are typed. However, many descriptions lack actionable context for LLM selection (e.g., when to use scrape_css vs scrape_text). No error handling guidance, no output schema documentation, and no tool annotations (readOnlyHint/destructiveHint). The download_file tool is marked WRITE but lacks confirmation/dry-run pattern. Parameter descriptions are present but often generic ('Browser profile for headers' without explaining what profiles do or when to switch). No pagination support on multi-result tools. Baseline: 549 production tools average 194 chars per description; these average ~90 chars, suggesting room for richer context.
Download a file from a URL and save it to a local path.
Fetch a URL and extract the main article text using trafilatura with readability fallback.
Fetch multiple URLs concurrently and return all results.
Fetch a URL and return the response with status, headers, and body text.
Generate realistic browser headers for a given profile.
Fetch and parse robots.txt from a domain.
Fetch and parse sitemap.xml from a domain.
List all available browser profiles for header generation.
No output schema documentation. LLMs cannot plan downstream calls or extract fields without knowing response structure. E.g., scrape_links returns LinkInfo objects but no schema is documented.
Scraping tools lack disambiguation guidance. LLMs cannot distinguish when to use scrape_css vs scrape_text vs extract_article. Descriptions should explain: scrape_css for structured data, scrape_text for readable content, extract_article for news/blog posts.
download_file (WRITE operation) lacks confirmation/dry-run pattern. Agents can accidentally overwrite files or download to unintended paths without safeguards. No error guidance for permission/disk-space failures.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 57 | 2026-07-28+ | v2 |
Fetch a URL and extract text content matching a CSS selector.
Fetch a URL and extract all HTML forms with their fields.
Fetch a URL and extract all links with internal/external classification.
Fetch a URL and extract page metadata (title, description, Open Graph, favicons).
Fetch a URL and extract table data as structured rows and columns.
Fetch a URL and extract the readable text content (strips scripts, nav, etc.).
No tool annotations (readOnlyHint, destructiveHint, idempotentHint). Agents cannot distinguish safe tools from risky ones. download_file should be marked destructiveHint=true; fetch_* should be readOnlyHint=true.
Parameter descriptions are generic. 'Browser profile for headers' does not explain what profiles are available, when to switch, or how they affect results. Baseline: 72 chars per param; these average ~50 chars.