A simple MCP server exposing a website fetching tool
Two tools present with explicit definitions in mcp_simple_tool/server.py. Both have basic descriptions and input schemas, but fall short of production quality. mcp_fetch has a minimal 49-char description lacking context about use cases, constraints, or error guidance. mood has a lengthy 236-char description that is descriptive but verbose. Neither tool has documented output schemas, error handling guidance, or parameter constraints beyond basic type declarations. Schemas are present and valid JSON Schema, but lack depth, no format specifications, min/max bounds, or patterns. No tool annotations (readOnlyHint, destructiveHint, idempotentHint) present despite MCP spec support. Error handling in the implementation is defensive (timeouts, HTTP errors caught) but responses are plain text error strings without recovery guidance. Parameter descriptions exist but are minimal, 'URL to fetch' and 'Ask this MCP server about its mood...' lack detail on accepted formats, constraints, or examples.
Fetches a website and returns its content
Ask the server about its mood - it's always happy!
No output schemas documented. LLM cannot infer response structure, forcing it to parse plain text and reason about field names.
Tool descriptions lack use-case context and constraints. 'Fetches a website' doesn't explain: What formats? Timeouts? Size limits? When to prefer this over alternatives?
No tool annotations present (readOnlyHint, destructiveHint, idempotentHint). Both tools are read-only but this is not signaled in the schema. Agents should not retry mcp_fetch on timeout without knowing idempotency guarantees.
Input parameter constraints missing. 'url' parameter in mcp_fetch has no format='uri' constraint, no length bounds, no protocol whitelist. LLM could pass invalid URLs or internal IPs. 'question' parameter in mood has no length limit, could accept arbitrary strings.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | D | 55 | 2026-07-28+ | v2 |
| 2026-03-09 | F | 38 | - | v1 |
Error messages in tool code are plain text strings (e.g., 'Error: Missing required argument'), not structured error responses with recovery guidance.
'mood' tool naming is not verb-first. Tool name should start with action verb (get_, query_, check_). Current name 'mood' is ambiguous, is it a noun (the mood state) or an action?