Strong foundation with 10 well-named tools covering a coherent domain (UPS shipping/tracking). All tools have descriptions (avg 156 chars, within baseline 194). Input schemas are present and mostly complete with type definitions and parameter descriptions. However, output schemas are not documented, LLMs cannot predict response structure for downstream chaining. Error handling is minimal; no recovery guidance or actionable error messages visible. Missing tool annotations (readOnlyHint, destructiveHint) despite clear risk classifications. Some parameter descriptions lack format/constraint details (e.g., 'tracking number (7-34 characters)' is good, but 'service code' lacks enum clarity in descriptions).
Cancel a previously scheduled UPS pickup by confirmation number.
Create a UPS shipment and generate a shipping label. Supports all UPS domestic and international services. Returns tracking number, charges, and label image (base64-encoded GIF by default). Common service codes: 03=Ground, 02=2nd Day Air, 01=Next Day Air, 13=Next Day Air Saver, 12=3 Day Select, 07=Express (intl), 11=Standard (intl).
Find nearby UPS locations, Access Points, and drop-off points. Search by address or postal code. Returns locations with services available, hours of operation, and distance from the search point.
Recover UPS shipping labels and generate a printable PDF. Supports 1-up (single label centered) or 2-up (two labels side by side on one page). Labels are automatically oriented for 8.5x11 paper.
Get shipping rates for a package between two addresses. Returns available service options with prices, transit times, and delivery guarantees. Omit the service code to get rates for ALL available services (shop rates). Common codes: 03=Ground, 02=2nd Day Air, 01=Next Day Air, 12=3 Day Select.
Output schemas not documented. LLMs cannot predict response structure (fields, types, nested objects) for downstream tool chaining. E.g., create_shipment returns tracking number and charges, but response format is invisible to the agent.
Tool annotations missing. create_shipment, void_shipment, schedule_pickup, cancel_pickup, generate_label_pdf have clear risk profiles (WRITE, DESTRUCTIVE) but lack readOnlyHint/destructiveHint/idempotentHint metadata. Agents cannot distinguish safe from unsafe operations.
Error handling not visible. No recovery guidance in code (e.g., 'If address validation fails, try with fewer address lines'). Agents will not know how to self-correct on API failures.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 59 | 2026-07-28+ | v2 |
Get estimated delivery dates and transit times between two locations. Returns the expected delivery date and time for each available UPS service.
Schedule a UPS package pickup at a specific address and time. Provide the pickup date, time window, address, and package details. Returns a confirmation number to reference or cancel the pickup.
Track a UPS package by tracking number. Returns current status, delivery estimate, and full activity history. Optionally includes signature details, milestones, and proof of delivery.
Validate a US or Puerto Rico address using UPS Address Validation. Returns whether the address is valid, classification (residential/commercial), and suggested corrections if ambiguous.
Cancel a shipment and void its label. Use when a shipment has been created but not yet picked up or tendered to UPS. The tracking number becomes invalid after voiding.
Parameter descriptions lack format constraints. 'service' param in create_shipment lists codes in description ('03=Ground, 01=Next Day Air') but should use enum constraint. 'shipDate' in get_time_in_transit says 'YYYY-MM-DD format' but no pattern validation visible.
Pagination not implemented for list-like tools. find_locations returns maxResults (default 10, max 50) but no cursor/offset or total_count. If agent needs all locations, it cannot iterate.