VIN decoding for commercial trucks and insurance form filling
Single tool with reasonable naming and input schema, but critical gaps in descriptions, output documentation, and error handling. The tool name 'decode_vin_batch' correctly uses verb_noun pattern (decode_*), and the input schema uses Zod with proper constraints (minItems:1, maxItems:50). However, the tool description is minimal (21 chars) and lacks context about when to use it vs alternatives. The output schema is not documented, the tool returns raw JSON as a stringified blob without a formal schema definition. Parameter description is adequate but generic. Error handling is present but not actionable (generic error messages with no recovery guidance). No parameter validation guidance provided. The implementation lacks idempotent/readonly hints, making it unclear to agents whether this tool is safe to retry.
Decode multiple VINs at once for truck fleets
Output schema not documented. Tool returns JSON.stringify() with no formal schema definition. LLMs cannot predict or parse response structure.
Tool description is too short (21 chars: 'Decode multiple VINs at once for truck fleets'). Lacks context about when to call this vs alternatives, what it returns, and prerequisites.
Error handling does not guide LLM recovery. Generic message 'Decoding error: <error message>' provides no next steps.
No tool annotations (readOnlyHint, idempotentHint). This is a read-only, idempotent operation that is safe to retry, but FastMCP implementation does not expose these current-spec hints. Agents cannot infer retry safety.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | F | 44 | 2026-07-28+ | v2 |
| 2026-03-09 | F | 34 | - | v1 |
Parameter 'vins' description is generic ('Array of VINs (up to 50)') and does not specify VIN format (17 characters, alphanumeric), valid character ranges, or examples of commercial truck VINs.
No pagination support. Tool accepts up to 50 VINs but returns all results as a single response.