Three tools with basic schemas and descriptions, but significant gaps in parameter documentation, output schema clarity, and error handling. All tools lack descriptions for their parameters (critical baseline violation: 100% of A+ tools have param descriptions). Descriptions are present but generic (avg ~80 chars, below 194-char baseline). No output schemas documented. No error handling guidance. No tool annotations. Tools are read-only but lack idempotentHint declarations.
Get the latest exchange rates from provided base currency code (ISO 4217) to all other supported currencies
Roll the dice with the given notation
Search the web for information about the given query
All parameters lack descriptions. 'query', 'notation', 'num_rolls', 'currency_code' have no explanatory text. Baseline: 100% of A+ tools have param descriptions.
No output schemas documented. Tools return strings (web_search, roll_dice) or JSON strings (get_exchange_rate), but LLMs cannot infer structure. Baseline: 100% of A+ tools have documented return types.
No error handling guidance. exchange_rates.py catches exceptions and returns error strings, but tools provide no recovery hints. E.g., 'Network error: ...' tells LLM nothing about retry eligibility.
roll_dice accepts 'notation' parameter but lacks format constraints. Description should specify pattern (e.g., '\d+d\d+(k\d+)?' or 'e.g., 2d20k1'). Current code validates but LLM has no guidance.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | F | 44 | 2026-07-28+ | v2 |
No tool annotations (readOnlyHint, idempotentHint). All three tools are read-only and idempotent, but fastmcp does not expose these hints in the schema.