Skip to main content
Glama
SoapyRED

FreightUtils MCP Server

emissions_calculator

Read-onlyIdempotent

Calculate freight transport greenhouse-gas emissions (kgCO2e) for a shipment leg from mass, distance, and mode using ISO 14083/GLEC factors. Get well-to-wheel and tank-to-wheel estimates with cited source factors.

Instructions

Estimate freight transport greenhouse-gas emissions (kgCO2e) for a shipment leg, per ISO 14083:2023 / GLEC Framework v3.2: emissions = mass x distance x a published emission-intensity factor (kgCO2e/tonne-km).

Provide mass + distance_km + mode (road | rail | sea | air | inland_waterway); optionally choose sub_mode, region/authority (uk = DEFRA, us = EPA, fr = ADEME) and basis (wtw default, or ttw). IMPORTANT: pass ACTUAL GROSS MASS, not chargeable/volumetric weight (a common air-freight mistake — see mass_basis in the result). Distance must be provided — this tool does NOT route, geocode, or compute distances.

Behavior: deterministic given the same factor edition; the fleet-average factor already includes average empty running (see empty_running) — do NOT add your own empty-return leg; sea and air are low-representativeness generic defaults (real emissions vary materially by vessel/aircraft, load factor and routing — see representativeness and the result summary). An unknown mode/sub_mode/region returns available:false with the covered options, never a fabricated factor. Rate-limited (anonymous use: 25 requests/day per IP): a 429 error body carries retry_after_seconds and a Retry-After header — back off and retry, or call get_subscribe_link for higher limits.

Returns: well-to-wheel AND tank-to-wheel emissions where the factor has both, the exact factor used (value, authority, edition), the tonne-km activity and a per-result _source citing BOTH the ISO method and the specific open factor, all under result, plus confidence, _source and citation (the FreightUtils v1 response envelope).

Limitations: best-effort reference estimate from open factors (DEFRA / EPA / ADEME) — NOT a verified or audited carbon report.

Related: distinct from cbm_calculator / ldm_calculator / chargeable_weight_calculator (those size or bill a shipment; this one estimates its CO2e).

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
massYesShipment mass, expressed in mass_unit. Example: 1000.
modeYesTransport mode.
basisNoEmissions basis: wtw = well-to-wheel incl. upstream (default), ttw = tank-to-wheel / operation only.
regionNoFactor source/region: uk = DEFRA, us = EPA, fr = ADEME. Default is per-mode.
sub_modeNoOptional sub-mode / vehicle class (e.g. "articulated", "container ship", "long-haul"). Omit for the representative default.
mass_unitNoUnit for mass. Default: kg.
distance_kmYesTransport distance in kilometres — you provide it; the tool does not route.

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault
okYes
resultYes
_sourceYes
citationYes
validityNo
warningsNo
confidenceYes
blocking_errorsNo
envelope_versionYes
normalized_inputNo

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed5 schema fields changedv2.17.2
    • addedOutput schema / properties / _source / properties / authority_current_edition
      Added value: +{
      +  "type": "string"
      +}
    • addedOutput schema / properties / _source / properties / checked_at
      Added value: +{
      +  "type": "string"
      +}
    • addedOutput schema / properties / _source / properties / dataset_edition
      Added value: +{
      +  "type": "string"
      +}
    • removedOutput schema / properties / envelope_version / const
      Removed value: -"1"
    • addedOutput schema / properties / envelope_version / enum
      Added value: +[
      +  "1",
      +  "1.1"
      +]
  2. Changed40 schema fields changedv2.11.0
    • changedInput schema / properties / basis / description
      Previous value: -"Emissions basis: wtw = well-to-wheel incl. upstream (default), ttw = tank-to-wheel / operation only"New value: +"Emissions basis: wtw = well-to-wheel incl. upstream (default), ttw = tank-to-wheel / operation only."
    • changedInput schema / properties / distance_km / description
      Previous value: -"Transport distance in kilometres — you provide it; the tool does not route"New value: +"Transport distance in kilometres — you provide it; the tool does not route."
    • changedInput schema / properties / mass / description
      Previous value: -"Shipment mass, expressed in mass_unit. Example: 1000"New value: +"Shipment mass, expressed in mass_unit. Example: 1000."
    • changedInput schema / properties / mass_unit / description
      Previous value: -"Unit for mass (default: kg)"New value: +"Unit for mass. Default: kg."
    • changedInput schema / properties / mode / description
      Previous value: -"Transport mode"New value: +"Transport mode."
    • addedOutput schema / properties / _source / properties / checked
      Added value: +{
      +  "type": "string"
      +}
    • removedOutput schema / properties / _source / properties / computed_by
      Removed value: -{
      -  "type": "string"
      -}
    • removedOutput schema / properties / _source / properties / factor
      Removed value: -{
      -  "additionalProperties": false,
      -  "properties": {
      -    "authority": {
      -      "type": "string"
      -    },
      -    "basis": {
      -      "type": "string"
      -    },
      -    "edition": {
      -      "type": "string"
      -    },
      -    "last_verified": {
      -      "type": "string"
      -    },
      -    "licence": {
      -      "type": "string"
      -    },
      -    "source_url": {
      -      "type": "string"
      -    },
      -    "unit": {
      -      "type": "string"
      -    },
      -    "value": {
      -      "type": "number"
      -    }
      -  },
      -  "required": [
      -    "authority",
      -    "edition",
      -    "value",
      -    "unit",
      -    "basis",
      -    "last_verified",
      -    "source_url",
      -    "licence"
      -  ],
      -  "type": "object"
      -}
    • addedOutput schema / properties / _source / properties / name
      Added value: +{
      +  "type": "string"
      +}
    • addedOutput schema / properties / _source / properties / provenance_status
      Added value: +{
      +  "enum": [
      +    "verified",
      +    "pending-verification",
      +    "computed",
      +    "live"
      +  ],
      +  "type": "string"
      +}
    • removedOutput schema / properties / _source / properties / reference
      Removed value: -{
      -  "type": "string"
      -}
    • removedOutput schema / properties / _source / properties / standard
      Removed value: -{
      -  "type": "string"
      -}
    • removedOutput schema / properties / _source / properties / type
      Removed value: -{
      -  "type": "string"
      -}
    • changedOutput schema / properties / _source / required
      Previous value: -[
      -  "type",
      -  "standard",
      -  "reference",
      -  "source_url",
      -  "computed_by",
      -  "factor"
      -]New value: +[
      +  "name",
      +  "checked",
      +  "provenance_status"
      +]
    • removedOutput schema / properties / available
      Removed value: -{
      -  "type": "boolean"
      -}
    • removedOutput schema / properties / available_for
      Removed value: -{
      -  "additionalProperties": false,
      -  "properties": {
      -    "modes": {
      -      "items": {
      -        "type": "string"
      -      },
      -      "type": "array"
      -    },
      -    "regions_for_mode": {
      -      "items": {
      -        "type": "string"
      -      },
      -      "type": "array"
      -    },
      -    "sub_modes": {
      -      "items": {
      -        "additionalProperties": false,
      -        "properties": {
      -          "id": {
      -            "type": "string"
      -          },
      -          "region": {
      -            "type": "string"
      -          },
      -          "sub_mode": {
      -            "type": "string"
      -          }
      -        },
      -        "required": [
      -          "region",
      -          "id",
      -          "sub_mode"
      -        ],
      -        "type": "object"
      -      },
      -      "type": "array"
      -    }
      -  },
      -  "required": [
      -    "modes",
      -    "regions_for_mode",
      -    "sub_modes"
      -  ],
      -  "type": "object"
      -}
    • addedOutput schema / properties / blocking_errors
      Added value: +{
      +  "items": {
      +    "additionalProperties": false,
      +    "properties": {
      +      "code": {
      +        "type": "string"
      +      },
      +      "message": {
      +        "type": "string"
      +      },
      +      "recovery": {
      +        "additionalProperties": false,
      +        "properties": {
      +          "action": {
      +            "type": "string"
      +          },
      +          "params": {
      +            "additionalProperties": {},
      +            "type": "object"
      +          },
      +          "tool": {
      +            "type": "string"
      +          }
      +        },
      +        "required": [
      +          "action"
      +        ],
      +        "type": "object"
      +      }
      +    },
      +    "required": [
      +      "code",
      +      "message",
      +      "recovery"
      +    ],
      +    "type": "object"
      +  },
      +  "type": "array"
      +}
    • addedOutput schema / properties / citation
      Added value: +{
      +  "additionalProperties": false,
      +  "properties": {
      +    "qualifier": {
      +      "type": "string"
      +    },
      +    "text": {
      +      "type": "string"
      +    }
      +  },
      +  "required": [
      +    "text"
      +  ],
      +  "type": "object"
      +}
    • addedOutput schema / properties / confidence / additionalProperties
      Added value: +false
    • addedOutput schema / properties / confidence / properties
      Added value: +{
      +  "basis": {
      +    "enum": [
      +      "deterministic",
      +      "provenance",
      +      "match_quality",
      +      "freshness"
      +    ],
      +    "type": "string"
      +  },
      +  "level": {
      +    "enum": [
      +      "high",
      +      "medium",
      +      "low"
      +    ],
      +    "type": "string"
      +  },
      +  "score": {
      +    "maximum": 1,
      +    "minimum": 0,
      +    "type": "number"
      +  }
      +}
    • addedOutput schema / properties / confidence / required
      Added value: +[
      +  "level",
      +  "basis"
      +]
    • changedOutput schema / properties / confidence / type
      Previous value: -"string"New value: +"object"
    • removedOutput schema / properties / disclaimer
      Removed value: -{
      -  "type": "string"
      -}
    • removedOutput schema / properties / emissions
      Removed value: -{
      -  "additionalProperties": false,
      -  "properties": {
      -    "basis_used": {
      -      "type": "string"
      -    },
      -    "primary_kgco2e": {
      -      "type": "number"
      -    },
      -    "ttw_kgco2e": {
      -      "type": [
      -        "number",
      -        "null"
      -      ]
      -    },
      -    "wtw_kgco2e": {
      -      "type": [
      -        "number",
      -        "null"
      -      ]
      -    }
      -  },
      -  "required": [
      -    "wtw_kgco2e",
      -    "ttw_kgco2e",
      -    "primary_kgco2e",
      -    "basis_used"
      -  ],
      -  "type": "object"
      -}
    • removedOutput schema / properties / empty_running
      Removed value: -{
      -  "type": "string"
      -}
    • addedOutput schema / properties / envelope_version
      Added value: +{
      +  "const": "1",
      +  "type": "string"
      +}
    • removedOutput schema / properties / factor
      Removed value: -{
      -  "additionalProperties": false,
      -  "properties": {
      -    "authority": {
      -      "type": "string"
      -    },
      -    "edition": {
      -      "type": "string"
      -    },
      -    "id": {
      -      "type": "string"
      -    },
      -    "mode": {
      -      "type": "string"
      -    },
      -    "region": {
      -      "type": "string"
      -    },
      -    "sub_mode": {
      -      "type": "string"
      -    },
      -    "ttw": {
      -      "type": [
      -        "number",
      -        "null"
      -      ]
      -    },
      -    "unit": {
      -      "type": "string"
      -    },
      -    "wtw": {
      -      "type": [
      -        "number",
      -        "null"
      -      ]
      -    }
      -  },
      -  "required": [
      -    "id",
      -    "mode",
      -    "sub_mode",
      -    "authority",
      -    "edition",
      -    "region",
      -    "unit",
      -    "wtw",
      -    "ttw"
      -  ],
      -  "type": "object"
      -}
    • removedOutput schema / properties / inputs
      Removed value: -{
      -  "additionalProperties": false,
      -  "properties": {
      -    "basis": {
      -      "type": "string"
      -    },
      -    "distance_km": {
      -      "type": "number"
      -    },
      -    "mass": {
      -      "type": "number"
      -    },
      -    "mass_tonnes": {
      -      "type": "number"
      -    },
      -    "mass_unit": {
      -      "type": "string"
      -    },
      -    "mode": {
      -      "type": "string"
      -    },
      -    "region": {
      -      "type": "string"
      -    },
      -    "sub_mode": {
      -      "type": "string"
      -    }
      -  },
      -  "required": [
      -    "mass",
      -    "mass_unit",
      -    "mass_tonnes",
      -    "distance_km",
      -    "mode",
      -    "sub_mode",
      -    "region",
      -    "basis"
      -  ],
      -  "type": "object"
      -}
    • removedOutput schema / properties / mass_basis
      Removed value: -{
      -  "type": "string"
      -}
    • removedOutput schema / properties / message
      Removed value: -{
      -  "type": "string"
      -}
    • removedOutput schema / properties / methodology
      Removed value: -{
      -  "type": "string"
      -}
    • addedOutput schema / properties / normalized_input
      Added value: +{
      +  "additionalProperties": {},
      +  "type": "object"
      +}
    • addedOutput schema / properties / ok
      Added value: +{
      +  "type": "boolean"
      +}
    • removedOutput schema / properties / representativeness
      Removed value: -{
      -  "type": "string"
      -}
    • addedOutput schema / properties / result
      Added value: +{
      +  "anyOf": [
      +    {
      +      "additionalProperties": true,
      +      "properties": {
      +        "_source": {
      +          "anyOf": [
      +            {
      +              "additionalProperties": {},
      +              "type": "object"
      +            },
      +            {
      +              "type": "null"
      +            }
      +          ]
      +        },
      +        "available": {
      +          "type": [
      +            "boolean",
      +            "null"
      +          ]
      +        },
      +        "available_for": {
      +          "anyOf": [
      +            {
      +              "additionalProperties": {},
      +              "type": "object"
      +            },
      +            {
      +              "type": "null"
      +            }
      +          ]
      +        },
      +        "confidence": {
      +          "type": [
      +            "string",
      +            "null"
      +          ]
      +        },
      +        "disclaimer": {
      +          "type": [
      +            "string",
      +            "null"
      +          ]
      +        },
      +        "emissions": {
      +          "anyOf": [
      +            {
      +              "additionalProperties": true,
      +              "properties": {
      +                "basis_used": {
      +                  "type": [
      +                    "string",
      +                    "null"
      +                  ]
      +                },
      +                "primary_kgco2e": {
      +                  "type": [
      +                    "number",
      +                    "null"
      +                  ]
      +                },
      +                "ttw_kgco2e": {
      +                  "type": [
      +                    "number",
      +                    "null"
      +                  ]
      +                },
      +                "wtw_kgco2e": {
      +                  "type": [
      +                    "number",
      +                    "null"
      +                  ]
      +                }
      +              },
      +              "type": "object"
      +            },
      +            {
      +              "type": "null"
      +            }
      +          ]
      +        },
      +        "empty_running": {
      +          "type": [
      +            "string",
      +            "null"
      +          ]
      +        },
      +        "factor": {
      +          "anyOf": [
      +            {
      +              "additionalProperties": true,
      +              "properties": {
      +                "authority": {
      +                  "type": [
      +                    "string",
      +                    "null"
      +                  ]
      +                },
      +                "edition": {
      +                  "type": [
      +                    "string",
      +                    "null"
      +                  ]
      +                },
      +                "id": {
      +                  "type": [
      +                    "string",
      +                    "null"
      +                  ]
      +                },
      +                "mode": {
      +                  "type": [
      +                    "string",
      +                    "null"
      +                  ]
      +                },
      +                "region": {
      +                  "type": [
      +                    "string",
      +                    "null"
      +                  ]
      +                },
      +                "sub_mode": {
      +                  "type": [
      +                    "string",
      +                    "null"
      +                  ]
      +                },
      +                "ttw": {
      +                  "type": [
      +                    "number",
      +                    "null"
      +                  ]
      +                },
      +                "unit": {
      +                  "type": [
      +                    "string",
      +                    "null"
      +                  ]
      +                },
      +                "wtw": {
      +                  "type": [
      +                    "number",
      +                    "null"
      +                  ]
      +                }
      +              },
      +              "type": "object"
      +            },
      +            {
      +              "type": "null"
      +            }
      +          ]
      +        },
      +        "inputs": {
      +          "anyOf": [
      +            {
      +              "additionalProperties": {},
      +              "type": "object"
      +            },
      +            {
      +              "type": "null"
      +            }
      +          ]
      +        },
      +        "mass_basis": {
      +          "type": [
      +            "string",
      +            "null"
      +          ]
      +        },
      +        "message": {
      +          "type": [
      +            "string",
      +            "null"
      +          ]
      +        },
      +        "methodology": {
      +          "type": [
      +            "string",
      +            "null"
      +          ]
      +        },
      +        "representativeness": {
      +          "type": [
      +            "string",
      +            "null"
      +          ]
      +        },
      +        "summary": {
      +          "type": [
      +            "string",
      +            "null"
      +          ]
      +        },
      +        "tonne_km": {
      +          "type": [
      +            "number",
      +            "null"
      +          ]
      +        }
      +      },
      +      "type": "object"
      +    },
      +    {
      +      "additionalProperties": {},
      +      "type": "object"
      +    }
      +  ]
      +}
    • removedOutput schema / properties / summary
      Removed value: -{
      -  "type": "string"
      -}
    • removedOutput schema / properties / tonne_km
      Removed value: -{
      -  "type": "number"
      -}
    • addedOutput schema / properties / validity
      Added value: +{
      +  "additionalProperties": false,
      +  "properties": {
      +    "as_of": {
      +      "type": "string"
      +    },
      +    "effective_from": {
      +      "type": "string"
      +    },
      +    "effective_to": {
      +      "type": [
      +        "string",
      +        "null"
      +      ]
      +    }
      +  },
      +  "required": [
      +    "as_of"
      +  ],
      +  "type": "object"
      +}
    • addedOutput schema / properties / warnings
      Added value: +{
      +  "items": {
      +    "additionalProperties": false,
      +    "properties": {
      +      "code": {
      +        "type": "string"
      +      },
      +      "details": {
      +        "additionalProperties": {},
      +        "type": "object"
      +      },
      +      "message": {
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "code",
      +      "message"
      +    ],
      +    "type": "object"
      +  },
      +  "type": "array"
      +}
    • changedOutput schema / required
      Previous value: -[
      -  "available",
      -  "methodology",
      -  "disclaimer"
      -]New value: +[
      +  "envelope_version",
      +  "ok",
      +  "result",
      +  "confidence",
      +  "_source",
      +  "citation"
      +]
  3. Changed7 schema fields changedv2.10.1
    • addedOutput schema / properties / _source / properties / factor / properties / last_verified
      Added value: +{
      +  "type": "string"
      +}
    • changedOutput schema / properties / _source / properties / factor / required
      Previous value: -[
      -  "authority",
      -  "edition",
      -  "value",
      -  "unit",
      -  "basis",
      -  "source_url",
      -  "licence"
      -]New value: +[
      +  "authority",
      +  "edition",
      +  "value",
      +  "unit",
      +  "basis",
      +  "last_verified",
      +  "source_url",
      +  "licence"
      +]
    • addedOutput schema / properties / confidence
      Added value: +{
      +  "type": "string"
      +}
    • addedOutput schema / properties / empty_running
      Added value: +{
      +  "type": "string"
      +}
    • addedOutput schema / properties / mass_basis
      Added value: +{
      +  "type": "string"
      +}
    • addedOutput schema / properties / representativeness
      Added value: +{
      +  "type": "string"
      +}
    • addedOutput schema / properties / summary
      Added value: +{
      +  "type": "string"
      +}
  4. Addedv2.10.0

TDQS

A5/5.0
Behavior5/5

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

Annotations already indicate read-only, idempotent, non-destructive behavior, and the description adds substantial behavioral detail beyond that: deterministic results, built-in empty running, low representativeness for sea/air, unknown inputs returning available:false rather than fabricated factors, and rate-limiting behavior with 429 handling. The description is fully consistent with the annotations.

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?

The description is long but every sentence earns its place. It front-loads the core formula and required inputs, then adds important parameter guidance, behavioral notes, return-envelope content, limitations, and sibling-tool distinctions. It is well-organized into functional paragraphs with no fluff or tautology.

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

Completeness5/5

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

Given 7 parameters, an output schema, and a rich context from sibling tools, this description is complete: it covers input requirements, key parameters, edge cases (unknown returns, rate limits), the return envelope, limitations, and explicit distinction from related calculators. An agent has everything needed to select and invoke the tool correctly without external guesswork.

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

Parameters5/5

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

Although schema descriptions cover all 7 parameters, the tool description adds critical semantic nuance: actual gross mass vs chargeable/volumetric weight (a common air-freight mistake), the fact that distance is caller-provided with no routing behavior, the meaning of wtw vs ttw, and region/authority mappings (uk=DEFRA, us=EPA, fr=ADEME). This goes well beyond the schema's short field descriptions.

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?

Description opens with a specific verb and resource: 'Estimate freight transport greenhouse-gas emissions (kgCO2e) for a shipment leg' per ISO/GLEC standards. It clearly defines the calculation formula and the required inputs. The closing line distinguishes it from cbm_calculator, ldm_calculator, and chargeable_weight_calculator by stating those size/bill a shipment while this one estimates CO2e.

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

Usage Guidelines5/5

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

Explicitly instructs when to use the tool and with what care: pass actual gross mass not chargeable weight, provide distance because the tool does not route, and do not add an empty-return leg. It also names sibling calculators that are distinct and directs to get_subscribe_link for higher rate limits. This is full usage guidance with both affirmative and exclusionary conditions.

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