Neutral freight reference + validation layer for AI agents — ADR dangerous goods, HS codes, airlines, airports, UN/LOCODE, Incoterms, identifier validation and freight math. Every tool declares a typed output schema and returns a source-cited response envelope (structuredContent) an agent can cite.
Three tools with strong schemas and comprehensive descriptions. All tools have explicit input schemas with type definitions and parameter descriptions. Descriptions are detailed (200-400 chars) and include behavior, rate-limiting, and related tools. Tool annotations are present and correct (readOnlyHint=true, idempotentHint=true). However, naming lacks action verbs (cbm_calculator, chargeable_weight_calculator, ldm_calculator are noun-based rather than verb_noun pattern). Output schemas are documented in code but not visible in the provided excerpt. Error handling is described in text but recovery guidance is minimal. No evidence of parameter validation examples or constraint documentation beyond type definitions.
Calculate cubic metres (CBM) for a shipment from per-piece dimensions. CBM is the standard volume unit in international shipping: 1 CBM = 1m x 1m x 1m = 1,000 litres, and ocean freight prices per "freight tonne" (1 CBM or 1,000 kg, whichever is greater). Behavior: deterministic — identical inputs always return identical figures; total volume = pieces x per-piece CBM, with conversions to cubic feet, cubic inches and litres included. Missing or non-positive dimensions error with a validation message naming the parameter. Rate-limited (anonymous use: 25 requests/day per IP): a 429 error body carries retry_after_seconds and a Retry-After header — back off and retry, or call get_subscribe_link for higher limits. Returns: cbm_per_piece, total_cbm, cubic_feet, litres, cubic_inches and pieces under result, plus confidence, _source and citation (the FreightUtils v1 response envelope). Related: chargeable_weight_calculator (air billing weight from the same dims), consignment_calculator (multi-line totals), unit_converter (single conversions), shipment_summary (full composite analysis).
Calculate air freight chargeable weight — the greater of actual gross weight and volumetric weight, which is what airlines bill. Volumetric weight (kg) = (L x W x H in cm) / divisor; the IATA-standard divisor is 6,000 (1 CBM = 166.67 kg), while express integrators (DHL, FedEx, UPS) typically use 5,000. Behavior: deterministic; per-piece volumetric weight is rounded to 2 decimal places before totalling; basis reports which weight governs ("volumetric" = cargo is light for its size, "actual" = dense). Air mode only — sea W/M (1 CBM = 1,000 kg) is covered by consignment_calculator with mode=sea. Missing or non-positive inputs error with the failing parameter named. Rate-limited (anonymous use: 25 requests/day per IP): a 429 error body carries retry_after_seconds and a Retry-After header — back off and retry, or call get_subscribe_link for higher limits. Returns: chargeable_weight_kg, basis, volumetric_weight_kg (total and per piece), gross_weight_kg, cbm, ratio, factor and pieces under result; normalized_input echoes the interpreted inputs and any defaults applied; plus confidence, _source and citation (the FreightUtils v1 response envelope). Related: cbm_calculator (volume only), consignment_calculator (multi-line, all modes), uld_lookup (the equipment the freight flies in).
Tool names lack action verbs. 'cbm_calculator', 'chargeable_weight_calculator', 'ldm_calculator' are noun-based. Should follow verb_noun pattern: 'calculate_cbm', 'calculate_chargeable_weight', 'calculate_ldm'. LLMs infer intent from the verb, noun-only names reduce clarity.
Error recovery guidance is minimal. Descriptions mention 429 rate-limit errors with retry_after_seconds and Retry-After headers, but do not explain what the LLM should do: 'If you hit a 429, wait retry_after_seconds and retry, or call get_subscribe_link to upgrade.' Current text assumes the LLM will parse HTTP headers.
ldm_calculator has a mutually exclusive parameter pair (pallet preset vs custom length_mm + width_mm) but the constraint is only documented in the description text, not enforced in the schema. Zod schema does not use .refine() or .superRefine() to validate the exclusivity. LLMs may pass both or neither.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 65 | 2025-06-18+ | v2 |
Calculate loading metres (LDM) for European road freight — how much trailer length a pallet load occupies. 1 LDM = 1 linear metre of a 2.4m-wide trailer; a standard artic is 13.6 LDM. Provide a pallet preset OR custom length_mm + width_mm — omitting both errors with a usage hint. Behavior: deterministic; stackable=true with stack_height 2 or 3 divides the floor footprint accordingly; fits reports whether the load fits the chosen vehicle's LENGTH (give weight_kg to also see total_weight_kg against the vehicle's max payload); utilisation_percent is of the vehicle's length. Rate-limited (anonymous use: 25 requests/day per IP): a 429 error body carries retry_after_seconds and a Retry-After header — back off and retry, or call get_subscribe_link for higher limits. Returns: ldm, vehicle (name, length_m, max_payload_kg), utilisation_percent, pallet_spaces (used/available), total_weight_kg, fits and warnings under result, plus confidence, _source and citation (the FreightUtils v1 response envelope). Related: vehicle_lookup (the trailer specs behind the vehicle presets), pallet_fitting_calculator (boxes onto one pallet), consignment_calculator (mixed lines including LDM).
ldm_calculator references a deprecated vehicle preset 'rigid10' with a removal notice ('DEPRECATED, removal in 3.0.0') but does not guide the LLM to alternatives. Should state: 'Use rigid75 (7.5t) instead; rigid10 will be removed in v3.0.0.'
Output schemas are defined in code (resultSchema fields) but not documented in tool descriptions. LLMs cannot see what fields to expect in the response. Descriptions should state: 'Returns: {field1, field2, ...} under result, plus confidence, _source, citation.'