Server has 2 tools with basic functionality but significant quality gaps. Tool names lack action verbs and are not optimally descriptive. Descriptions are minimal (10-50 chars, below the 34-char p10 baseline and well below production averages of 194 chars). Parameter descriptions are either missing or minimal. Output schemas are not documented. The `random_number()` tool has a critical runtime bug (random.randint not random). No error handling or recovery guidance. No tool annotations. Composition is simplistic but acceptable for a demo server. This is a minimal proof-of-concept, not production-ready.
Add two numbers
Generate random number n between 1 and 100
Tool names lack action verbs. 'add' and 'random_number' do not follow verb_noun naming convention (should be 'add_numbers', 'generate_random_number'). LLMs rely on verb-first names to infer intent at a glance.
Descriptions are critically short: 'Add two numbers' (19 chars) and 'Generate random number n between 1 and 100' (47 chars). Production baseline is 194 chars average (p10=34). Descriptions lack context on WHEN to use, WHY, prerequisites, and return value semantics. Descriptions under 20 chars cannot guide LLM tool selection.
Parameter descriptions missing. 'add' has inline docstring parameter docs ('First Number', 'Second Number') but these are minimal (13-14 chars each, well below 72-char baseline). 'random_number' has no parameters, but neither tool documents output schema or return type semantics.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | F | 39 | 2026-07-28+ | v2 |
| 2026-03-09 | F | 0 | - | v1 |
Output schemas not documented. No response format definitions, field types, or range constraints described anywhere. LLMs cannot plan downstream tool calls or validate results without knowing expected return structure.
Critical runtime bug in random_number(): calls random(1,100) but Python's random module has no random() function at module level. Should be random.randint(1, 100). This tool will crash on invocation.
No error handling or recovery guidance. Tools have no try-catch blocks, validation, or error messages. An LLM receiving a runtime exception has no actionable recovery path.
No tool annotations. Tools lack readOnlyHint, destructiveHint, or idempotentHint metadata. Both tools are read-only but this is not declared in the tool definition itself, only in the provided metadata field 'Risk: READ_ONLY'.
Tool 'add' has no numeric constraints. No range limits on a and b; LLMs could pass arbitrarily large integers. Should document that inputs are unbounded or set max values in schema.