An MCP server that fetches URLs from the internet and extracts their contents as markdown, with robots.txt compliance.
Single tool 'fetch' has a well-structured schema with all parameters typed and described, and includes a meaningful tool description. However, it lacks critical production-grade error handling guidance, output schema documentation, and security hardening. The tool accepts user-provided URLs without documented sanitization against SSRF or injection attacks. Error messages are generic ('Error fetching URL') rather than actionable recovery guidance. No pagination or result limiting is documented despite potentially large content responses. The server demonstrates basic correctness but lacks patterns expected of production tools.
Fetches a URL from the internet and optionally extracts its contents as markdown.
No output schema documented. Tool description does not specify the structure of returned content (string only, no field breakdown). LLMs cannot reliably extract structured data from untyped responses.
Error messages lack recovery guidance. Generic catch-all returns 'Error fetching URL: {message}' without actionable next steps.
No rate limiting or SSRF protection documented. Tool accepts arbitrary URLs from LLM without visible sanitization against: (1) internal IP ranges (169.254.x.x, 10.0.0.0/8, 127.0.0.1) that could exfiltrate cloud metadata, (2) repeated calls overwhelming external services, (3) URL injection via prompt manipulation.
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | D | 55 | <=2025-11-25 | v2 |
| 2026-03-09 | F | 41 | - | v1 |
No pagination or result-limiting guidance documented beyond maxLength parameter. Tool fetches entire page content before truncating. For large documents (>10MB), this risks: (1) timeout, (2) OOM, (3) token exhaustion in LLM response processing.
Description lacks context on robots.txt enforcement. User/LLM will not know that 'forbidden by robots.txt' errors are expected or recoverable. Description should state: 'Respects robots.txt, may return blocked-by-robots error for some URLs; this is not a tool error but a site policy.'
No idempotency guarantee stated. Tool has side effects (network calls, logging). If LLM retries on timeout, URL is fetched twice, incurring redundant bandwidth and potentially triggering rate limits on target.