Skip to main content
Glama

Calculate many shipments

calculate_shipments
Read-onlyIdempotent

Calculates several shipments at once, each like calculate_shipment. A failing shipment doesn't stop the others; each failure says why and whether sending it again can help. Set explain to add calculation sheets (first 25 shipments).

Tool call template

Replace each placeholder with a value matching the input schema. Only required parameters are included; add optional parameters as needed.

{
  "id": 1,
  "jsonrpc": "2.0",
  "method": "tools/call",
  "params": {
    "arguments": {
      "shipments": "<shipments>"
    },
    "name": "calculate_shipments"
  }
}

Input Schema

NameRequiredDescriptionDefault
explainNoAdd the step-by-step calculation sheet of each shipment (up to 25)
shipmentsYesThe shipments. Without an API key the public service takes up to 100 per call; with one, up to 10,000.
add_road_legsNoAdd road legs where the legs don't join up (gaps over 5 km), and to a port or terminal when a sea, rail or river leg starts or ends off its network (default true). Added legs are marked in the result.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed1 schema field changed
    • addedInput schema / properties / shipments / items / properties / legs / items / properties / cargo_type
      Added value: +{
      +  "description": "Optional: this leg's GLEC cargo category, instead of the shipment's (same values as the shipment's cargo_type)",
      +  "type": "string"
      +}
  2. Changed4 schema fields changed
    • changedInput schema / properties / shipments / items / properties / legs / items / properties / fuel / properties / factor / properties / ttw_kg_per_unit / description
      Previous value: -"Tank-to-wheel kg CO2e per unit (part of WTW)"New value: +"Tank-to-wheel kg CO2e per unit (part of WTW; 0 only for electricity). Required: ask the user if missing"
    • changedInput schema / properties / shipments / items / properties / legs / items / properties / fuel / properties / factor / required
      Previous value: -[
      -  "unit",
      -  "wtw_kg_per_unit",
      -  "source"
      -]New value: +[
      +  "unit",
      +  "wtw_kg_per_unit",
      +  "ttw_kg_per_unit",
      +  "source"
      +]
    • changedInput schema / properties / shipments / items / properties / legs / items / properties / own_factor / properties / ttw_g_per_tkm / description
      Previous value: -"Tank-to-wheel g CO2e per tonne-km (part of WTW)"New value: +"Tank-to-wheel g CO2e per tonne-km (part of WTW; 0 only when no fuel is burnt in the vehicle, e.g. electric). Required: ask the user if missing"
    • changedInput schema / properties / shipments / items / properties / legs / items / properties / own_factor / required
      Previous value: -[
      -  "wtw_g_per_tkm",
      -  "source"
      -]New value: +[
      +  "wtw_g_per_tkm",
      +  "ttw_g_per_tkm",
      +  "source"
      +]
  3. Changed3 schema fields changed
    • addedInput schema / properties / shipments / items / properties / legs / items / properties / fuel / properties / factor
      Added value: +{
      +  "additionalProperties": false,
      +  "description": "The fuel supplier's own emission factor, instead of the dataset's (fuel is then just its name).",
      +  "properties": {
      +    "biogenic_co2_kg_per_unit": {
      +      "description": "Biogenic CO2 per unit, reported apart (optional)",
      +      "type": "number"
      +    },
      +    "source": {
      +      "description": "Who gives the factor, and for what",
      +      "type": "string"
      +    },
      +    "ttw_kg_per_unit": {
      +      "description": "Tank-to-wheel kg CO2e per unit (part of WTW)",
      +      "type": "number"
      +    },
      +    "unit": {
      +      "description": "Unit of amount, e.g. l, kg, kWh",
      +      "type": "string"
      +    },
      +    "wtw_kg_per_unit": {
      +      "description": "Well-to-wheel kg CO2e per unit",
      +      "type": "number"
      +    }
      +  },
      +  "required": [
      +    "unit",
      +    "wtw_kg_per_unit",
      +    "source"
      +  ],
      +  "type": "object"
      +}
    • addedInput schema / properties / shipments / items / properties / legs / items / properties / own_factor
      Added value: +{
      +  "additionalProperties": false,
      +  "description": "The carrier's or the user's own intensity for this leg (primary data), instead of a default value. Only with a figure the user gave; never estimate one.",
      +  "properties": {
      +    "distance_basis": {
      +      "description": "Distance type the intensity is per tonne-km of; leave out if it matches the leg's",
      +      "enum": [
      +        "sfd",
      +        "gcd",
      +        "actual"
      +      ],
      +      "type": "string"
      +    },
      +    "source": {
      +      "description": "Who measured it, and for what (e.g. the carrier's report and year)",
      +      "type": "string"
      +    },
      +    "ttw_g_per_tkm": {
      +      "description": "Tank-to-wheel g CO2e per tonne-km (part of WTW)",
      +      "type": "number"
      +    },
      +    "wtw_g_per_tkm": {
      +      "description": "Well-to-wheel g CO2e per tonne-km",
      +      "type": "number"
      +    }
      +  },
      +  "required": [
      +    "wtw_g_per_tkm",
      +    "source"
      +  ],
      +  "type": "object"
      +}
    • changedInput schema / properties / shipments / items / properties / legs / items / required
      Previous value: -[
      -  "mode",
      -  "vehicle_type"
      -]New value: +[
      +  "mode"
      +]
  4. Changed1 schema field changed
    • addedInput schema / properties / shipments / items / properties / cargo_type
      Added value: +{
      +  "description": "Optional, GLEC v3.3 cargo or load category: container, temperature_controlled, light, heavy, or for European rail cars, chemicals, coal_steel, building_materials, manufactured_products, cereals, truck_trailer_on_train, trailer_on_train. Picks GLEC's value for it where GLEC has one for the leg's vehicle; otherwise the vehicle's own value (the leg's note says which).",
      +  "type": "string"
      +}
  5. Changed2 schema fields changed
    • changedInput schema / properties / shipments / items / properties / hubs / description
      Previous value: -"Hub stops: hub_type transshipment, storage_transshipment, warehouse or liquid_bulk_terminal (add _mixed for ambient and temperature-controlled sites); GLEC v3.3 Table 3 values per tonne."New value: +"Hub stops: hub_type transshipment, storage_transshipment, warehouse or liquid_bulk_terminal (add _mixed for ambient and temperature-controlled sites), per tonne; intermodal_terminal or intermodal_terminal_temperature_controlled, per container (give containers). GLEC v3.3 Table 3."
    • addedInput schema / properties / shipments / items / properties / hubs / items / properties / containers
      Added value: +{
      +  "description": "Containers handled, for intermodal terminals",
      +  "type": "number"
      +}
  6. Changed1 schema field changed
    • changedInput schema / properties / shipments / items / properties / hubs / description
      Previous value: -"Hub stops (transhipment, storage); needs a dataset with hub factors."New value: +"Hub stops: hub_type transshipment, storage_transshipment, warehouse or liquid_bulk_terminal (add _mixed for ambient and temperature-controlled sites); GLEC v3.3 Table 3 values per tonne."
  7. Changed1 schema field changed
    • addedInput schema / properties / shipments / items / properties / legs / items / properties / repositioning_km
      Added value: +{
      +  "description": "Trucks: km driven empty for this trip (to the pickup or back), shared over the truck's load like empty running. Without a load, the shipment is taken as the whole load.",
      +  "type": "number"
      +}
  8. Changed2 schema fields changed
    • changedInput schema / properties / shipments / items / properties / container_load / description
      Previous value: -"With teu: a container load profile defined by the dataset, instead of teu_net_tonnes"New value: +"With teu, instead of teu_net_tonnes: average (10 t), light (6 t) or heavy (14.5 t) per TEU, from the GLEC Framework"
    • changedInput schema / properties / shipments / items / properties / teu / description
      Previous value: -"Containers in TEU, instead of weight_kg; needs teu_net_tonnes"New value: +"Containers in TEU, instead of weight_kg; with teu_net_tonnes, or alone for GLEC's average of 10 t per TEU"
  9. First observed

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, idempotentHint and openWorldHint=false, so safety is covered. The description still adds real value by disclosing partial-failure behavior ("a failing shipment doesn't stop the others") and that failures explain cause plus retryability — non-obvious traits an agent needs for error handling.

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

Conciseness5/5

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

Three short sentences, zero filler, with the core batch semantics front-loaded ahead of the failure-handling and explain details.

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

Completeness4/5

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

For a deeply nested batch tool with full schema coverage and no output schema, the description covers the behaviors that matter — per-shipment independence, failure reporting, and the explain cap — while the per-field semantics and batch ceilings live in the schema. Only a statement of what a successful response contains is arguably missing.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already documents shipments and explain in depth. The description's note about explain adding calculation sheets capped at the first 25 shipments largely restates the schema's own "(up to 25)" text, adding little new meaning.

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 description names a specific verb and resource ("Calculates several shipments at once") and immediately anchors it to the sibling tool ("each like calculate_shipment"), so an agent can tell the batch tool from the single-shipment tool without opening the 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 makes the batch context plain and points at calculate_shipment as the per-item semantic reference, which effectively routes the agent between the two. It stops short of an explicit "use this instead of calculate_shipment when you have many shipments" statement or naming batch-size limits as a selection constraint.

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.

Resources