A basic Model Context Protocol server with simple utility tools for echo, math calculations, and time retrieval.
Basic MCP server with 3 READ_ONLY tools implemented via explicit server.registerTool() calls in src/index.ts. All tools have descriptions (194 char baseline met), proper Zod schemas with types, and descriptions for all parameters. However, naming lacks action verbs (echo, calc, now vs get_current_time, perform_arithmetic); descriptions are minimal (10-50 chars, below the 50-200 char LLM-optimized range); no output schema documentation; no error guidance beyond basic division-by-zero handling; output is generic text rather than structured typed responses. Tools are simple and readable but lack production-grade polish. No tool annotations (readOnlyHint exists but not used despite all tools being READ_ONLY). Parameter descriptions are present but terse.
Returns the current date and time in ISO 8601 format.
Repeat the input text exactly as provided.
Performs basic arithmetic operations.
Tool names lack action verbs. 'echo', 'calc', 'now' do not start with verbs like get_, perform_, retrieve_. LLMs infer tool intent from name; non-verb names reduce clarity and ability to distinguish when multiple tools are available.
Tool descriptions are too brief (10-55 chars). LLM-optimized descriptions should be 50-200 chars and answer: What does it do? When to use it? What are prerequisites? Current descriptions ('Repeat the input text exactly as provided.', 'Performs basic arithmetic operations.', 'Returns the current date and time in ISO 8601 format.') lack context for selection.
Output schema not documented. No tool defines what fields LLMs should expect in the response. Clock/now returns 'ISO', 'Local', 'Epoch(ms)' as a single text blob, not structured fields. Math/calc returns unstructured 'Result: X' string. LLMs cannot plan downstream tool calls or extract data reliably.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | D | 54 | 2026-07-28+ | v2 |
| 2026-03-09 | F | 40 | - | v1 |
No tool annotations despite all tools being READ_ONLY. MCP 2026-07-28 spec includes readOnlyHint, destructiveHint, idempotentHint in tool metadata. These tools should declare readOnlyHint: true for client optimization and auditing.
Math/calc error handling returns generic error text rather than structured errors with recovery guidance. Division by zero returns 'Error: Division by zero is not allowed.' but does not suggest next steps. Unknown operation default case does not happen (enum constraint prevents it) but defensive coding comment is present.
Echo tool accepts 'text' parameter with minLength:1, maxLength:100 constraints but description does not state the length limits. LLMs cannot read JSON Schema constraints; they rely on description text to understand valid ranges.