Skip to main content
Glama

Shipment Summary

shipment_summary
Read-onlyIdempotent

Composite shipment analysis in one call: volume (CBM), gross and chargeable weight, road LDM with pallet spaces and a vehicle suggestion (road mode), volumetric weight (air), revenue tonnes with a container suggestion (sea), dangerous-goods presence for items carrying un_number, and UK duty estimates for items carrying hs_code + customs_value.

Provide mode (road | air | sea | multimodal) and items[] (dims in cm, weight in kg PER ITEM, quantity; optional stackable, pallet_type, hs_code, un_number, customs_value PER ITEM, and adr_quantity — the TOTAL for the dangerous-goods line, all pieces together); origin/destination and incoterm refine the duty leg.

Behavior: calls the ldm_calculator, adr_lookup and uk_duty_calculator engines directly; CBM, volumetric weight and revenue tonnes are the same arithmetic inline rather than a call out. Road LDM uses the 2.40 m loading-metre convention divisor and, like ldm_calculator, treats an item with no stackable flag as NOT stacked. modeSpecific.palletSpaces is pallet FLOOR POSITIONS (the figure ldm_calculator reports); palletRows is the separate row count. The suggested vehicle is the smallest that holds the load by its length, its payload and its pallet floor positions — the record's own count when it is a floor count, otherwise worked from its deck (a 7.5t rigid holds 15 Euro pallets on the floor; modeSpecific.suggestedVehicleFloorPositions says which) — and trailerUtilisation is of that vehicle (utilisationBasis names it); the suggested container is the smallest dry box whose record holds the volume and payload. Sections that cannot run (e.g. duty without a customs value) surface in warnings instead of failing the whole call. Fields are checked by name: a field the tool does not read is refused with a tool error naming it and listing the accepted ones, never ignored. Rate-limited: a limit error carries reset_at, the UTC time the allowance resets.

Returns: mode, itemCount, totals {pieces, grossWeight, volumeCBM, chargeableWeight, billingBasis}, modeSpecific (LDM / pallet floor positions / pallet rows / suggested vehicle, or revenue tonnes / container), warnings and dataVersion (road mode attributes the vehicle dataset and the LDM divisor) under result — note this composite's result uses camelCase field names (legacy shape); plus confidence, _source and citation (the FreightUtils v1 response envelope).

Editions: edition ("2025" | "2027") and as_of (YYYY-MM-DD) choose the ADR edition — edition wins, else the date picks it (ADR 2025 before 2027-01-01, ADR 2027 from then; ADR 2025 may still be applied until 2027-06-30). An answer on a named edition carries adr_edition; neither sent, the answer is ADR 2025 until 2027-01-01.

Limitations: a planning summary, not a quotation or compliance determination.

Related: consignment_calculator (canonical snake_case lines[] shape with advisory flags), cbm_calculator, chargeable_weight_calculator, ldm_calculator, adr_lookup, uk_duty_calculator. ldm_calculator, adr_lookup and uk_duty_calculator are the engines this actually calls; the rest are the single-purpose equivalents of arithmetic it does inline.

Input Schema

NameRequiredDescriptionDefault
modeNoTransport mode. Required unless the consignment object is sent.
as_ofNoYYYY-MM-DD the answer is for (default today, UTC); picks the ADR edition when edition is omitted, and is echoed in the answer and its check receipt.
itemsNoArray of shipment items with dimensions, weight, and optional HS/UN codes. Required unless the consignment object is sent.
originNoOrigin location — ISO country code and optional UN/LOCODE
editionNoADR edition: "2025" or "2027". Wins over as_of. Omit it and as_of picks the edition by the legal timeline: before 2027-01-01 ADR 2025; from 2027-01-01 ADR 2027 (ADR 2025 may still be applied until 2027-06-30 under 1.6.1.1 — edition "2025" answers on it until then); from 2027-07-01 ADR 2027 only. An ADR 2027 answer for a date before 2027-01-01 carries an EDITION_NOT_YET_APPLICABLE warning.
incotermNoIncoterms 2020 three-letter code (e.g. 'DAP', 'EXW', 'FOB')
consignmentNoAlternative to the other arguments: the consignment object (https://www.freightutils.com/schema/consignment-object.v1.json) — lines[] (description, un_number, packing_group, variant_index, quantity {value, unit, basis}, packages {count, type, gross_kg, un_mark}, hs_code, value {amount, currency}, dims, stackable, icao_limited_quantity, inner_packaging), journey {origin, destination, date, tunnels_on_route, mode}, vehicle, crew, options. Send it alone; an input the tool needs and the object lacks comes back in missing_inputs.
destinationNoDestination location — ISO country code and optional UN/LOCODE
freight_costNoOptional freight cost in GBP for duty calculation, 0 or more (default 0)
insurance_costNoOptional insurance cost in GBP for duty calculation, 0 or more (default 0)

Output Schema

NameRequiredDescriptionDefault
okYes
_metaNo
as_ofNo
resultYes
statusNo
_sourceYes
editionNo
citationYes
validityNo
warningsNo
confidenceYes
missing_inputsNo
blocking_errorsNo
envelope_versionYes
normalized_inputNo

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed1 schema field changed
    • addedOutput schema / properties / _meta / properties / upstream
      Added value: +{
      +  "additionalProperties": {},
      +  "properties": {
      +    "datasets": {
      +      "additionalProperties": {
      +        "additionalProperties": {},
      +        "properties": {
      +          "kind": {
      +            "anyOf": [
      +              {
      +                "enum": [
      +                  "watched",
      +                  "checksum-only",
      +                  "manual"
      +                ],
      +                "type": "string"
      +              },
      +              {
      +                "type": "null"
      +              }
      +            ]
      +          },
      +          "last_success": {
      +            "type": [
      +              "string",
      +              "null"
      +            ]
      +          },
      +          "reason": {
      +            "type": "string"
      +          },
      +          "stale": {
      +            "type": "boolean"
      +          },
      +          "state": {
      +            "enum": [
      +              "in_step",
      +              "changed_upstream",
      +              "schema_drift",
      +              "unreachable",
      +              "window_missed",
      +              "unknown"
      +            ],
      +            "type": "string"
      +          },
      +          "window_days": {
      +            "type": [
      +              "number",
      +              "null"
      +            ]
      +          }
      +        },
      +        "required": [
      +          "state",
      +          "kind",
      +          "last_success",
      +          "window_days",
      +          "stale"
      +        ],
      +        "type": "object"
      +      },
      +      "propertyNames": {
      +        "type": "string"
      +      },
      +      "type": "object"
      +    },
      +    "stale": {
      +      "type": "boolean"
      +    },
      +    "state": {
      +      "enum": [
      +        "in_step",
      +        "changed_upstream",
      +        "schema_drift",
      +        "unreachable",
      +        "window_missed",
      +        "unknown"
      +      ],
      +      "type": "string"
      +    },
      +    "state_read_at": {
      +      "type": [
      +        "string",
      +        "null"
      +      ]
      +    }
      +  },
      +  "required": [
      +    "state",
      +    "stale",
      +    "state_read_at",
      +    "datasets"
      +  ],
      +  "type": "object"
      +}
  2. Changed1 schema field changed
    • addedOutput schema / properties / _meta / properties / ids
      Added value: +{
      +  "additionalProperties": false,
      +  "properties": {
      +    "pattern": {
      +      "type": "string"
      +    },
      +    "scheme": {
      +      "maximum": 9007199254740991,
      +      "minimum": -9007199254740991,
      +      "type": "integer"
      +    }
      +  },
      +  "required": [
      +    "scheme",
      +    "pattern"
      +  ],
      +  "type": "object"
      +}
  3. Changed2 schema fields changed
    • changedInput schema / properties / consignment / description
      Previous value: -"Alternative to the other arguments: the consignment object (https://www.freightutils.com/schema/consignment-object.v1.json) — lines[] (description, un_number, packing_group, variant_index, quantity {value, unit, basis}, packages {count, type, gross_kg}, hs_code, value {amount, currency}, dims, stackable, icao_limited_quantity, inner_packaging), journey {origin, destination, date, tunnels_on_route, mode}, vehicle, crew, options. Send it alone; an input the tool needs and the object lacks comes back in missing_inputs."New value: +"Alternative to the other arguments: the consignment object (https://www.freightutils.com/schema/consignment-object.v1.json) — lines[] (description, un_number, packing_group, variant_index, quantity {value, unit, basis}, packages {count, type, gross_kg, un_mark}, hs_code, value {amount, currency}, dims, stackable, icao_limited_quantity, inner_packaging), journey {origin, destination, date, tunnels_on_route, mode}, vehicle, crew, options. Send it alone; an input the tool needs and the object lacks comes back in missing_inputs."
    • addedInput schema / properties / consignment / properties / lines / items / properties / packages / properties / un_mark
      Added value: +{
      +  "maxLength": 80,
      +  "minLength": 1,
      +  "type": "string"
      +}
  4. Changed7 schema fields changed
    • changedInput schema / properties / consignment / description
      Previous value: -"Alternative to the other arguments: the consignment object (https://www.freightutils.com/schema/consignment-object.v1.json) — lines[] (description, un_number, packing_group, variant_index, quantity {value, unit, basis}, packages {count, type, gross_kg}, hs_code, value {amount, currency}, dims, stackable, icao_limited_quantity, inner_packaging), journey {origin, destination, date, tunnels_on_route, mode}, vehicle, options. Send it alone; an input the tool needs and the object lacks comes back in missing_inputs."New value: +"Alternative to the other arguments: the consignment object (https://www.freightutils.com/schema/consignment-object.v1.json) — lines[] (description, un_number, packing_group, variant_index, quantity {value, unit, basis}, packages {count, type, gross_kg}, hs_code, value {amount, currency}, dims, stackable, icao_limited_quantity, inner_packaging), journey {origin, destination, date, tunnels_on_route, mode}, vehicle, crew, options. Send it alone; an input the tool needs and the object lacks comes back in missing_inputs."
    • addedInput schema / properties / consignment / properties / crew
      Added value: +{
      +  "additionalProperties": false,
      +  "properties": {
      +    "adr_training_certificate": {
      +      "type": "boolean"
      +    },
      +    "awareness_training_1_3": {
      +      "type": "boolean"
      +    },
      +    "photo_identification": {
      +      "type": "boolean"
      +    },
      +    "specialisations": {
      +      "items": {
      +        "enum": [
      +          "class_1",
      +          "class_7",
      +          "tanks"
      +        ],
      +        "type": "string"
      +      },
      +      "maxItems": 3,
      +      "type": "array"
      +    }
      +  },
      +  "type": "object"
      +}
    • addedInput schema / properties / consignment / properties / vehicle / properties / equipment_8_1_5
      Added value: +{
      +  "items": {
      +    "enum": [
      +      "wheel_chock",
      +      "warning_signs",
      +      "eye_rinsing_liquid",
      +      "warning_vest",
      +      "portable_lighting",
      +      "protective_gloves",
      +      "eye_protection",
      +      "emergency_escape_mask",
      +      "shovel",
      +      "drain_seal",
      +      "collecting_container"
      +    ],
      +    "type": "string"
      +  },
      +  "maxItems": 11,
      +  "type": "array"
      +}
    • addedInput schema / properties / consignment / properties / vehicle / properties / fire_extinguishers_kg
      Added value: +{
      +  "items": {
      +    "exclusiveMinimum": 0,
      +    "maximum": 100,
      +    "type": "number"
      +  },
      +  "maxItems": 20,
      +  "type": "array"
      +}
    • addedInput schema / properties / consignment / properties / vehicle / properties / instructions_in_writing
      Added value: +{
      +  "type": "boolean"
      +}
    • addedInput schema / properties / consignment / properties / vehicle / properties / orange_plates_displayed
      Added value: +{
      +  "type": "boolean"
      +}
    • addedInput schema / properties / consignment / properties / vehicle / properties / placards_displayed
      Added value: +{
      +  "type": "boolean"
      +}
  5. Changed1 schema field changed
    • addedInput schema / properties / consignment / properties / vehicle / properties / foodstuffs_carried
      Added value: +{
      +  "type": "boolean"
      +}
  6. Changed6 schema fields changed
    • changedInput schema / properties / consignment / description
      Previous value: -"Alternative to the other arguments: the consignment object (https://www.freightutils.com/schema/consignment-object.v1.json) — lines[] (description, un_number, packing_group, variant_index, quantity {value, unit, basis}, packages {count, type, gross_kg}, hs_code, value {amount, currency}, dims, stackable), journey {origin, destination, date, tunnels_on_route, mode}, vehicle, options. Send it alone; an input the tool needs and the object lacks comes back in missing_inputs."New value: +"Alternative to the other arguments: the consignment object (https://www.freightutils.com/schema/consignment-object.v1.json) — lines[] (description, un_number, packing_group, variant_index, quantity {value, unit, basis}, packages {count, type, gross_kg}, hs_code, value {amount, currency}, dims, stackable, icao_limited_quantity, inner_packaging), journey {origin, destination, date, tunnels_on_route, mode}, vehicle, options. Send it alone; an input the tool needs and the object lacks comes back in missing_inputs."
    • addedInput schema / properties / consignment / properties / lines / items / properties / icao_limited_quantity
      Added value: +{
      +  "type": "boolean"
      +}
    • addedInput schema / properties / consignment / properties / lines / items / properties / inner_packaging
      Added value: +{
      +  "additionalProperties": false,
      +  "properties": {
      +    "per_outer": {
      +      "maximum": 100000,
      +      "minimum": 1,
      +      "type": "integer"
      +    },
      +    "quantity": {
      +      "exclusiveMinimum": 0,
      +      "maximum": 1000000,
      +      "type": "number"
      +    },
      +    "regime": {
      +      "enum": [
      +        "lq",
      +        "eq"
      +      ],
      +      "type": "string"
      +    },
      +    "unit": {
      +      "enum": [
      +        "ml",
      +        "L",
      +        "g",
      +        "kg"
      +      ],
      +      "type": "string"
      +    }
      +  },
      +  "required": [
      +    "quantity",
      +    "unit"
      +  ],
      +  "type": "object"
      +}
    • removedInput schema / properties / consignment / properties / lines / items / properties / quantity / properties / value / exclusiveMinimum
      Removed value: -0
    • addedInput schema / properties / consignment / properties / lines / items / properties / quantity / properties / value / minimum
      Added value: +0
    • changedInput schema / properties / consignment / properties / lines / items / properties / un_number / pattern
      Previous value: -"^(?:UN\\s?)?\\d{4}$"New value: +"^(?:(?:UN\\s?)?\\d{4}|ID\\s?\\d{4})$"
  7. Changed2 schema fields changed
    • removedOutput schema / properties / _meta / properties / receipt / properties / reason / const
      Removed value: -"key_required"
    • addedOutput schema / properties / _meta / properties / receipt / properties / reason / enum
      Added value: +[
      +  "key_required",
      +  "quota"
      +]
  8. Changed1 schema field changed
    • addedOutput schema / properties / _meta / properties / receipt
      Added value: +{
      +  "additionalProperties": {},
      +  "properties": {
      +    "created_at": {
      +      "type": "string"
      +    },
      +    "dataset_version": {
      +      "additionalProperties": {
      +        "type": "string"
      +      },
      +      "propertyNames": {
      +        "type": "string"
      +      },
      +      "type": "object"
      +    },
      +    "engine_version": {
      +      "type": "string"
      +    },
      +    "inputs": {},
      +    "reason": {
      +      "const": "key_required",
      +      "type": "string"
      +    },
      +    "receipt_hash": {
      +      "type": "string"
      +    },
      +    "result": {
      +      "additionalProperties": {},
      +      "propertyNames": {
      +        "type": "string"
      +      },
      +      "type": "object"
      +    },
      +    "schema_version": {
      +      "type": "string"
      +    },
      +    "stored": {
      +      "const": false,
      +      "type": "boolean"
      +    },
      +    "tool": {
      +      "type": "string"
      +    }
      +  },
      +  "required": [
      +    "stored",
      +    "reason",
      +    "schema_version",
      +    "receipt_hash",
      +    "created_at",
      +    "tool",
      +    "inputs",
      +    "dataset_version",
      +    "engine_version",
      +    "result"
      +  ],
      +  "type": "object"
      +}
  9. Changed2 schema fields changed
    • addedInput schema / properties / as_of
      Added value: +{
      +  "description": "YYYY-MM-DD the answer is for (default today, UTC); picks the ADR edition when edition is omitted, and is echoed in the answer and its check receipt.",
      +  "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
      +  "type": "string"
      +}
    • addedInput schema / properties / edition
      Added value: +{
      +  "description": "ADR edition: \"2025\" or \"2027\". Wins over as_of. Omit it and as_of picks the edition by the legal timeline: before 2027-01-01 ADR 2025; from 2027-01-01 ADR 2027 (ADR 2025 may still be applied until 2027-06-30 under 1.6.1.1 — edition \"2025\" answers on it until then); from 2027-07-01 ADR 2027 only. An ADR 2027 answer for a date before 2027-01-01 carries an EDITION_NOT_YET_APPLICABLE warning.",
      +  "enum": [
      +    "2025",
      +    "2027"
      +  ],
      +  "type": "string"
      +}
  10. Changed1 schema field changed
    • addedOutput schema / properties / _meta / properties / edition_basis
      Added value: +{
      +  "type": "string"
      +}
  11. Changed36 schema fields changed
    • removedInput schema / properties / consignment / properties / journey / properties / date / description
      Removed value: -"Date of carriage, YYYY-MM-DD."
    • removedInput schema / properties / consignment / properties / journey / properties / destination / description
      Removed value: -"UN/LOCODE or ISO country code of the destination."
    • removedInput schema / properties / consignment / properties / journey / properties / mode / description
      Removed value: -"road | air | sea | multimodal."
    • removedInput schema / properties / consignment / properties / journey / properties / origin / description
      Removed value: -"UN/LOCODE or ISO country code of the origin."
    • removedInput schema / properties / consignment / properties / journey / properties / tunnels_on_route / description
      Removed value: -"ADR tunnel categories on the route (A–E)."
    • removedInput schema / properties / consignment / properties / lines / description
      Removed value: -"The lines of the load. Required."
    • removedInput schema / properties / consignment / properties / lines / items / properties / description / description
      Removed value: -"What the line is, at most 200 characters."
    • removedInput schema / properties / consignment / properties / lines / items / properties / dims / description
      Removed value: -"Dimensions of ONE package: { l, w, h, unit: mm | cm | m | in }."
    • removedInput schema / properties / consignment / properties / lines / items / properties / hs_code / description
      Removed value: -"HS / tariff commodity code, 6–10 digits."
    • removedInput schema / properties / consignment / properties / lines / items / properties / packages / description
      Removed value: -"The pieces: how many, of what type, and their total gross mass."
    • removedInput schema / properties / consignment / properties / lines / items / properties / packages / properties / count / description
      Removed value: -"Number of identical packages (pieces) on the line."
    • removedInput schema / properties / consignment / properties / lines / items / properties / packages / properties / gross_kg / description
      Removed value: -"Gross mass of ALL the line's packages together, in kg."
    • removedInput schema / properties / consignment / properties / lines / items / properties / packages / properties / type / description
      Removed value: -"Package type, e.g. \"pallet\", \"drum\", \"carton\"."
    • removedInput schema / properties / consignment / properties / lines / items / properties / packing_group / description
      Removed value: -"Packing group, to pin one ADR Table A row of a multi-row UN."
    • removedInput schema / properties / consignment / properties / lines / items / properties / quantity / description
      Removed value: -"The dangerous-goods quantity (ADR 1.1.3.6.3), separate from the gross mass of the packages."
    • removedInput schema / properties / consignment / properties / lines / items / properties / quantity / properties / basis / description
      Removed value: -"\"net\" (the goods) or \"gross\" (with packaging). 1.1.3.6.3 counts net; a gross figure scores no points."
    • removedInput schema / properties / consignment / properties / lines / items / properties / quantity / properties / unit / description
      Removed value: -"\"L\" or \"kg\" — checked against the dimension ADR 1.1.3.6.3 counts for the row."
    • removedInput schema / properties / consignment / properties / lines / items / properties / quantity / properties / value / description
      Removed value: -"The dangerous-goods quantity for the whole line, all packages together."
    • removedInput schema / properties / consignment / properties / lines / items / properties / stackable / description
      Removed value: -"Whether the packages may be stacked."
    • removedInput schema / properties / consignment / properties / lines / items / properties / un_number / description
      Removed value: -"UN number of a dangerous-goods line."
    • removedInput schema / properties / consignment / properties / lines / items / properties / value / description
      Removed value: -"Customs value of the whole line (all packages together)."
    • removedInput schema / properties / consignment / properties / lines / items / properties / value / properties / amount / description
      Removed value: -"The amount, 0 or more."
    • removedInput schema / properties / consignment / properties / lines / items / properties / value / properties / currency / description
      Removed value: -"ISO 4217 currency code, e.g. \"GBP\"."
    • removedInput schema / properties / consignment / properties / lines / items / properties / variant_index / description
      Removed value: -"ADR Table A variant index (as adr_lookup returns it), to pin one row."
    • removedInput schema / properties / consignment / properties / options / properties / air_volumetric_divisor / description
      Removed value: -"IATA volumetric divisor, cm³/kg (default 6000)."
    • removedInput schema / properties / consignment / properties / options / properties / awb_number / description
      Removed value: -"IATA air waybill number (check digit validated, advisory)."
    • removedInput schema / properties / consignment / properties / options / properties / container_number / description
      Removed value: -"ISO 6346 container number (check digit validated, advisory)."
    • removedInput schema / properties / consignment / properties / options / properties / freight_cost / description
      Removed value: -"Freight cost for the customs value."
    • removedInput schema / properties / consignment / properties / options / properties / freight_cost / properties / amount / description
      Removed value: -"The amount, 0 or more."
    • removedInput schema / properties / consignment / properties / options / properties / freight_cost / properties / currency / description
      Removed value: -"ISO 4217 currency code, e.g. \"GBP\"."
    • removedInput schema / properties / consignment / properties / options / properties / incoterm / description
      Removed value: -"Incoterms 2020 rule."
    • removedInput schema / properties / consignment / properties / options / properties / insurance_cost / description
      Removed value: -"Insurance cost for the customs value."
    • removedInput schema / properties / consignment / properties / options / properties / insurance_cost / properties / amount / description
      Removed value: -"The amount, 0 or more."
    • removedInput schema / properties / consignment / properties / options / properties / insurance_cost / properties / currency / description
      Removed value: -"ISO 4217 currency code, e.g. \"GBP\"."
    • removedInput schema / properties / consignment / properties / vehicle / properties / max_mass_t / description
      Removed value: -"Maximum permissible mass, tonnes."
    • removedInput schema / properties / consignment / properties / vehicle / properties / type / description
      Removed value: -"Vehicle type, e.g. \"artic\", \"rigid 7.5 t\"."
  12. Changed1 schema field changed
    • addedOutput schema / properties / _meta
      Added value: +{
      +  "additionalProperties": {},
      +  "properties": {
      +    "check_id": {
      +      "type": "string"
      +    },
      +    "receipt_url": {
      +      "type": "string"
      +    }
      +  },
      +  "type": "object"
      +}
  13. Changed4 schema fields changed
    • addedInput schema / properties / consignment
      Added value: +{
      +  "additionalProperties": false,
      +  "description": "Alternative to the other arguments: the consignment object (https://www.freightutils.com/schema/consignment-object.v1.json) — lines[] (description, un_number, packing_group, variant_index, quantity {value, unit, basis}, packages {count, type, gross_kg}, hs_code, value {amount, currency}, dims, stackable), journey {origin, destination, date, tunnels_on_route, mode}, vehicle, options. Send it alone; an input the tool needs and the object lacks comes back in missing_inputs.",
      +  "properties": {
      +    "journey": {
      +      "additionalProperties": false,
      +      "properties": {
      +        "date": {
      +          "description": "Date of carriage, YYYY-MM-DD.",
      +          "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
      +          "type": "string"
      +        },
      +        "destination": {
      +          "description": "UN/LOCODE or ISO country code of the destination.",
      +          "pattern": "^[A-Za-z]{2}(?:\\s?[A-Za-z2-9]{3})?$",
      +          "type": "string"
      +        },
      +        "mode": {
      +          "description": "road | air | sea | multimodal.",
      +          "enum": [
      +            "road",
      +            "air",
      +            "sea",
      +            "multimodal"
      +          ],
      +          "type": "string"
      +        },
      +        "origin": {
      +          "description": "UN/LOCODE or ISO country code of the origin.",
      +          "pattern": "^[A-Za-z]{2}(?:\\s?[A-Za-z2-9]{3})?$",
      +          "type": "string"
      +        },
      +        "tunnels_on_route": {
      +          "description": "ADR tunnel categories on the route (A–E).",
      +          "items": {
      +            "enum": [
      +              "A",
      +              "B",
      +              "C",
      +              "D",
      +              "E"
      +            ],
      +            "type": "string"
      +          },
      +          "maxItems": 20,
      +          "type": "array"
      +        }
      +      },
      +      "type": "object"
      +    },
      +    "lines": {
      +      "description": "The lines of the load. Required.",
      +      "items": {
      +        "additionalProperties": false,
      +        "properties": {
      +          "description": {
      +            "description": "What the line is, at most 200 characters.",
      +            "maxLength": 200,
      +            "type": "string"
      +          },
      +          "dims": {
      +            "additionalProperties": false,
      +            "description": "Dimensions of ONE package: { l, w, h, unit: mm | cm | m | in }.",
      +            "properties": {
      +              "h": {
      +                "exclusiveMinimum": 0,
      +                "maximum": 100000,
      +                "type": "number"
      +              },
      +              "l": {
      +                "exclusiveMinimum": 0,
      +                "maximum": 100000,
      +                "type": "number"
      +              },
      +              "unit": {
      +                "enum": [
      +                  "mm",
      +                  "cm",
      +                  "m",
      +                  "in"
      +                ],
      +                "type": "string"
      +              },
      +              "w": {
      +                "exclusiveMinimum": 0,
      +                "maximum": 100000,
      +                "type": "number"
      +              }
      +            },
      +            "required": [
      +              "l",
      +              "w",
      +              "h",
      +              "unit"
      +            ],
      +            "type": "object"
      +          },
      +          "hs_code": {
      +            "description": "HS / tariff commodity code, 6–10 digits.",
      +            "pattern": "^\\d{6,10}$",
      +            "type": "string"
      +          },
      +          "packages": {
      +            "additionalProperties": false,
      +            "description": "The pieces: how many, of what type, and their total gross mass.",
      +            "properties": {
      +              "count": {
      +                "description": "Number of identical packages (pieces) on the line.",
      +                "exclusiveMinimum": 0,
      +                "maximum": 100000,
      +                "type": "integer"
      +              },
      +              "gross_kg": {
      +                "description": "Gross mass of ALL the line's packages together, in kg.",
      +                "exclusiveMinimum": 0,
      +                "maximum": 1000000,
      +                "type": "number"
      +              },
      +              "type": {
      +                "description": "Package type, e.g. \"pallet\", \"drum\", \"carton\".",
      +                "maxLength": 40,
      +                "type": "string"
      +              }
      +            },
      +            "required": [
      +              "count"
      +            ],
      +            "type": "object"
      +          },
      +          "packing_group": {
      +            "description": "Packing group, to pin one ADR Table A row of a multi-row UN.",
      +            "enum": [
      +              "I",
      +              "II",
      +              "III"
      +            ],
      +            "type": "string"
      +          },
      +          "quantity": {
      +            "additionalProperties": false,
      +            "description": "The dangerous-goods quantity (ADR 1.1.3.6.3), separate from the gross mass of the packages.",
      +            "properties": {
      +              "basis": {
      +                "description": "\"net\" (the goods) or \"gross\" (with packaging). 1.1.3.6.3 counts net; a gross figure scores no points.",
      +                "enum": [
      +                  "net",
      +                  "gross"
      +                ],
      +                "type": "string"
      +              },
      +              "unit": {
      +                "description": "\"L\" or \"kg\" — checked against the dimension ADR 1.1.3.6.3 counts for the row.",
      +                "enum": [
      +                  "L",
      +                  "kg"
      +                ],
      +                "type": "string"
      +              },
      +              "value": {
      +                "description": "The dangerous-goods quantity for the whole line, all packages together.",
      +                "exclusiveMinimum": 0,
      +                "maximum": 1000000000,
      +                "type": "number"
      +              }
      +            },
      +            "required": [
      +              "value"
      +            ],
      +            "type": "object"
      +          },
      +          "stackable": {
      +            "description": "Whether the packages may be stacked.",
      +            "type": "boolean"
      +          },
      +          "un_number": {
      +            "description": "UN number of a dangerous-goods line.",
      +            "pattern": "^(?:UN\\s?)?\\d{4}$",
      +            "type": "string"
      +          },
      +          "value": {
      +            "additionalProperties": false,
      +            "description": "Customs value of the whole line (all packages together).",
      +            "properties": {
      +              "amount": {
      +                "description": "The amount, 0 or more.",
      +                "maximum": 1000000000000,
      +                "minimum": 0,
      +                "type": "number"
      +              },
      +              "currency": {
      +                "description": "ISO 4217 currency code, e.g. \"GBP\".",
      +                "pattern": "^[A-Z]{3}$",
      +                "type": "string"
      +              }
      +            },
      +            "required": [
      +              "amount",
      +              "currency"
      +            ],
      +            "type": "object"
      +          },
      +          "variant_index": {
      +            "description": "ADR Table A variant index (as adr_lookup returns it), to pin one row.",
      +            "maximum": 1000,
      +            "minimum": 0,
      +            "type": "integer"
      +          }
      +        },
      +        "type": "object"
      +      },
      +      "maxItems": 50,
      +      "minItems": 1,
      +      "type": "array"
      +    },
      +    "options": {
      +      "additionalProperties": false,
      +      "properties": {
      +        "air_volumetric_divisor": {
      +          "description": "IATA volumetric divisor, cm³/kg (default 6000).",
      +          "exclusiveMinimum": 0,
      +          "maximum": 10000,
      +          "type": "number"
      +        },
      +        "awb_number": {
      +          "description": "IATA air waybill number (check digit validated, advisory).",
      +          "maxLength": 20,
      +          "type": "string"
      +        },
      +        "container_number": {
      +          "description": "ISO 6346 container number (check digit validated, advisory).",
      +          "maxLength": 20,
      +          "type": "string"
      +        },
      +        "freight_cost": {
      +          "additionalProperties": false,
      +          "description": "Freight cost for the customs value.",
      +          "properties": {
      +            "amount": {
      +              "description": "The amount, 0 or more.",
      +              "maximum": 1000000000000,
      +              "minimum": 0,
      +              "type": "number"
      +            },
      +            "currency": {
      +              "description": "ISO 4217 currency code, e.g. \"GBP\".",
      +              "pattern": "^[A-Z]{3}$",
      +              "type": "string"
      +            }
      +          },
      +          "required": [
      +            "amount",
      +            "currency"
      +          ],
      +          "type": "object"
      +        },
      +        "incoterm": {
      +          "description": "Incoterms 2020 rule.",
      +          "enum": [
      +            "EXW",
      +            "FCA",
      +            "FAS",
      +            "FOB",
      +            "CFR",
      +            "CIF",
      +            "CPT",
      +            "CIP",
      +            "DAP",
      +            "DPU",
      +            "DDP"
      +          ],
      +          "type": "string"
      +        },
      +        "insurance_cost": {
      +          "additionalProperties": false,
      +          "description": "Insurance cost for the customs value.",
      +          "properties": {
      +            "amount": {
      +              "description": "The amount, 0 or more.",
      +              "maximum": 1000000000000,
      +              "minimum": 0,
      +              "type": "number"
      +            },
      +            "currency": {
      +              "description": "ISO 4217 currency code, e.g. \"GBP\".",
      +              "pattern": "^[A-Z]{3}$",
      +              "type": "string"
      +            }
      +          },
      +          "required": [
      +            "amount",
      +            "currency"
      +          ],
      +          "type": "object"
      +        }
      +      },
      +      "type": "object"
      +    },
      +    "vehicle": {
      +      "additionalProperties": false,
      +      "properties": {
      +        "axles": {
      +          "maximum": 12,
      +          "minimum": 1,
      +          "type": "integer"
      +        },
      +        "max_mass_t": {
      +          "description": "Maximum permissible mass, tonnes.",
      +          "exclusiveMinimum": 0,
      +          "maximum": 100,
      +          "type": "number"
      +        },
      +        "type": {
      +          "description": "Vehicle type, e.g. \"artic\", \"rigid 7.5 t\".",
      +          "maxLength": 60,
      +          "type": "string"
      +        }
      +      },
      +      "type": "object"
      +    }
      +  },
      +  "required": [
      +    "lines"
      +  ],
      +  "type": "object"
      +}
    • changedInput schema / properties / items / description
      Previous value: -"Array of shipment items with dimensions, weight, and optional HS/UN codes"New value: +"Array of shipment items with dimensions, weight, and optional HS/UN codes. Required unless the consignment object is sent."
    • changedInput schema / properties / mode / description
      Previous value: -"Transport mode"New value: +"Transport mode. Required unless the consignment object is sent."
    • removedInput schema / required
      Removed value: -[
      -  "mode",
      -  "items"
      -]
  14. Changed5 schema fields changed
    • addedOutput schema / properties / as_of
      Added value: +{
      +  "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
      +  "type": "string"
      +}
    • addedOutput schema / properties / edition
      Added value: +{
      +  "anyOf": [
      +    {
      +      "additionalProperties": false,
      +      "properties": {
      +        "applies_from": {
      +          "type": [
      +            "string",
      +            "null"
      +          ]
      +        },
      +        "may_apply_until": {
      +          "type": [
      +            "string",
      +            "null"
      +          ]
      +        },
      +        "name": {
      +          "type": "string"
      +        }
      +      },
      +      "required": [
      +        "name",
      +        "applies_from",
      +        "may_apply_until"
      +      ],
      +      "type": "object"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ]
      +}
    • changedOutput schema / properties / envelope_version / enum
      Previous value: -[
      -  "1",
      -  "1.1"
      -]New value: +[
      +  "1",
      +  "1.1",
      +  "1.2"
      +]
    • addedOutput schema / properties / missing_inputs
      Added value: +{
      +  "items": {
      +    "type": "string"
      +  },
      +  "type": "array"
      +}
    • addedOutput schema / properties / status
      Added value: +{
      +  "enum": [
      +    "ok",
      +    "partial",
      +    "not_found",
      +    "unsupported",
      +    "ambiguous"
      +  ],
      +  "type": "string"
      +}
  15. Changed2 schema fields changed
    • removedOutput schema / properties / validity / properties / effective_to / anyOf
      Removed value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • addedOutput schema / properties / validity / properties / effective_to / type
      Added value: +[
      +  "string",
      +  "null"
      +]
  16. Changed6 schema fields changed
    • changedInput schema / properties / freight_cost / description
      Previous value: -"Optional freight cost in GBP for duty calculation"New value: +"Optional freight cost in GBP for duty calculation, 0 or more (default 0)"
    • addedInput schema / properties / freight_cost / minimum
      Added value: +0
    • changedInput schema / properties / insurance_cost / description
      Previous value: -"Optional insurance cost in GBP for duty calculation"New value: +"Optional insurance cost in GBP for duty calculation, 0 or more (default 0)"
    • addedInput schema / properties / insurance_cost / minimum
      Added value: +0
    • changedInput schema / properties / items / items / properties / customs_value / description
      Previous value: -"Customs value in GBP PER ITEM (per piece) — multiplied by quantity for the line; the duty estimate uses the sum over all lines."New value: +"Customs value in GBP PER ITEM (per piece), 0 or more — multiplied by quantity for the line; the duty estimate uses the sum over all lines."
    • addedInput schema / properties / items / items / properties / customs_value / minimum
      Added value: +0
  17. Changed2 schema fields changed
    • changedInput schema / properties / items / items / properties / adr_quantity / description
      Previous value: -"ADR 1.1.3.6.3 quantity for this dangerous-goods line, in adr_quantity_unit. SEPARATE from weight, which is gross package mass — 1.1.3.6.3 counts none of its four categories that way. Supply both on EVERY dangerous-goods line and adrFlags.totalPoints is calculated; omit either and it stays null."New value: +"ADR 1.1.3.6.3 quantity for this dangerous-goods line — the total for the whole line, all pieces together (never per piece), in adr_quantity_unit. SEPARATE from weight, which is gross package mass — 1.1.3.6.3 counts none of its four categories that way. Supply both on EVERY dangerous-goods line and adrFlags.totalPoints is calculated; omit either and it stays null."
    • addedInput schema / properties / items / items / properties / customs_value / description
      Added value: +"Customs value in GBP PER ITEM (per piece) — multiplied by quantity for the line; the duty estimate uses the sum over all lines."
  18. Changed5 schema fields changed
    • addedInput schema / properties / items / items / properties / adr_quantity / maximum
      Added value: +1000000000
    • changedInput schema / properties / items / items / properties / quantity / maximum
      Previous value: -9007199254740991New value: +1000000
    • addedInput schema / properties / items / items / properties / weight / minimum
      Added value: +0
    • addedInput schema / properties / items / maxItems
      Added value: +50
    • addedInput schema / properties / items / minItems
      Added value: +1
  19. Changed4 schema fields changed
    • addedInput schema / additionalProperties
      Added value: +false
    • addedInput schema / properties / destination / additionalProperties
      Added value: +false
    • addedInput schema / properties / items / items / additionalProperties
      Added value: +false
    • addedInput schema / properties / origin / additionalProperties
      Added value: +false
  20. Changed2 schema fields changed
    • addedInput schema / properties / items / items / properties / adr_quantity
      Added value: +{
      +  "description": "ADR 1.1.3.6.3 quantity for this dangerous-goods line, in adr_quantity_unit. SEPARATE from weight, which is gross package mass — 1.1.3.6.3 counts none of its four categories that way. Supply both on EVERY dangerous-goods line and adrFlags.totalPoints is calculated; omit either and it stays null.",
      +  "exclusiveMinimum": 0,
      +  "type": "number"
      +}
    • addedInput schema / properties / items / items / properties / adr_quantity_unit
      Added value: +{
      +  "description": "Dimension of adr_quantity. Checked against the dimension 1.1.3.6.3 counts for the row — a litres row given kilograms still withholds the total.",
      +  "enum": [
      +    "L",
      +    "kg"
      +  ],
      +  "type": "string"
      +}
  21. Changed5 schema fields changed
    • addedOutput schema / properties / _source / properties / authority_current_edition
      Added value: +{
      +  "type": "string"
      +}
    • addedOutput schema / properties / _source / properties / checked_at
      Added value: +{
      +  "type": "string"
      +}
    • addedOutput schema / properties / _source / properties / dataset_edition
      Added value: +{
      +  "type": "string"
      +}
    • removedOutput schema / properties / envelope_version / const
      Removed value: -"1"
    • addedOutput schema / properties / envelope_version / enum
      Added value: +[
      +  "1",
      +  "1.1"
      +]
  22. Changed1 schema field changed
    • changedOutput schema / (root)
      Previous value: -nullNew value: +{
      +  "$schema": "http://json-schema.org/draft-07/schema#",
      +  "additionalProperties": false,
      +  "properties": {
      +    "_source": {
      +      "additionalProperties": false,
      +      "properties": {
      +        "checked": {
      +          "type": "string"
      +        },
      +        "name": {
      +          "type": "string"
      +        },
      +        "provenance_status": {
      +          "enum": [
      +            "verified",
      +            "pending-verification",
      +            "computed",
      +            "live"
      +          ],
      +          "type": "string"
      +        },
      +        "source_url": {
      +          "type": "string"
      +        }
      +      },
      +      "required": [
      +        "name",
      +        "checked",
      +        "provenance_status"
      +      ],
      +      "type": "object"
      +    },
      +    "blocking_errors": {
      +      "items": {
      +        "additionalProperties": false,
      +        "properties": {
      +          "code": {
      +            "type": "string"
      +          },
      +          "message": {
      +            "type": "string"
      +          },
      +          "recovery": {
      +            "additionalProperties": false,
      +            "properties": {
      +              "action": {
      +                "type": "string"
      +              },
      +              "params": {
      +                "additionalProperties": {},
      +                "propertyNames": {
      +                  "type": "string"
      +                },
      +                "type": "object"
      +              },
      +              "tool": {
      +                "type": "string"
      +              }
      +            },
      +            "required": [
      +              "action"
      +            ],
      +            "type": "object"
      +          }
      +        },
      +        "required": [
      +          "code",
      +          "message",
      +          "recovery"
      +        ],
      +        "type": "object"
      +      },
      +      "type": "array"
      +    },
      +    "citation": {
      +      "additionalProperties": false,
      +      "properties": {
      +        "qualifier": {
      +          "type": "string"
      +        },
      +        "text": {
      +          "type": "string"
      +        }
      +      },
      +      "required": [
      +        "text"
      +      ],
      +      "type": "object"
      +    },
      +    "confidence": {
      +      "additionalProperties": false,
      +      "properties": {
      +        "basis": {
      +          "enum": [
      +            "deterministic",
      +            "provenance",
      +            "match_quality",
      +            "freshness"
      +          ],
      +          "type": "string"
      +        },
      +        "level": {
      +          "enum": [
      +            "high",
      +            "medium",
      +            "low"
      +          ],
      +          "type": "string"
      +        },
      +        "score": {
      +          "maximum": 1,
      +          "minimum": 0,
      +          "type": "number"
      +        }
      +      },
      +      "required": [
      +        "level",
      +        "basis"
      +      ],
      +      "type": "object"
      +    },
      +    "envelope_version": {
      +      "const": "1",
      +      "type": "string"
      +    },
      +    "normalized_input": {
      +      "additionalProperties": {},
      +      "propertyNames": {
      +        "type": "string"
      +      },
      +      "type": "object"
      +    },
      +    "ok": {
      +      "type": "boolean"
      +    },
      +    "result": {
      +      "additionalProperties": {},
      +      "propertyNames": {
      +        "type": "string"
      +      },
      +      "type": "object"
      +    },
      +    "validity": {
      +      "additionalProperties": false,
      +      "properties": {
      +        "as_of": {
      +          "type": "string"
      +        },
      +        "effective_from": {
      +          "type": "string"
      +        },
      +        "effective_to": {
      +          "anyOf": [
      +            {
      +              "type": "string"
      +            },
      +            {
      +              "type": "null"
      +            }
      +          ]
      +        }
      +      },
      +      "required": [
      +        "as_of"
      +      ],
      +      "type": "object"
      +    },
      +    "warnings": {
      +      "items": {
      +        "additionalProperties": false,
      +        "properties": {
      +          "code": {
      +            "type": "string"
      +          },
      +          "details": {
      +            "additionalProperties": {},
      +            "propertyNames": {
      +              "type": "string"
      +            },
      +            "type": "object"
      +          },
      +          "message": {
      +            "type": "string"
      +          }
      +        },
      +        "required": [
      +          "code",
      +          "message"
      +        ],
      +        "type": "object"
      +      },
      +      "type": "array"
      +    }
      +  },
      +  "required": [
      +    "envelope_version",
      +    "ok",
      +    "result",
      +    "confidence",
      +    "_source",
      +    "citation"
      +  ],
      +  "type": "object"
      +}
  23. Changed12 schema fields changed
    • removedInput schema / properties / freightCost
      Removed value: -{
      -  "description": "Optional freight cost in GBP for duty calculation",
      -  "type": "number"
      -}
    • addedInput schema / properties / freight_cost
      Added value: +{
      +  "description": "Optional freight cost in GBP for duty calculation",
      +  "type": "number"
      +}
    • removedInput schema / properties / insuranceCost
      Removed value: -{
      -  "description": "Optional insurance cost in GBP for duty calculation",
      -  "type": "number"
      -}
    • addedInput schema / properties / insurance_cost
      Added value: +{
      +  "description": "Optional insurance cost in GBP for duty calculation",
      +  "type": "number"
      +}
    • removedInput schema / properties / items / items / properties / customsValue
      Removed value: -{
      -  "type": "number"
      -}
    • addedInput schema / properties / items / items / properties / customs_value
      Added value: +{
      +  "type": "number"
      +}
    • removedInput schema / properties / items / items / properties / hsCode
      Removed value: -{
      -  "type": "string"
      -}
    • addedInput schema / properties / items / items / properties / hs_code
      Added value: +{
      +  "type": "string"
      +}
    • removedInput schema / properties / items / items / properties / palletType
      Removed value: -{
      -  "description": "Pallet standard the item sits on, if any",
      -  "enum": [
      -    "euro",
      -    "uk",
      -    "us",
      -    "custom",
      -    "none"
      -  ],
      -  "type": "string"
      -}
    • addedInput schema / properties / items / items / properties / pallet_type
      Added value: +{
      +  "description": "Pallet standard the item sits on, if any",
      +  "enum": [
      +    "euro",
      +    "uk",
      +    "us",
      +    "custom",
      +    "none"
      +  ],
      +  "type": "string"
      +}
    • removedInput schema / properties / items / items / properties / unNumber
      Removed value: -{
      -  "type": "string"
      -}
    • addedInput schema / properties / items / items / properties / un_number
      Added value: +{
      +  "type": "string"
      +}
  24. First observed

TDQS

A4.5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Far beyond the readOnly/idempotent annotations, it discloses the delegation to ldm_calculator, adr_lookup and uk_duty_calculator, the 2.40 m loading-metre divisor and the 'no stackable flag means NOT stacked' convention, the smallest-fit vehicle/container selection logic and what utilisationBasis refers to. It also covers failure behavior: sections that cannot run degrade into warnings rather than failing, unknown field names are refused with an error listing accepted ones, and rate-limit errors carry reset_at.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The purpose is correctly front-loaded, but the body is a wall of multi-clause sentences with deeply nested parentheticals (the vehicle-fit sentence in particular) that take real effort to parse. Detail such as 'a 7.5t rigid holds 15 Euro pallets on the floor' and the duplicated adr_quantity explanation pull weight that the schema or a reference doc could carry.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 10-parameter composite with nested objects, delegation to three engines, editable ADR editions and partial-failure semantics, nothing an agent needs to call it correctly is missing: units, per-item vs per-line scope, edition precedence, warning behavior, error shapes and limitations are all present. The Returns block is partly redundant against the output schema, but the camelCase 'legacy shape' note is a genuinely useful addition.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3, and the description still earns above baseline by stressing the traps: weight and customs_value are PER ITEM while adr_quantity is the TOTAL for the line, and edition overrides as_of with origin/destination and incoterm refining only the duty leg. Some of this restates schema text near-verbatim, and the large nested consignment object is left entirely to its schema description, so it stops short of a 5.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The opening sentence names the specific outputs (CBM volume, gross and chargeable weight, road LDM with pallet spaces and vehicle suggestion, volumetric weight, revenue tonnes with container suggestion, dangerous-goods presence, UK duty) and the mode/items inputs that drive them. The Related section explicitly contrasts it with consignment_calculator and the single-purpose calculators, so an agent can place it among 25 siblings without opening a schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives clear invocation context ('Provide mode ... and items[]', with units and per-item vs per-line distinctions) and explains in Related that the three engines are what it calls while cbm_calculator, chargeable_weight_calculator and ldm_calculator are single-purpose equivalents of its inline arithmetic. What it never states is an explicit routing rule such as 'use cbm_calculator alone when you only need volume' — the choice is inferable but not spelled out.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.