A shipping cost estimation service that calculates delivery rates based on weight, source zip code, and destination zip code with multiple service levels (Standard, Expedited, Next-Day)
Single tool with adequate naming but critical gaps in descriptions, schema documentation, and error handling. The tool name 'estimate_shipping' follows verb_noun convention, which is good. However, the input schema is visible but severely underdocumented, and crucially, there is NO documented output schema anywhere in the codebase. The description provided (91 characters) is borderline acceptable but lacks critical context about prerequisites, failure modes, and actionable error guidance. Parameter descriptions exist but are minimal (8-28 chars, well below the 72-char baseline). The implementation shows a simple algorithmic approach with no input validation, no error handling, and no recovery guidance, violating multiple pattern requirements.
Estimates shipping costs based on weight, source zip code, and destination zip code. Returns delivery estimates for Standard, Expedited, and Next-Day service levels, along with the calculated shipping zone.
Output schema completely undocumented. The Python implementation returns a dict with 'delivery_estimates' (dict of service→cost) and 'shipping_zone' (int), but this structure is nowhere declared or explained for the LLM. Without documented output, downstream tools cannot chain calls and LLMs must guess field names.
Input parameters lack constraint documentation. 'weight_lbs' has no min/max (should be 0.01 - 10000+ LBS). 'source_zip' and 'dest_zip' have no format spec (5-digit US ZIP? 9-digit ZIP+4? International?). This invites hallucinated values. Parameters need range/format/enum declarations.
Zero error handling. The implementation has no validation of ZIP codes or weight, invalid inputs (negative weight, non-numeric ZIPs, null values) will crash silently or return garbage. No guidance for LLM recovery. Error responses must categorize as retryable/user-fixable/fatal with actionable next steps.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | F | 33 | 2026-07-28+ | v2 |
Tool description lacks context for LLM selection. Does not explain: when to use this vs. other shipping estimators; what 'shipping zone' means; whether rates are USD; what service-level SLAs are; whether discounts apply; what happens with invalid ZIPs. Minimal descriptions (91 chars) force LLMs to guess.
Parameter descriptions are trivial (8 - 28 chars vs. 72-char baseline). 'Weight in pounds' does not explain units (is 5.4 pounds or kilograms?), bounds (min/max), or whether decimal values are allowed. 'Source zip code' does not clarify format (US 5-digit? 9-digit?). Descriptions must be actionable for LLM reasoning.