MCP server running on Cloudflare Workers that provides web scraping, search, and content extraction tools
8 tools with complete input schemas and descriptions. Naming follows verb_noun pattern (web_search, web_fetch_*). Descriptions are detailed (100-250 chars) and explain WHEN to use each tool. All parameters have types and descriptions. However, output schemas are not documented in the source code, only input schemas are visible. Tool descriptions could be more concise (some exceed 200 chars). No error handling guidance visible. No parameter constraints (enums, ranges) for numeric params like numResults (max 100) or maxLength (default 50000). Security: all tools are READ_ONLY, which is good, but no explicit permission annotations visible in schema.
Fetch a URL and return its raw HTML. Use for page structure inspection or extracting specific elements; prefer web_fetch_markdown or web_fetch_txt for reading content.
Fetch up to 10 URLs via the Exa Contents API and return structured JSON: extracted text, metadata, optional highlights and AI summary. Use when you need the fields programmatically; web_fetch_markdown is better for reading.
Fetch a URL as clean Markdown via Exa's crawler — bypasses rate limits and bot-detection on GitHub, Medium and Cloudflare, and strips nav/ads/boilerplate. Falls back to a direct fetch if Exa is unavailable. The default choice for reading an article or docs page.
Fetch a URL as plain text. HTML is stripped of tags, scripts, styles and page chrome (nav/header/footer/sidebar); non-HTML bodies (JSON, CSV, source, .txt) are returned as-is. Use when you want readable text without Markdown overhead.
Fetch the README (or any file) from a public GitHub repository. Accepts a repo in 'owner/repo' format or a full github.com URL. Optionally specify a branch and a file path. Best for: understanding what a project does, checking its API, reading docs.
Output schemas not documented. LLMs cannot infer what fields each tool returns, forcing them to guess downstream field names and risk broken tool chains.
Numeric parameters lack explicit constraints. numResults (max 100), maxLength (default 50000), and page (default 1) have no min/max bounds in schema, LLMs may pass invalid values.
No error handling guidance visible. If a URL is unreachable or a search returns no results, the tool response does not guide the LLM on recovery steps (retry, try alternative query, etc.).
Inferred effective spec: 2025-06-18+.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 64 | 2025-06-18+ | v2 |
Search for code across millions of public GitHub repositories using grep.app. Returns matching code snippets with file paths and repository names. Best for: finding code examples, implementation patterns, API usage, open-source references.
Search Google using Gemini with grounding enabled. Returns an answer with inline citations and a numbered source list.
Search the web using Exa AI's search API. Returns up to 100 results with optional highlights and summaries.
Tool annotations (readOnlyHint, destructiveHint, idempotentHint) not visible in schema. All tools are READ_ONLY but this is not formally declared in the tool definition.
Descriptions exceed 200 chars for web_fetch_markdown and web_github_search, wasting tokens. Baseline for A+ tools is 50-200 chars. Trim to essential info: what it does, when to use it, key constraints.