MCP Server for scraping webpages and converting to markdown
Single tool with well-defined schema and reasonable descriptions, but missing critical output documentation, error guidance patterns, and composition considerations. The tool is properly registered with Zod validation, has a verb-based name, and each parameter has type and description. However, the response structure is undocumented for LLMs, error messages lack recovery guidance, and the tool lacks idempotence guarantees crucial for agent retry patterns.
Scrapes a webpage and converts it to markdown format
Output schema not documented for LLMs. Tool returns a ToolResponse object with content, _meta, and isError fields, but there is no schema definition or description explaining what fields the LLM should expect or how to use them. LLMs cannot plan downstream calls or extract structured data without knowing the response contract.
Error responses lack recovery guidance. Errors are returned as plain strings ('Error scraping webpage: <message>') without categorization (retryable, user-fixable, fatal) or actionable suggestions. An LLM receiving 'Error: timeout' has no guidance on whether to retry, wait longer, or ask the user to check the URL.
Tool idempotence not guaranteed or documented. Scraping the same URL multiple times may produce different results (dynamic content, state changes). The tool description does not state whether it is safe to retry or whether repeated calls have side effects (e.g., triggering bot detection, consuming rate limits).
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | F | 8 | <=2025-11-25 | v2 |
| 2026-03-09 | F | 48 | - | v1 |
Result size truncation is silent and may cause data loss. The tool truncates markdown content to 100,000 characters without returning metadata about whether truncation occurred or how much was dropped. An LLM may not realize it received incomplete content and make decisions based on partial data.
Tool description lacks WHEN to use guidance. The description states WHAT the tool does ('scrapes a webpage') but does not explain when an LLM should call it instead of a similar tool, what formats it accepts, or what content it's optimized for (text extraction vs layout preservation).
Parameter constraint documentation incomplete. The 'maxInteractionAttempts' parameter specifies min=0, max=10, but the description does not explain what 'interaction' means (cookie dialogs? captchas? form fills?) or how the agent should reason about this value.