Koskamo

Sootcase MCP

A remote MCP server that calculates freight transport greenhouse gas emissions (kg CO2e) following the GLEC Framework v3.3 and ISO 14083:2023. It provides real routing for road, rail, inland waterway, and sea, showing every step of the calculation with sources. Tools include calculating single or multiple shipments, generating emissions reports, comparing scenarios, and recommending route changes to lower emissions.

Endpoint and access

No sign-in to connect and list tools. Individual tools may still need a vendor account, credentials, or permissions; check the documented prerequisites.

Sootcase MCP logo, by SootcaseCommunity listingStreamable HTTPNo sign-inEndpoint checked 2026-11-01Published by Sootcase
You need:For an API key and files of up to 10,000 shipments, sign in. It's free.Without an API key: up to 100 shipments per call and 2000 a day per connection.With a free account's key (sign in at https://sootcase.org ): 100000 shipments a day.
MCP endpoint (Streamable HTTP)
https://sootcase.org/mcp
Vendor documentation

What you can do with it

  • Calculate a single shipment's CO2e emissions with step-by-step breakdown
  • Generate ISO 14083 style emissions reports for multiple shipments
  • Compare current shipments with alternative scenarios like rail or fuel switches
  • Find places like ports and terminals by name or code to fill leg details

Source and maintenance

Community listingRegistry 1.2.0

Protocol and capabilities

Server
sootcase 1
MCP protocol
2025-06-18
Tools
8 advertised
Resources
1 advertised
Resource templates
0 advertised
Prompts
Not advertised
Server-advertised capabilities
{
  "tools": {
    "listChanged": false
  },
  "resources": {
    "listChanged": false
  }
}

Server-provided instructions

Untrusted server output shown for inspection. It is not Koskamo guidance and is excluded from knowledge search.

Sootcase calculates freight transport greenhouse gas emissions (kg CO2e) following the GLEC Framework v3.3 and ISO 14083:2023. How to use it: 1. For each leg of the trip you need the mode (road, rail, sea, air, inland_waterway), a vehicle type, and where it goes. Use find_places to turn place names into coordinates or UN/LOCODE/IATA codes; Sootcase routes the distance itself (roads, railways, waterways, sea lanes). Use list_vehicle_types to pick vehicle types; the short aliases (hgv, hgv_artic_33t, van, freight_train, container_ship, container_barge, air_freight, roro, ...) cover most cases. 2. Call calculate_shipment for one shipment, calculate_shipments for several, emissions_report for an ISO 14083 style report over many, compare_scenario for what-if changes (road to rail, electric trucks, other fuels, loads), recommend_routes to find route changes that lower each shipment's emissions (rail, waterway, short sea, sea or rail instead of air, other ports, fuller loads). 3. Results include ghg_protocol: for a company buying the transport all of it is scope 3 (category 4 if it pays, 9 for sold products it doesn't pay to move); for the operator of the vehicles scope 1, scope 2 and scope 3 category 3. Every result says how it was calculated: the distance and how it was found, the factor and its source, any distance adjustment, the method and data type, notes on road legs Sootcase added or ends it moved to a port or terminal, and warnings. calculate_shipment adds a step-by-step calculation sheet with the GLEC page and ISO clause behind each step. Read it, and show the user the parts that matter. Be careful with: - Truck load: load_factor is a share of DESNZ's average full load (17.9 t for an articulated truck), not of the truck's rated payload as in GLEC or EcoTransIT. If the user knows the tonnes on the truck, pass load_tonnes instead. - Assumptions: tell the user which vehicle types and loads you chose and why. - Results are calculations following GLEC/ISO 14083, not certified figures; never declare ISO 14083 conformity for the user. get_methodology explains everything in detail.

Tools

8 advertised

calculate_shipment — Calculate a shipment's emissions
Advertised by the server during the last successful anonymous check.
Advertised read-only

Calculates one shipment's greenhouse gas emissions (kg CO2e: well-to-wheel, tank-to-wheel, well-to-tank) following the GLEC Framework v3.3 and ISO 14083. Routes each leg's distance from its coordinates or codes. Returns the result per leg (distance and how it was found, method, data type, emission factor and its source, distance adjustment, notes on legs Sootcase added) and a step-by-step calculation sheet with the arithmetic and the GLEC page and ISO 14083 clause behind each step.

calculate_shipment input schema
{
  "type": "object",
  "required": [
    "legs"
  ],
  "properties": {
    "id": {
      "type": "string",
      "description": "Your reference for the shipment"
    },
    "teu": {
      "type": "number",
      "description": "Containers in TEU, instead of weight_kg; with teu_net_tonnes, or alone for GLEC's average of 10 t per TEU"
    },
    "hubs": {
      "type": "array",
      "items": {
        "type": "object",
        "required": [
          "hub_type"
        ],
        "properties": {
          "id": {
            "type": "string",
            "description": "Hub label"
          },
          "hub_type": {
            "type": "string",
            "description": "Hub type from the dataset"
          },
          "containers": {
            "type": "number",
            "description": "Containers handled, for intermodal terminals"
          }
        },
        "additionalProperties": false
      },
      "description": "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."
    },
    "legs": {
      "type": "array",
      "items": {
        "type": "object",
        "required": [
          "mode"
        ],
        "properties": {
          "id": {
            "type": "string",
            "description": "Your label for the leg"
          },
          "to": {
            "type": "object",
            "properties": {
              "lat": {
                "type": "number",
                "maximum": 90,
                "minimum": -90,
                "description": "Latitude, decimal degrees"
              },
              "lon": {
                "type": "number",
                "maximum": 180,
                "minimum": -180,
                "description": "Longitude, decimal degrees"
              },
              "code": {
                "type": "string",
                "description": "Instead of lat/lon: a UN/LOCODE (e.g. NLRTM for Rotterdam) or IATA airport code (e.g. CPH)"
              },
              "name": {
                "type": "string",
                "description": "Label for the place, shown in results"
              }
            },
            "description": "A place: coordinates (lat and lon, optionally name), or a code instead. Use find_places to look up coordinates or codes for a place name.",
            "additionalProperties": false
          },
          "from": {
            "type": "object",
            "properties": {
              "lat": {
                "type": "number",
                "maximum": 90,
                "minimum": -90,
                "description": "Latitude, decimal degrees"
              },
              "lon": {
                "type": "number",
                "maximum": 180,
                "minimum": -180,
                "description": "Longitude, decimal degrees"
              },
              "code": {
                "type": "string",
                "description": "Instead of lat/lon: a UN/LOCODE (e.g. NLRTM for Rotterdam) or IATA airport code (e.g. CPH)"
              },
              "name": {
                "type": "string",
                "description": "Label for the place, shown in results"
              }
            },
            "description": "A place: coordinates (lat and lon, optionally name), or a code instead. Use find_places to look up coordinates or codes for a place name.",
            "additionalProperties": false
          },
          "fuel": {
            "type": "object",
            "required": [
              "fuel",
              "amount"
            ],
            "properties": {
              "fuel": {
                "type": "string",
                "description": "Fuel id or alias: diesel, petrol, hvo, marine_gas_oil, marine_fuel_oil, jet_fuel (per litre), electricity/<ISO3 country> (kWh), or others from list_vehicle_types with include_fuels"
              },
              "amount": {
                "type": "number",
                "description": "Amount in the fuel's unit (litres for the aliases)"
              },
              "factor": {
                "type": "object",
                "required": [
                  "unit",
                  "wtw_kg_per_unit",
                  "source"
                ],
                "properties": {
                  "unit": {
                    "type": "string",
                    "description": "Unit of amount, e.g. l, kg, kWh"
                  },
                  "source": {
                    "type": "string",
                    "description": "Who gives the factor, and for what"
                  },
                  "ttw_kg_per_unit": {
                    "type": "number",
                    "description": "Tank-to-wheel kg CO2e per unit (part of WTW)"
                  },
                  "wtw_kg_per_unit": {
                    "type": "number",
                    "description": "Well-to-wheel kg CO2e per unit"
                  },
                  "biogenic_co2_kg_per_unit": {
                    "type": "number",
                    "description": "Biogenic CO2 per unit, reported apart (optional)"
                  }
                },
                "description": "The fuel supplier's own emission factor, instead of the dataset's (fuel is then just its name).",
                "additionalProperties": false
              },
              "vehicle_tonne_km": {
                "type": "number",
                "description": "Total tonne-km of the whole trip, to give this shipment its share of the fuel. Leave out if the trip carried only this shipment."
              }
            },
            "description": "Measured fuel for the vehicle trip this leg is part of (primary data).",
            "additionalProperties": false
          },
          "mode": {
            "enum": [
              "road",
              "rail",
              "sea",
              "air",
              "inland_waterway"
            ],
            "type": "string"
          },
          "country": {
            "type": "string",
            "description": "With energy_kwh_per_tkm: ISO 3166 alpha-3 country whose grid supplies the electricity, e.g. DEU"
          },
          "own_factor": {
            "type": "object",
            "required": [
              "wtw_g_per_tkm",
              "source"
            ],
            "properties": {
              "source": {
                "type": "string",
                "description": "Who measured it, and for what (e.g. the carrier's report and year)"
              },
              "ttw_g_per_tkm": {
                "type": "number",
                "description": "Tank-to-wheel g CO2e per tonne-km (part of WTW)"
              },
              "wtw_g_per_tkm": {
                "type": "number",
                "description": "Well-to-wheel g CO2e per tonne-km"
              },
              "distance_basis": {
                "enum": [
                  "sfd",
                  "gcd",
                  "actual"
                ],
                "type": "string",
                "description": "Distance type the intensity is per tonne-km of; leave out if it matches the leg's"
              }
            },
            "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.",
            "additionalProperties": false
          },
          "distance_km": {
            "type": "number",
            "description": "The distance, if known. When given, it is used as is and not routed; say what kind it is with distance_type. Leave it out to route from the coordinates (preferred)."
          },
          "load_factor": {
            "type": "number",
            "description": "Trucks: load as a share (0-1) of the load model's payload, DESNZ's average full load (17.9 t for an articulated truck over 33 t), NOT of the truck's rated payload as in GLEC or EcoTransIT. Give load_tonnes or load_factor, not both."
          },
          "load_tonnes": {
            "type": "number",
            "description": "Trucks: the tonnes on the truck (all cargo, averaged over the loaded km), which switches the leg to the load model. Prefer this over load_factor when the weight is known."
          },
          "vehicle_type": {
            "type": "string",
            "description": "A short alias or a full id from list_vehicle_types. Common: road hgv (average truck), hgv_artic_33t (articulated truck over 33 t, a 40 t semitrailer), hgv_rigid, van; rail freight_train; sea container_ship (short-sea factor under 2,000 km, deep-sea from 2,000 km), bulk_carrier, general_cargo, roro, ropax; air air_freight; inland_waterway barge, container_barge."
          },
          "distance_type": {
            "enum": [
              "sfd",
              "gcd",
              "actual"
            ],
            "type": "string",
            "description": "Kind of distance_km: sfd = shortest feasible route, gcd = great circle, actual = actually travelled (e.g. odometer). Decides the distance adjustment factor (DAF) applied."
          },
          "repositioning_km": {
            "type": "number",
            "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."
          },
          "empty_trip_factor": {
            "type": "number",
            "description": "Trucks, with load_tonnes or load_factor: empty km driven per loaded km (e.g. 0.3)."
          },
          "energy_kwh_per_tkm": {
            "type": "number",
            "description": "Electric trains or trucks: electricity per tonne-km (the operator's figure; no default), with country."
          }
        },
        "description": "One transport movement with one mode and vehicle type (an ISO 14083 transport chain element).",
        "additionalProperties": false
      },
      "minItems": 1,
      "description": "The legs in order, from where the shipper hands the goods over to where the consignee receives them."
    },
    "weight_kg": {
      "type": "number",
      "description": "Cargo weight in kg (or give teu instead)"
    },
    "cargo_type": {
      "type": "string",
      "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)."
    },
    "add_road_legs": {
      "type": "boolean",
      "description": "Add 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."
    },
    "container_load": {
      "type": "string",
      "description": "With teu, instead of teu_net_tonnes: average (10 t), light (6 t) or heavy (14.5 t) per TEU, from the GLEC Framework"
    },
    "teu_net_tonnes": {
      "type": "number",
      "description": "With teu: net cargo tonnes per TEU (container tare is not added)"
    }
  },
  "additionalProperties": false
}
calculate_shipment annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true
}
calculate_shipments — Calculate many shipments
Advertised by the server during the last successful anonymous check.
Advertised read-only

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).

calculate_shipments input schema
{
  "type": "object",
  "required": [
    "shipments"
  ],
  "properties": {
    "explain": {
      "type": "boolean",
      "description": "Add the step-by-step calculation sheet of each shipment (up to 25)"
    },
    "shipments": {
      "type": "array",
      "items": {
        "type": "object",
        "required": [
          "legs"
        ],
        "properties": {
          "id": {
            "type": "string",
            "description": "Your reference for the shipment"
          },
          "teu": {
            "type": "number",
            "description": "Containers in TEU, instead of weight_kg; with teu_net_tonnes, or alone for GLEC's average of 10 t per TEU"
          },
          "hubs": {
            "type": "array",
            "items": {
              "type": "object",
              "required": [
                "hub_type"
              ],
              "properties": {
                "id": {
                  "type": "string",
                  "description": "Hub label"
                },
                "hub_type": {
                  "type": "string",
                  "description": "Hub type from the dataset"
                },
                "containers": {
                  "type": "number",
                  "description": "Containers handled, for intermodal terminals"
                }
              },
              "additionalProperties": false
            },
            "description": "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."
          },
          "legs": {
            "type": "array",
            "items": {
              "type": "object",
              "required": [
                "mode"
              ],
              "properties": {
                "id": {
                  "type": "string",
                  "description": "Your label for the leg"
                },
                "to": {
                  "type": "object",
                  "properties": {
                    "lat": {
                      "type": "number",
                      "maximum": 90,
                      "minimum": -90,
                      "description": "Latitude, decimal degrees"
                    },
                    "lon": {
                      "type": "number",
                      "maximum": 180,
                      "minimum": -180,
                      "description": "Longitude, decimal degrees"
                    },
                    "code": {
                      "type": "string",
                      "description": "Instead of lat/lon: a UN/LOCODE (e.g. NLRTM for Rotterdam) or IATA airport code (e.g. CPH)"
                    },
                    "name": {
                      "type": "string",
                      "description": "Label for the place, shown in results"
                    }
                  },
                  "description": "A place: coordinates (lat and lon, optionally name), or a code instead. Use find_places to look up coordinates or codes for a place name.",
                  "additionalProperties": false
                },
                "from": {
                  "type": "object",
                  "properties": {
                    "lat": {
                      "type": "number",
                      "maximum": 90,
                      "minimum": -90,
                      "description": "Latitude, decimal degrees"
                    },
                    "lon": {
                      "type": "number",
                      "maximum": 180,
                      "minimum": -180,
                      "description": "Longitude, decimal degrees"
                    },
                    "code": {
                      "type": "string",
                      "description": "Instead of lat/lon: a UN/LOCODE (e.g. NLRTM for Rotterdam) or IATA airport code (e.g. CPH)"
                    },
                    "name": {
                      "type": "string",
                      "description": "Label for the place, shown in results"
                    }
                  },
                  "description": "A place: coordinates (lat and lon, optionally name), or a code instead. Use find_places to look up coordinates or codes for a place name.",
                  "additionalProperties": false
                },
                "fuel": {
                  "type": "object",
                  "required": [
                    "fuel",
                    "amount"
                  ],
                  "properties": {
                    "fuel": {
                      "type": "string",
                      "description": "Fuel id or alias: diesel, petrol, hvo, marine_gas_oil, marine_fuel_oil, jet_fuel (per litre), electricity/<ISO3 country> (kWh), or others from list_vehicle_types with include_fuels"
                    },
                    "amount": {
                      "type": "number",
                      "description": "Amount in the fuel's unit (litres for the aliases)"
                    },
                    "factor": {
                      "type": "object",
                      "required": [
                        "unit",
                        "wtw_kg_per_unit",
                        "source"
                      ],
                      "properties": {
                        "unit": {
                          "type": "string",
                          "description": "Unit of amount, e.g. l, kg, kWh"
                        },
                        "source": {
                          "type": "string",
                          "description": "Who gives the factor, and for what"
                        },
                        "ttw_kg_per_unit": {
                          "type": "number",
                          "description": "Tank-to-wheel kg CO2e per unit (part of WTW)"
                        },
                        "wtw_kg_per_unit": {
                          "type": "number",
                          "description": "Well-to-wheel kg CO2e per unit"
                        },
                        "biogenic_co2_kg_per_unit": {
                          "type": "number",
                          "description": "Biogenic CO2 per unit, reported apart (optional)"
                        }
                      },
                      "description": "The fuel supplier's own emission factor, instead of the dataset's (fuel is then just its name).",
                      "additionalProperties": false
                    },
                    "vehicle_tonne_km": {
                      "type": "number",
                      "description": "Total tonne-km of the whole trip, to give this shipment its share of the fuel. Leave out if the trip carried only this shipment."
                    }
                  },
                  "description": "Measured fuel for the vehicle trip this leg is part of (primary data).",
                  "additionalProperties": false
                },
                "mode": {
                  "enum": [
                    "road",
                    "rail",
                    "sea",
                    "air",
                    "inland_waterway"
                  ],
                  "type": "string"
                },
                "country": {
                  "type": "string",
                  "description": "With energy_kwh_per_tkm: ISO 3166 alpha-3 country whose grid supplies the electricity, e.g. DEU"
                },
                "own_factor": {
                  "type": "object",
                  "required": [
                    "wtw_g_per_tkm",
                    "source"
                  ],
                  "properties": {
                    "source": {
                      "type": "string",
                      "description": "Who measured it, and for what (e.g. the carrier's report and year)"
                    },
                    "ttw_g_per_tkm": {
                      "type": "number",
                      "description": "Tank-to-wheel g CO2e per tonne-km (part of WTW)"
                    },
                    "wtw_g_per_tkm": {
                      "type": "number",
                      "description": "Well-to-wheel g CO2e per tonne-km"
                    },
                    "distance_basis": {
                      "enum": [
                        "sfd",
                        "gcd",
                        "actual"
                      ],
                      "type": "string",
                      "description": "Distance type the intensity is per tonne-km of; leave out if it matches the leg's"
                    }
                  },
                  "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.",
                  "additionalProperties": false
                },
                "distance_km": {
                  "type": "number",
                  "description": "The distance, if known. When given, it is used as is and not routed; say what kind it is with distance_type. Leave it out to route from the coordinates (preferred)."
                },
                "load_factor": {
                  "type": "number",
                  "description": "Trucks: load as a share (0-1) of the load model's payload, DESNZ's average full load (17.9 t for an articulated truck over 33 t), NOT of the truck's rated payload as in GLEC or EcoTransIT. Give load_tonnes or load_factor, not both."
                },
                "load_tonnes": {
                  "type": "number",
                  "description": "Trucks: the tonnes on the truck (all cargo, averaged over the loaded km), which switches the leg to the load model. Prefer this over load_factor when the weight is known."
                },
                "vehicle_type": {
                  "type": "string",
                  "description": "A short alias or a full id from list_vehicle_types. Common: road hgv (average truck), hgv_artic_33t (articulated truck over 33 t, a 40 t semitrailer), hgv_rigid, van; rail freight_train; sea container_ship (short-sea factor under 2,000 km, deep-sea from 2,000 km), bulk_carrier, general_cargo, roro, ropax; air air_freight; inland_waterway barge, container_barge."
                },
                "distance_type": {
                  "enum": [
                    "sfd",
                    "gcd",
                    "actual"
                  ],
                  "type": "string",
                  "description": "Kind of distance_km: sfd = shortest feasible route, gcd = great circle, actual = actually travelled (e.g. odometer). Decides the distance adjustment factor (DAF) applied."
                },
                "repositioning_km": {
                  "type": "number",
                  "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."
                },
                "empty_trip_factor": {
                  "type": "number",
                  "description": "Trucks, with load_tonnes or load_factor: empty km driven per loaded km (e.g. 0.3)."
                },
                "energy_kwh_per_tkm": {
                  "type": "number",
                  "description": "Electric trains or trucks: electricity per tonne-km (the operator's figure; no default), with country."
                }
              },
              "description": "One transport movement with one mode and vehicle type (an ISO 14083 transport chain element).",
              "additionalProperties": false
            },
            "minItems": 1,
            "description": "The legs in order, from where the shipper hands the goods over to where the consignee receives them."
          },
          "weight_kg": {
            "type": "number",
            "description": "Cargo weight in kg (or give teu instead)"
          },
          "cargo_type": {
            "type": "string",
            "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)."
          },
          "add_road_legs": {
            "type": "boolean",
            "description": "Add 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."
          },
          "container_load": {
            "type": "string",
            "description": "With teu, instead of teu_net_tonnes: average (10 t), light (6 t) or heavy (14.5 t) per TEU, from the GLEC Framework"
          },
          "teu_net_tonnes": {
            "type": "number",
            "description": "With teu: net cargo tonnes per TEU (container tare is not added)"
          }
        },
        "additionalProperties": false
      },
      "minItems": 1,
      "description": "The shipments. Without an API key the public service takes up to 100 per call; with one, up to 10,000."
    },
    "add_road_legs": {
      "type": "boolean",
      "description": "Add 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."
    }
  },
  "additionalProperties": false
}
calculate_shipments annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true
}
emissions_report — Emissions report over many shipments
Advertised by the server during the last successful anonymous check.
Advertised read-only

Calculates shipments and returns a report with the basic content ISO 14083 asks for at the level of transport services (GLEC v3.3 Section 2 Ch.1): coverage and failures, totals split into TTW and WTT, intensity, per mode and hub type, energy carriers, data quality (primary/modelled/default shares, sources, models), distance adjustments, and notes. Returned as Markdown and as structured data.

emissions_report input schema
{
  "type": "object",
  "required": [
    "shipments"
  ],
  "properties": {
    "title": {
      "type": "string",
      "description": "Report title"
    },
    "period_to": {
      "type": "string",
      "description": "End of the period covered, YYYY-MM-DD"
    },
    "reference": {
      "type": "string",
      "description": "Where supporting information can be found"
    },
    "shipments": {
      "type": "array",
      "items": {
        "type": "object",
        "required": [
          "legs"
        ],
        "properties": {
          "id": {
            "type": "string",
            "description": "Your reference for the shipment"
          },
          "teu": {
            "type": "number",
            "description": "Containers in TEU, instead of weight_kg; with teu_net_tonnes, or alone for GLEC's average of 10 t per TEU"
          },
          "hubs": {
            "type": "array",
            "items": {
              "type": "object",
              "required": [
                "hub_type"
              ],
              "properties": {
                "id": {
                  "type": "string",
                  "description": "Hub label"
                },
                "hub_type": {
                  "type": "string",
                  "description": "Hub type from the dataset"
                },
                "containers": {
                  "type": "number",
                  "description": "Containers handled, for intermodal terminals"
                }
              },
              "additionalProperties": false
            },
            "description": "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."
          },
          "legs": {
            "type": "array",
            "items": {
              "type": "object",
              "required": [
                "mode"
              ],
              "properties": {
                "id": {
                  "type": "string",
                  "description": "Your label for the leg"
                },
                "to": {
                  "type": "object",
                  "properties": {
                    "lat": {
                      "type": "number",
                      "maximum": 90,
                      "minimum": -90,
                      "description": "Latitude, decimal degrees"
                    },
                    "lon": {
                      "type": "number",
                      "maximum": 180,
                      "minimum": -180,
                      "description": "Longitude, decimal degrees"
                    },
                    "code": {
                      "type": "string",
                      "description": "Instead of lat/lon: a UN/LOCODE (e.g. NLRTM for Rotterdam) or IATA airport code (e.g. CPH)"
                    },
                    "name": {
                      "type": "string",
                      "description": "Label for the place, shown in results"
                    }
                  },
                  "description": "A place: coordinates (lat and lon, optionally name), or a code instead. Use find_places to look up coordinates or codes for a place name.",
                  "additionalProperties": false
                },
                "from": {
                  "type": "object",
                  "properties": {
                    "lat": {
                      "type": "number",
                      "maximum": 90,
                      "minimum": -90,
                      "description": "Latitude, decimal degrees"
                    },
                    "lon": {
                      "type": "number",
                      "maximum": 180,
                      "minimum": -180,
                      "description": "Longitude, decimal degrees"
                    },
                    "code": {
                      "type": "string",
                      "description": "Instead of lat/lon: a UN/LOCODE (e.g. NLRTM for Rotterdam) or IATA airport code (e.g. CPH)"
                    },
                    "name": {
                      "type": "string",
                      "description": "Label for the place, shown in results"
                    }
                  },
                  "description": "A place: coordinates (lat and lon, optionally name), or a code instead. Use find_places to look up coordinates or codes for a place name.",
                  "additionalProperties": false
                },
                "fuel": {
                  "type": "object",
                  "required": [
                    "fuel",
                    "amount"
                  ],
                  "properties": {
                    "fuel": {
                      "type": "string",
                      "description": "Fuel id or alias: diesel, petrol, hvo, marine_gas_oil, marine_fuel_oil, jet_fuel (per litre), electricity/<ISO3 country> (kWh), or others from list_vehicle_types with include_fuels"
                    },
                    "amount": {
                      "type": "number",
                      "description": "Amount in the fuel's unit (litres for the aliases)"
                    },
                    "factor": {
                      "type": "object",
                      "required": [
                        "unit",
                        "wtw_kg_per_unit",
                        "source"
                      ],
                      "properties": {
                        "unit": {
                          "type": "string",
                          "description": "Unit of amount, e.g. l, kg, kWh"
                        },
                        "source": {
                          "type": "string",
                          "description": "Who gives the factor, and for what"
                        },
                        "ttw_kg_per_unit": {
                          "type": "number",
                          "description": "Tank-to-wheel kg CO2e per unit (part of WTW)"
                        },
                        "wtw_kg_per_unit": {
                          "type": "number",
                          "description": "Well-to-wheel kg CO2e per unit"
                        },
                        "biogenic_co2_kg_per_unit": {
                          "type": "number",
                          "description": "Biogenic CO2 per unit, reported apart (optional)"
                        }
                      },
                      "description": "The fuel supplier's own emission factor, instead of the dataset's (fuel is then just its name).",
                      "additionalProperties": false
                    },
                    "vehicle_tonne_km": {
                      "type": "number",
                      "description": "Total tonne-km of the whole trip, to give this shipment its share of the fuel. Leave out if the trip carried only this shipment."
                    }
                  },
                  "description": "Measured fuel for the vehicle trip this leg is part of (primary data).",
                  "additionalProperties": false
                },
                "mode": {
                  "enum": [
                    "road",
                    "rail",
                    "sea",
                    "air",
                    "inland_waterway"
                  ],
                  "type": "string"
                },
                "country": {
                  "type": "string",
                  "description": "With energy_kwh_per_tkm: ISO 3166 alpha-3 country whose grid supplies the electricity, e.g. DEU"
                },
                "own_factor": {
                  "type": "object",
                  "required": [
                    "wtw_g_per_tkm",
                    "source"
                  ],
                  "properties": {
                    "source": {
                      "type": "string",
                      "description": "Who measured it, and for what (e.g. the carrier's report and year)"
                    },
                    "ttw_g_per_tkm": {
                      "type": "number",
                      "description": "Tank-to-wheel g CO2e per tonne-km (part of WTW)"
                    },
                    "wtw_g_per_tkm": {
                      "type": "number",
                      "description": "Well-to-wheel g CO2e per tonne-km"
                    },
                    "distance_basis": {
                      "enum": [
                        "sfd",
                        "gcd",
                        "actual"
                      ],
                      "type": "string",
                      "description": "Distance type the intensity is per tonne-km of; leave out if it matches the leg's"
                    }
                  },
                  "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.",
                  "additionalProperties": false
                },
                "distance_km": {
                  "type": "number",
                  "description": "The distance, if known. When given, it is used as is and not routed; say what kind it is with distance_type. Leave it out to route from the coordinates (preferred)."
                },
                "load_factor": {
                  "type": "number",
                  "description": "Trucks: load as a share (0-1) of the load model's payload, DESNZ's average full load (17.9 t for an articulated truck over 33 t), NOT of the truck's rated payload as in GLEC or EcoTransIT. Give load_tonnes or load_factor, not both."
                },
                "load_tonnes": {
                  "type": "number",
                  "description": "Trucks: the tonnes on the truck (all cargo, averaged over the loaded km), which switches the leg to the load model. Prefer this over load_factor when the weight is known."
                },
                "vehicle_type": {
                  "type": "string",
                  "description": "A short alias or a full id from list_vehicle_types. Common: road hgv (average truck), hgv_artic_33t (articulated truck over 33 t, a 40 t semitrailer), hgv_rigid, van; rail freight_train; sea container_ship (short-sea factor under 2,000 km, deep-sea from 2,000 km), bulk_carrier, general_cargo, roro, ropax; air air_freight; inland_waterway barge, container_barge."
                },
                "distance_type": {
                  "enum": [
                    "sfd",
                    "gcd",
                    "actual"
                  ],
                  "type": "string",
                  "description": "Kind of distance_km: sfd = shortest feasible route, gcd = great circle, actual = actually travelled (e.g. odometer). Decides the distance adjustment factor (DAF) applied."
                },
                "repositioning_km": {
                  "type": "number",
                  "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."
                },
                "empty_trip_factor": {
                  "type": "number",
                  "description": "Trucks, with load_tonnes or load_factor: empty km driven per loaded km (e.g. 0.3)."
                },
                "energy_kwh_per_tkm": {
                  "type": "number",
                  "description": "Electric trains or trucks: electricity per tonne-km (the operator's figure; no default), with country."
                }
              },
              "description": "One transport movement with one mode and vehicle type (an ISO 14083 transport chain element).",
              "additionalProperties": false
            },
            "minItems": 1,
            "description": "The legs in order, from where the shipper hands the goods over to where the consignee receives them."
          },
          "weight_kg": {
            "type": "number",
            "description": "Cargo weight in kg (or give teu instead)"
          },
          "cargo_type": {
            "type": "string",
            "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)."
          },
          "add_road_legs": {
            "type": "boolean",
            "description": "Add 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."
          },
          "container_load": {
            "type": "string",
            "description": "With teu, instead of teu_net_tonnes: average (10 t), light (6 t) or heavy (14.5 t) per TEU, from the GLEC Framework"
          },
          "teu_net_tonnes": {
            "type": "number",
            "description": "With teu: net cargo tonnes per TEU (container tare is not added)"
          }
        },
        "additionalProperties": false
      },
      "minItems": 1,
      "description": "The shipments. Without an API key the public service takes up to 100 per call; with one, up to 10,000."
    },
    "declare_iso": {
      "type": "boolean",
      "description": "Add the ISO 14083:2023 conformity statement. Only when the user explicitly confirms that their data collection and boundaries conform."
    },
    "period_from": {
      "type": "string",
      "description": "Start of the period covered, YYYY-MM-DD"
    },
    "organisation": {
      "type": "string",
      "description": "Organisation the report is for"
    },
    "add_road_legs": {
      "type": "boolean",
      "description": "Add 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."
    },
    "scope3_category": {
      "enum": [
        4,
        9
      ],
      "type": "integer",
      "description": "GHG Protocol scope 3 category of this transport for the user's company: 4 if it pays for the transport (inbound or outbound), 9 for its sold products moved by transport it doesn't pay for. Ask; leave out if unknown."
    }
  },
  "additionalProperties": false
}
emissions_report annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true
}
compare_scenario — What-if: shipments now vs with changes
Advertised by the server during the last successful anonymous check.
Advertised read-only

Calculates the shipments as they are and with changes, with the same method (GLEC v3.3, ISO 14083), and returns both totals (TTW, WTT, WTW), the difference, per change how many shipments and legs it affected and the sources of its values, and per shipment notes. Changes: road_to_rail (defaults: road legs over 300 km, 30% of the cargo, from the EU Transport White Paper 2011; rail part over 100 km in a straight line, from Directive 92/106/EEC; road to and from the nearest rail terminal, each terminal handling at GLEC v3.3's intermodal terminal value), electrify (needs the user's kwh_per_tkm, a grid country and the source), fuel_switch (hvo, b100, biomethane, biomethane_lng, cng, lng for diesel trucks), load. Results are scenarios, not reported emissions: say so to the user.

compare_scenario input schema
{
  "type": "object",
  "required": [
    "shipments",
    "plan"
  ],
  "properties": {
    "plan": {
      "type": "object",
      "required": [
        "changes"
      ],
      "properties": {
        "name": {
          "type": "string",
          "description": "Name of the scenario"
        },
        "changes": {
          "type": "array",
          "items": {
            "type": "object",
            "required": [
              "type"
            ],
            "properties": {
              "fuel": {
                "type": "string",
                "description": "fuel_switch: hvo, b100, biodiesel, biomethane, biomethane_lng, cng or lng"
              },
              "type": {
                "enum": [
                  "road_to_rail",
                  "electrify",
                  "fuel_switch",
                  "load"
                ],
                "type": "string"
              },
              "share": {
                "type": "number",
                "description": "Share of the cargo on each matching leg, 0..1 (default 0.3 for road_to_rail, else 1)"
              },
              "source": {
                "type": "string",
                "description": "Where the user's values come from (required for electrify)"
              },
              "country": {
                "type": "string",
                "description": "electrify: ISO 3166 alpha-3 country for the grid factor, e.g. DEU"
              },
              "terminal": {
                "enum": [
                  "nearest",
                  "best_trip"
                ],
                "type": "string",
                "description": "road_to_rail: nearest rail terminal reachable by road (default, Directive 92/106/EEC) or the best trip among the nearest"
              },
              "kwh_per_tkm": {
                "type": "number",
                "description": "electrify: kWh per tonne-km, from the user"
              },
              "load_factor": {
                "type": "number",
                "description": "load: share of the model's average full load"
              },
              "load_tonnes": {
                "type": "number",
                "description": "load: tonnes on the truck"
              },
              "min_rail_km": {
                "type": "number",
                "description": "road_to_rail: rail part longer than this in a straight line (default 100)"
              },
              "min_road_km": {
                "type": "number",
                "description": "road_to_rail: road legs longer than this (default 300)"
              },
              "energy_ratio": {
                "type": "number",
                "description": "fuel_switch: energy per tonne-km relative to the diesel truck (default 1; give source if not 1)"
              },
              "rail_vehicle": {
                "type": "string",
                "description": "road_to_rail: default freight_train"
              },
              "vehicle_types": {
                "type": "array",
                "items": {
                  "type": "string"
                },
                "description": "Road vehicle types the change applies to; empty: all road legs"
              },
              "empty_trip_factor": {
                "type": "number",
                "description": "load: empty km per loaded km"
              }
            },
            "additionalProperties": false
          },
          "minItems": 1
        }
      },
      "additionalProperties": false
    },
    "shipments": {
      "type": "array",
      "items": {
        "type": "object",
        "required": [
          "legs"
        ],
        "properties": {
          "id": {
            "type": "string",
            "description": "Your reference for the shipment"
          },
          "teu": {
            "type": "number",
            "description": "Containers in TEU, instead of weight_kg; with teu_net_tonnes, or alone for GLEC's average of 10 t per TEU"
          },
          "hubs": {
            "type": "array",
            "items": {
              "type": "object",
              "required": [
                "hub_type"
              ],
              "properties": {
                "id": {
                  "type": "string",
                  "description": "Hub label"
                },
                "hub_type": {
                  "type": "string",
                  "description": "Hub type from the dataset"
                },
                "containers": {
                  "type": "number",
                  "description": "Containers handled, for intermodal terminals"
                }
              },
              "additionalProperties": false
            },
            "description": "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."
          },
          "legs": {
            "type": "array",
            "items": {
              "type": "object",
              "required": [
                "mode"
              ],
              "properties": {
                "id": {
                  "type": "string",
                  "description": "Your label for the leg"
                },
                "to": {
                  "type": "object",
                  "properties": {
                    "lat": {
                      "type": "number",
                      "maximum": 90,
                      "minimum": -90,
                      "description": "Latitude, decimal degrees"
                    },
                    "lon": {
                      "type": "number",
                      "maximum": 180,
                      "minimum": -180,
                      "description": "Longitude, decimal degrees"
                    },
                    "code": {
                      "type": "string",
                      "description": "Instead of lat/lon: a UN/LOCODE (e.g. NLRTM for Rotterdam) or IATA airport code (e.g. CPH)"
                    },
                    "name": {
                      "type": "string",
                      "description": "Label for the place, shown in results"
                    }
                  },
                  "description": "A place: coordinates (lat and lon, optionally name), or a code instead. Use find_places to look up coordinates or codes for a place name.",
                  "additionalProperties": false
                },
                "from": {
                  "type": "object",
                  "properties": {
                    "lat": {
                      "type": "number",
                      "maximum": 90,
                      "minimum": -90,
                      "description": "Latitude, decimal degrees"
                    },
                    "lon": {
                      "type": "number",
                      "maximum": 180,
                      "minimum": -180,
                      "description": "Longitude, decimal degrees"
                    },
                    "code": {
                      "type": "string",
                      "description": "Instead of lat/lon: a UN/LOCODE (e.g. NLRTM for Rotterdam) or IATA airport code (e.g. CPH)"
                    },
                    "name": {
                      "type": "string",
                      "description": "Label for the place, shown in results"
                    }
                  },
                  "description": "A place: coordinates (lat and lon, optionally name), or a code instead. Use find_places to look up coordinates or codes for a place name.",
                  "additionalProperties": false
                },
                "fuel": {
                  "type": "object",
                  "required": [
                    "fuel",
                    "amount"
                  ],
                  "properties": {
                    "fuel": {
                      "type": "string",
                      "description": "Fuel id or alias: diesel, petrol, hvo, marine_gas_oil, marine_fuel_oil, jet_fuel (per litre), electricity/<ISO3 country> (kWh), or others from list_vehicle_types with include_fuels"
                    },
                    "amount": {
                      "type": "number",
                      "description": "Amount in the fuel's unit (litres for the aliases)"
                    },
                    "factor": {
                      "type": "object",
                      "required": [
                        "unit",
                        "wtw_kg_per_unit",
                        "source"
                      ],
                      "properties": {
                        "unit": {
                          "type": "string",
                          "description": "Unit of amount, e.g. l, kg, kWh"
                        },
                        "source": {
                          "type": "string",
                          "description": "Who gives the factor, and for what"
                        },
                        "ttw_kg_per_unit": {
                          "type": "number",
                          "description": "Tank-to-wheel kg CO2e per unit (part of WTW)"
                        },
                        "wtw_kg_per_unit": {
                          "type": "number",
                          "description": "Well-to-wheel kg CO2e per unit"
                        },
                        "biogenic_co2_kg_per_unit": {
                          "type": "number",
                          "description": "Biogenic CO2 per unit, reported apart (optional)"
                        }
                      },
                      "description": "The fuel supplier's own emission factor, instead of the dataset's (fuel is then just its name).",
                      "additionalProperties": false
                    },
                    "vehicle_tonne_km": {
                      "type": "number",
                      "description": "Total tonne-km of the whole trip, to give this shipment its share of the fuel. Leave out if the trip carried only this shipment."
                    }
                  },
                  "description": "Measured fuel for the vehicle trip this leg is part of (primary data).",
                  "additionalProperties": false
                },
                "mode": {
                  "enum": [
                    "road",
                    "rail",
                    "sea",
                    "air",
                    "inland_waterway"
                  ],
                  "type": "string"
                },
                "country": {
                  "type": "string",
                  "description": "With energy_kwh_per_tkm: ISO 3166 alpha-3 country whose grid supplies the electricity, e.g. DEU"
                },
                "own_factor": {
                  "type": "object",
                  "required": [
                    "wtw_g_per_tkm",
                    "source"
                  ],
                  "properties": {
                    "source": {
                      "type": "string",
                      "description": "Who measured it, and for what (e.g. the carrier's report and year)"
                    },
                    "ttw_g_per_tkm": {
                      "type": "number",
                      "description": "Tank-to-wheel g CO2e per tonne-km (part of WTW)"
                    },
                    "wtw_g_per_tkm": {
                      "type": "number",
                      "description": "Well-to-wheel g CO2e per tonne-km"
                    },
                    "distance_basis": {
                      "enum": [
                        "sfd",
                        "gcd",
                        "actual"
                      ],
                      "type": "string",
                      "description": "Distance type the intensity is per tonne-km of; leave out if it matches the leg's"
                    }
                  },
                  "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.",
                  "additionalProperties": false
                },
                "distance_km": {
                  "type": "number",
                  "description": "The distance, if known. When given, it is used as is and not routed; say what kind it is with distance_type. Leave it out to route from the coordinates (preferred)."
                },
                "load_factor": {
                  "type": "number",
                  "description": "Trucks: load as a share (0-1) of the load model's payload, DESNZ's average full load (17.9 t for an articulated truck over 33 t), NOT of the truck's rated payload as in GLEC or EcoTransIT. Give load_tonnes or load_factor, not both."
                },
                "load_tonnes": {
                  "type": "number",
                  "description": "Trucks: the tonnes on the truck (all cargo, averaged over the loaded km), which switches the leg to the load model. Prefer this over load_factor when the weight is known."
                },
                "vehicle_type": {
                  "type": "string",
                  "description": "A short alias or a full id from list_vehicle_types. Common: road hgv (average truck), hgv_artic_33t (articulated truck over 33 t, a 40 t semitrailer), hgv_rigid, van; rail freight_train; sea container_ship (short-sea factor under 2,000 km, deep-sea from 2,000 km), bulk_carrier, general_cargo, roro, ropax; air air_freight; inland_waterway barge, container_barge."
                },
                "distance_type": {
                  "enum": [
                    "sfd",
                    "gcd",
                    "actual"
                  ],
                  "type": "string",
                  "description": "Kind of distance_km: sfd = shortest feasible route, gcd = great circle, actual = actually travelled (e.g. odometer). Decides the distance adjustment factor (DAF) applied."
                },
                "repositioning_km": {
                  "type": "number",
                  "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."
                },
                "empty_trip_factor": {
                  "type": "number",
                  "description": "Trucks, with load_tonnes or load_factor: empty km driven per loaded km (e.g. 0.3)."
                },
                "energy_kwh_per_tkm": {
                  "type": "number",
                  "description": "Electric trains or trucks: electricity per tonne-km (the operator's figure; no default), with country."
                }
              },
              "description": "One transport movement with one mode and vehicle type (an ISO 14083 transport chain element).",
              "additionalProperties": false
            },
            "minItems": 1,
            "description": "The legs in order, from where the shipper hands the goods over to where the consignee receives them."
          },
          "weight_kg": {
            "type": "number",
            "description": "Cargo weight in kg (or give teu instead)"
          },
          "cargo_type": {
            "type": "string",
            "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)."
          },
          "add_road_legs": {
            "type": "boolean",
            "description": "Add 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."
          },
          "container_load": {
            "type": "string",
            "description": "With teu, instead of teu_net_tonnes: average (10 t), light (6 t) or heavy (14.5 t) per TEU, from the GLEC Framework"
          },
          "teu_net_tonnes": {
            "type": "number",
            "description": "With teu: net cargo tonnes per TEU (container tare is not added)"
          }
        },
        "additionalProperties": false
      },
      "minItems": 1,
      "description": "The shipments. Without an API key the public service takes up to 100 per call; with one, up to 10,000."
    },
    "add_road_legs": {
      "type": "boolean",
      "description": "Add 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."
    }
  },
  "additionalProperties": false
}
compare_scenario annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true
}
recommend_routes — Route changes that lower emissions
Advertised by the server during the last successful anonymous check.
Advertised read-only

For each shipment, tries road legs on rail, inland waterway and short sea, air legs by sea or rail, other sea ports, (when a load is given) fuller loads, and on the same route larger, electric and bio-LNG trucks (GLEC v3.3 default values, only where GLEC gives them); each kind is in one of the GLEC Framework's five reduction areas; calculates each alternative with the same method as the shipment (GLEC v3.3, ISO 14083) and returns those lower than now, best first, with totals per kind and per lane, the sources of the rules and the limitations. Rules (defaults, settable): road legs over 300 km (EU Transport White Paper 2011); rail, waterway or sea part over 100 km in a straight line, road to a waterway or sea port within 150 km, nearest rail terminal (Directive 92/106/EEC). New rail, waterway and sea legs run between terminals with road to the nearest one; each terminal handling counts GLEC v3.3's intermodal terminal value per container (not at airports or Ro-Ro terminals). It knows nothing about transit times, costs or whether a service runs: tell the user, and that results are scenarios, not reported emissions. The website's Recommendations page (/recommend) lets the user filter and pick interactively.

recommend_routes input schema
{
  "type": "object",
  "required": [
    "shipments"
  ],
  "properties": {
    "settings": {
      "type": "object",
      "properties": {
        "kinds": {
          "type": "array",
          "items": {
            "enum": [
              "road_to_rail",
              "road_to_waterway",
              "road_to_short_sea",
              "air_to_sea",
              "air_to_rail",
              "other_port",
              "fuller_loads",
              "larger_truck",
              "electric_truck",
              "bio_lng_truck"
            ],
            "type": "string"
          },
          "description": "Kinds to try; empty: all (fuller_loads only with a load)"
        },
        "source": {
          "type": "string",
          "description": "Where the load values come from"
        },
        "terminal": {
          "enum": [
            "nearest",
            "best_trip"
          ],
          "type": "string"
        },
        "max_ports": {
          "type": "number",
          "description": "other ports to try per port (default 4)"
        },
        "load_factor": {
          "type": "number",
          "description": "fuller_loads: share of the load model's average full load"
        },
        "load_tonnes": {
          "type": "number",
          "description": "fuller_loads: tonnes on each road vehicle, from the user"
        },
        "min_main_km": {
          "type": "number",
          "description": "Rail, waterway or sea part longer than this in a straight line (default 100)"
        },
        "min_road_km": {
          "type": "number",
          "description": "Road legs longer than this are tried on rail, waterway and short sea (default 300)"
        },
        "sea_vehicle": {
          "type": "string",
          "description": "instead of air; default container_ship"
        },
        "load_vehicle": {
          "type": "string",
          "description": "fuller_loads: another road vehicle type"
        },
        "rail_vehicle": {
          "type": "string",
          "description": "default freight_train"
        },
        "port_radius_km": {
          "type": "number",
          "description": "other ports within this of the port used now (default 800)"
        },
        "max_port_road_km": {
          "type": "number",
          "description": "Road to and from a waterway or sea port within this in a straight line (default 150)"
        },
        "waterway_vehicle": {
          "type": "string",
          "description": "default container_barge"
        },
        "empty_trip_factor": {
          "type": "number",
          "description": "fuller_loads: empty km per loaded km"
        },
        "short_sea_vehicle": {
          "type": "string",
          "description": "default roro"
        }
      },
      "additionalProperties": false
    },
    "shipments": {
      "type": "array",
      "items": {
        "type": "object",
        "required": [
          "legs"
        ],
        "properties": {
          "id": {
            "type": "string",
            "description": "Your reference for the shipment"
          },
          "teu": {
            "type": "number",
            "description": "Containers in TEU, instead of weight_kg; with teu_net_tonnes, or alone for GLEC's average of 10 t per TEU"
          },
          "hubs": {
            "type": "array",
            "items": {
              "type": "object",
              "required": [
                "hub_type"
              ],
              "properties": {
                "id": {
                  "type": "string",
                  "description": "Hub label"
                },
                "hub_type": {
                  "type": "string",
                  "description": "Hub type from the dataset"
                },
                "containers": {
                  "type": "number",
                  "description": "Containers handled, for intermodal terminals"
                }
              },
              "additionalProperties": false
            },
            "description": "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."
          },
          "legs": {
            "type": "array",
            "items": {
              "type": "object",
              "required": [
                "mode"
              ],
              "properties": {
                "id": {
                  "type": "string",
                  "description": "Your label for the leg"
                },
                "to": {
                  "type": "object",
                  "properties": {
                    "lat": {
                      "type": "number",
                      "maximum": 90,
                      "minimum": -90,
                      "description": "Latitude, decimal degrees"
                    },
                    "lon": {
                      "type": "number",
                      "maximum": 180,
                      "minimum": -180,
                      "description": "Longitude, decimal degrees"
                    },
                    "code": {
                      "type": "string",
                      "description": "Instead of lat/lon: a UN/LOCODE (e.g. NLRTM for Rotterdam) or IATA airport code (e.g. CPH)"
                    },
                    "name": {
                      "type": "string",
                      "description": "Label for the place, shown in results"
                    }
                  },
                  "description": "A place: coordinates (lat and lon, optionally name), or a code instead. Use find_places to look up coordinates or codes for a place name.",
                  "additionalProperties": false
                },
                "from": {
                  "type": "object",
                  "properties": {
                    "lat": {
                      "type": "number",
                      "maximum": 90,
                      "minimum": -90,
                      "description": "Latitude, decimal degrees"
                    },
                    "lon": {
                      "type": "number",
                      "maximum": 180,
                      "minimum": -180,
                      "description": "Longitude, decimal degrees"
                    },
                    "code": {
                      "type": "string",
                      "description": "Instead of lat/lon: a UN/LOCODE (e.g. NLRTM for Rotterdam) or IATA airport code (e.g. CPH)"
                    },
                    "name": {
                      "type": "string",
                      "description": "Label for the place, shown in results"
                    }
                  },
                  "description": "A place: coordinates (lat and lon, optionally name), or a code instead. Use find_places to look up coordinates or codes for a place name.",
                  "additionalProperties": false
                },
                "fuel": {
                  "type": "object",
                  "required": [
                    "fuel",
                    "amount"
                  ],
                  "properties": {
                    "fuel": {
                      "type": "string",
                      "description": "Fuel id or alias: diesel, petrol, hvo, marine_gas_oil, marine_fuel_oil, jet_fuel (per litre), electricity/<ISO3 country> (kWh), or others from list_vehicle_types with include_fuels"
                    },
                    "amount": {
                      "type": "number",
                      "description": "Amount in the fuel's unit (litres for the aliases)"
                    },
                    "factor": {
                      "type": "object",
                      "required": [
                        "unit",
                        "wtw_kg_per_unit",
                        "source"
                      ],
                      "properties": {
                        "unit": {
                          "type": "string",
                          "description": "Unit of amount, e.g. l, kg, kWh"
                        },
                        "source": {
                          "type": "string",
                          "description": "Who gives the factor, and for what"
                        },
                        "ttw_kg_per_unit": {
                          "type": "number",
                          "description": "Tank-to-wheel kg CO2e per unit (part of WTW)"
                        },
                        "wtw_kg_per_unit": {
                          "type": "number",
                          "description": "Well-to-wheel kg CO2e per unit"
                        },
                        "biogenic_co2_kg_per_unit": {
                          "type": "number",
                          "description": "Biogenic CO2 per unit, reported apart (optional)"
                        }
                      },
                      "description": "The fuel supplier's own emission factor, instead of the dataset's (fuel is then just its name).",
                      "additionalProperties": false
                    },
                    "vehicle_tonne_km": {
                      "type": "number",
                      "description": "Total tonne-km of the whole trip, to give this shipment its share of the fuel. Leave out if the trip carried only this shipment."
                    }
                  },
                  "description": "Measured fuel for the vehicle trip this leg is part of (primary data).",
                  "additionalProperties": false
                },
                "mode": {
                  "enum": [
                    "road",
                    "rail",
                    "sea",
                    "air",
                    "inland_waterway"
                  ],
                  "type": "string"
                },
                "country": {
                  "type": "string",
                  "description": "With energy_kwh_per_tkm: ISO 3166 alpha-3 country whose grid supplies the electricity, e.g. DEU"
                },
                "own_factor": {
                  "type": "object",
                  "required": [
                    "wtw_g_per_tkm",
                    "source"
                  ],
                  "properties": {
                    "source": {
                      "type": "string",
                      "description": "Who measured it, and for what (e.g. the carrier's report and year)"
                    },
                    "ttw_g_per_tkm": {
                      "type": "number",
                      "description": "Tank-to-wheel g CO2e per tonne-km (part of WTW)"
                    },
                    "wtw_g_per_tkm": {
                      "type": "number",
                      "description": "Well-to-wheel g CO2e per tonne-km"
                    },
                    "distance_basis": {
                      "enum": [
                        "sfd",
                        "gcd",
                        "actual"
                      ],
                      "type": "string",
                      "description": "Distance type the intensity is per tonne-km of; leave out if it matches the leg's"
                    }
                  },
                  "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.",
                  "additionalProperties": false
                },
                "distance_km": {
                  "type": "number",
                  "description": "The distance, if known. When given, it is used as is and not routed; say what kind it is with distance_type. Leave it out to route from the coordinates (preferred)."
                },
                "load_factor": {
                  "type": "number",
                  "description": "Trucks: load as a share (0-1) of the load model's payload, DESNZ's average full load (17.9 t for an articulated truck over 33 t), NOT of the truck's rated payload as in GLEC or EcoTransIT. Give load_tonnes or load_factor, not both."
                },
                "load_tonnes": {
                  "type": "number",
                  "description": "Trucks: the tonnes on the truck (all cargo, averaged over the loaded km), which switches the leg to the load model. Prefer this over load_factor when the weight is known."
                },
                "vehicle_type": {
                  "type": "string",
                  "description": "A short alias or a full id from list_vehicle_types. Common: road hgv (average truck), hgv_artic_33t (articulated truck over 33 t, a 40 t semitrailer), hgv_rigid, van; rail freight_train; sea container_ship (short-sea factor under 2,000 km, deep-sea from 2,000 km), bulk_carrier, general_cargo, roro, ropax; air air_freight; inland_waterway barge, container_barge."
                },
                "distance_type": {
                  "enum": [
                    "sfd",
                    "gcd",
                    "actual"
                  ],
                  "type": "string",
                  "description": "Kind of distance_km: sfd = shortest feasible route, gcd = great circle, actual = actually travelled (e.g. odometer). Decides the distance adjustment factor (DAF) applied."
                },
                "repositioning_km": {
                  "type": "number",
                  "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."
                },
                "empty_trip_factor": {
                  "type": "number",
                  "description": "Trucks, with load_tonnes or load_factor: empty km driven per loaded km (e.g. 0.3)."
                },
                "energy_kwh_per_tkm": {
                  "type": "number",
                  "description": "Electric trains or trucks: electricity per tonne-km (the operator's figure; no default), with country."
                }
              },
              "description": "One transport movement with one mode and vehicle type (an ISO 14083 transport chain element).",
              "additionalProperties": false
            },
            "minItems": 1,
            "description": "The legs in order, from where the shipper hands the goods over to where the consignee receives them."
          },
          "weight_kg": {
            "type": "number",
            "description": "Cargo weight in kg (or give teu instead)"
          },
          "cargo_type": {
            "type": "string",
            "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)."
          },
          "add_road_legs": {
            "type": "boolean",
            "description": "Add 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."
          },
          "container_load": {
            "type": "string",
            "description": "With teu, instead of teu_net_tonnes: average (10 t), light (6 t) or heavy (14.5 t) per TEU, from the GLEC Framework"
          },
          "teu_net_tonnes": {
            "type": "number",
            "description": "With teu: net cargo tonnes per TEU (container tare is not added)"
          }
        },
        "additionalProperties": false
      },
      "minItems": 1,
      "description": "The shipments. Without an API key the public service takes up to 100 per call; with one, up to 10,000."
    }
  },
  "additionalProperties": false
}
recommend_routes annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true
}
find_places — Find places
Advertised by the server during the last successful anonymous check.
Advertised read-only

Finds cities, sea and inland ports, rail and road terminals, inland depots, border crossings and airports by name, UN/LOCODE or IATA code, with coordinates, from an embedded list (GeoNames, UN/LOCODE, OurAirports). Use it to fill a leg's from and to.

find_places input schema
{
  "type": "object",
  "required": [
    "query"
  ],
  "properties": {
    "kinds": {
      "type": "array",
      "items": {
        "enum": [
          "city",
          "port",
          "rail",
          "road",
          "airport",
          "inland",
          "border"
        ],
        "type": "string"
      },
      "description": "Only places of these kinds: port (sea or inland port), rail and road (terminals), airport, inland (inland clearance depot), border (crossing), city. E.g. [\"port\"] for a sea or river leg, [\"airport\"] for an air leg"
    },
    "limit": {
      "type": "integer",
      "maximum": 50,
      "minimum": 1,
      "description": "Most results (default 10)"
    },
    "query": {
      "type": "string",
      "description": "Place name, UN/LOCODE (NLRTM) or IATA code (CPH)"
    }
  },
  "additionalProperties": false
}
find_places annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true
}
list_vehicle_types — List vehicle types and emission factors
Advertised by the server during the last successful anonymous check.
Advertised read-only

Lists the vehicle types (and their short aliases) with their emission factors: g CO2e per tonne-km tank-to-wheel and well-to-tank, the distance type they are per, source and year, and for trucks the load model's payload (what load_factor 1 means). Optionally the fuels for the fuel method.

list_vehicle_types input schema
{
  "type": "object",
  "properties": {
    "mode": {
      "enum": [
        "road",
        "rail",
        "sea",
        "air",
        "inland_waterway"
      ],
      "type": "string"
    },
    "search": {
      "type": "string",
      "description": "Only vehicle types whose id, alias or source contains this, e.g. \"container\" or \"refrigerated\""
    },
    "include_fuels": {
      "type": "boolean",
      "description": "Also list fuels and their factors"
    }
  },
  "additionalProperties": false
}
list_vehicle_types annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true
}
get_methodology — How Sootcase calculates
Advertised by the server during the last successful anonymous check.
Advertised read-only

Explains the whole method: scope (WTW, TTW, WTT), inputs, the four calculation methods with formulas, how distances are routed, distance adjustment factors, added road legs, the emission factor datasets and their sources and limitations, data quality, what every result field means, errors, and how to present results.

get_methodology input schema
{
  "type": "object",
  "additionalProperties": false
}
get_methodology annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true
}

Prompts

Not advertised

No prompt definitions available.

Resources

1 advertised

methodology — How Sootcase calculates

Advertised by the server during the last successful anonymous check.

Methods, distances, DAFs, emission factors and their sources, data quality, result fields, limitations.

methodology URI
sootcase://methodology

MIME type: text/markdown

30-day availability

Aggregated from read-only remote checks; this is not a tool-execution or security guarantee.

Successful checks
1 of 1 (100%)
Average latency
2117 ms
95th percentile latency
2117 ms

Maintenance history

Public check and source-refresh events. Editorial and ownership records remain private.

  • · probe · passed · 2117 ms · metadata changed · 8 tool(s), 1 resource(s), 0 resource template(s)

Connect from your client

Each snippet registers the same endpoint; pick the client you use.

This server is operated by the named third party. Listing and endpoint checks are not an endorsement or a security audit. Review the operator's permissions, terms, and data handling before connecting. How listings are checked and corrected.

Claude Code

Run this once in a terminal. It registers the remote server. Use --scope project to write .mcp.json for the repo.
Claude Code configuration
claude mcp add --transport http sootcase-mcp https://sootcase.org/mcp

Codex

Run this once. Codex stores MCP servers in ~/.codex/config.toml (or .codex/config.toml in a trusted project).
Codex configuration
codex mcp add sootcase-mcp --url https://sootcase.org/mcp

Cursor

Merge this server into .cursor/mcp.json in your project, then enable sootcase-mcp in your MCP settings.
Cursor configuration
{
  "mcpServers": {
    "sootcase-mcp": {
      "url": "https://sootcase.org/mcp"
    }
  }
}

Cline

Merge this into cline_mcp_settings.json (Cline → MCP Servers → Configure).
Cline configuration
{
  "mcpServers": {
    "sootcase-mcp": {
      "type": "streamableHttp",
      "url": "https://sootcase.org/mcp",
      "disabled": false
    }
  }
}

VS Code

Merge this server into .vscode/mcp.json. Use MCP: List Servers to start sootcase-mcp and inspect its tools.
VS Code configuration
{
  "servers": {
    "sootcase-mcp": {
      "type": "http",
      "url": "https://sootcase.org/mcp"
    }
  }
}

Gemini CLI

Run this once. It writes .gemini/settings.json in the current project; pass --scope user for ~/.gemini/settings.json.
Gemini CLI configuration
gemini mcp add --transport http sootcase-mcp https://sootcase.org/mcp

Claude Desktop

Merge this into claude_desktop_config.json (macOS: ~/Library/Application Support/Claude/, Windows: %APPDATA%\Claude\), then restart Claude Desktop.
Claude Desktop configuration
{
  "mcpServers": {
    "sootcase-mcp": {
      "url": "https://sootcase.org/mcp"
    }
  }
}

Windsurf

Merge this into ~/.codeium/windsurf/mcp_config.json, then refresh MCP in Cascade. Windsurf remote servers use serverUrl, not url.
Windsurf configuration
{
  "mcpServers": {
    "sootcase-mcp": {
      "serverUrl": "https://sootcase.org/mcp"
    }
  }
}

Let your agent find its tools

Find servers like Sootcase MCP from your agent. Add Koskamo once to search the index for endpoints, access requirements, and client setup. Public discovery needs no key.