Tor request integration through the Model Context Protocol
Two tools with basic schemas and descriptions, but significant gaps in parameter documentation, error handling guidance, and output schema clarity. Tool names lack action verbs (tor_request vs make_request or fetch_via_tor). Descriptions are present but generic (194 chars baseline; these average ~80 chars). Parameters lack type constraints and validation hints. Error responses return TorResponse objects with generic error messages rather than actionable recovery guidance. No tool annotations (readOnlyHint, idempotentHint). Output schema (TorResponse) is defined in code but not documented in tool descriptions for LLM consumption.
Make HTTP requests through the Tor network.
Make HTTP requests through the Tor network with custom headers.
Tool names lack action verbs. 'tor_request' and 'tor_request_with_headers' do not start with clear action verbs (get_, fetch_, make_). LLMs infer intent from names, these names are ambiguous about whether they retrieve, send, or transform data.
Parameter 'method' accepts free-form string ('get' or 'post') without enum constraint. Description says 'HTTP method (get or post)' but no schema enum. LLMs may hallucinate 'put', 'patch', 'delete', causing runtime assertion failures.
Output schema (TorResponse with status_code, body, headers) is defined in code but not documented in tool descriptions. LLMs cannot see the Pydantic model, they need explicit field documentation in the description or a structured output schema annotation.
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | F | 40 | <=2025-11-25 | v2 |
Error handling returns generic TorResponse objects with error messages in the 'body' field. No actionable recovery guidance. E.g., 'Error making request: <exception>' tells the LLM nothing about whether to retry, check the URL, or ask the user.
No tool annotations (readOnlyHint, idempotentHint). Both tools are read-only and idempotent (GET/POST to external URLs), but this is not declared in the tool schema. LLMs cannot infer safety properties.