A reusable MCP server that communicates via JSON-RPC 2.0 over stdio, written in Swift
Three tools with basic schemas and descriptions, but significant gaps in parameter documentation and output schema clarity. Tool names lack action verbs (echo, generate_report, divide are generic). Descriptions are present but minimal (10-40 chars), below the 50-200 char LLM-optimized baseline. Input schemas are visible and typed, but parameter descriptions are sparse. No output schemas documented. Error handling and recovery guidance absent. The framework supports strong typing via Codable and @InputProperty, but the example tools do not leverage it fully.
Divide two numbers
Echo back the input message
Generate a report with text and structured data
Tool names lack action verbs. 'echo', 'generate_report', 'divide' are generic and do not signal intent. Should be 'echo_message', 'generate_text_report', 'divide_numbers' to match verb_noun pattern.
Descriptions are too short (10-40 chars, below 50-char minimum). 'Echo back the input message' and 'Divide two numbers' lack context for LLM selection. Should explain WHAT, WHEN, and any prerequisites.
Output schemas not documented. LLMs cannot plan downstream calls or extract results. Tools must declare return type structure (e.g., 'Returns: {text: string, data: object}').
No error handling or recovery guidance. Tools do not indicate what to do on failure (retryable? user-fixable? fatal?). Missing actionable error messages.
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | F | 39 | <=2025-11-25 | v2 |
Parameter descriptions minimal or missing. 'message' param in echo has description, but 'title' in generate_report and 'a', 'b' in divide lack context. Every param needs a description explaining what it controls.