A gift wrap calculator service that computes fees for gift wrapping styles and custom message cards
Single tool with partial schema definition visible in code. Tool name follows verb_noun pattern ('calculate_gift_wrap'), which is positive. However, critical gaps significantly limit usability: (1) Parameters lack type information in their schema, only 'string' is declared, with no format, enum, or validation constraints; (2) Input parameter descriptions are minimal (~80 chars) and lack guidance on valid values, ranges, or edge cases; (3) Output schema is not documented in tool registration, we can infer from code that it returns a dict with 'wrap_fee', 'card_message_fee', 'total_gift_service_fee', but this is reverse-engineered, not formally declared; (4) No error handling or validation messaging documented; (5) No recovery guidance if invalid style is passed (e.g., 'ultraviolet' instead of 'premium'/'standard'/'none'). The tool is functional but lacks production-grade definition quality.
Calculates the total gift service fee based on wrapping style and custom message length
Parameter 'style' lacks enum constraint despite accepting only three known values ('premium', 'standard', 'none'). Free-form strings invite hallucinated invalid styles. LLM may pass unexpected values like 'gold_premium' or 'deluxe' without validation feedback.
Output schema not documented. Tool description does not specify what fields the response contains ('wrap_fee', 'card_message_fee', 'total_gift_service_fee'). LLM must infer response structure from trial or code inspection, violates pattern:tool-description and pattern:response-shaper.
No error handling or input validation messaging documented. If LLM passes an invalid style (e.g., 'luxury'), the code silently defaults to 0.00 fee. No recovery guidance provided. Violates pattern:recovery-guide.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | F | 39 | 2026-07-28+ | v2 |
Parameter 'message' description lacks format guidance. No mention of character limits, encoding, or behavior around the 100-character surcharge threshold. LLM lacks context to explain fee logic to users.
Tool description is 103 characters, within acceptable range but minimal. Does not explain WHEN to call this tool, WHY the fee structure exists, or HOW the surcharge rule works. Lacks prompt-engineering rigor.