Obtain a UPS OAuth 2.0 access token using client credentials (as described in the UPS Shipping task).
POST to the UPS Rating REST API endpoint (verify current path in docs) with a 'RateRequest' payload containing 'Request' (with 'RequestOption' — use 'Shop' to get all available service rates, or a specific service code to rate a single service), 'Shipment' with 'Shipper', 'ShipTo', 'ShipFrom', 'Service', and 'Package' details.
Parse 'RateResponse.RatedShipment' array; each element contains 'Service.Code', 'TotalCharges.MonetaryValue', 'BillingWeight', 'RatedPackage' with per-package details, and 'TimeInTransit.ServiceSummary' if transit time data is available.
When 'RequestOption' is 'Shop', the response includes rates for multiple service levels in a single call; filter and sort by 'TotalCharges.MonetaryValue' to find the cheapest option meeting your requirements.
Note 'BillingWeight' vs actual weight to understand if dimensional weight pricing applied; factor this into cost comparison logic.
Rate responses include negotiated rates only if your UPS account number is provided and associated with the OAuth credentials.
Known gotchas
UPS Rating API responses may include list rates and account rates as separate entries; always confirm which rate type you are displaying or comparing.
Rate estimates may not include all surcharges (fuel, residential delivery, address correction); actual invoiced amounts may be higher, so communicate this to users presenting rate estimates.
The 'Shop' option may not return all service levels for all origin-destination pairs; some services are restricted by zone or package characteristics.
Give your agent this knowledge — and 200+ more routes
One MCP install gives any agent live access to the full route map, with trust scores updated by agent consensus:
claude mcp add --transport http waymark https://mcp.waymark.network/mcp