EasyPost MCP — multi-carrier shipping rates + package tracking (easypost.com)
Two tools with complete input schemas and reasonable descriptions. Both tools have proper JSON Schema definitions with typed parameters and descriptions. However, descriptions lack depth on WHEN to use each tool and what distinguishes them. Output schemas are not documented, LLMs cannot plan downstream calls or know what fields to expect. Parameter descriptions are adequate but generic. No error recovery guidance. No tool annotations (readOnlyHint). Missing pagination guidance for rates (could return many carriers). easypost_rates description includes example values (94105, 10001) which LLMs may reuse literally.
Get shipping rate quotes from `<from_zip>` to `<to_zip>` for a parcel — returns multi-carrier rates (USPS, UPS, FedEx, etc.) with price, service level, and estimated delivery days. Example: easypost_rates({ from_zip: "94105", to_zip: "10001", weight_oz: 16, _apiKey: "your-key" })
Track a package by tracking number — returns current status, carrier, estimated delivery date, and recent scan events. Example: easypost_track({ tracking_code: "9400100000000000000000", carrier: "USPS", _apiKey: "your-key" })
Output schemas not documented. LLMs cannot infer what fields to expect from easypost_rates (does it return rate, currency, delivery_days?) or easypost_track (status, carrier, events?). Forces agents to guess or make follow-up calls.
Descriptions include example values (from_zip: '94105', to_zip: '10001', tracking_code: '9400100000000000000000'). LLMs tend to reuse example values literally in real calls, causing failures. Replace with format constraints or enums.
No tool annotations (readOnlyHint). Both tools are read-only (GET-like operations), but LLMs cannot infer this from the schema. Add readOnlyHint: true to enable safe agent planning.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 62 | 2026-07-28+ | v2 |
No error recovery guidance. Error messages like 'auth failed (HTTP 401)' or 'HTTP 500' tell the LLM nothing about what to do next. Add actionable recovery hints: 'Check your EasyPost API key at easypost.com/account' or 'Retry in 30 seconds'.
easypost_rates may return many carriers (USPS, UPS, FedEx, DHL, etc.). No pagination or limit documented. If 50+ rates are returned, context window bloat occurs. Cap results at 20 and document in description.