Skip to main content
Glama

Freight Emissions Calculator

emissions_calculator
Read-onlyIdempotent

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 energy (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; an unknown value returns available:false with the covered list.
mass_unitNoUnit for mass (default: kg)
distance_kmYesTransport distance in kilometres — you provide it; the tool does not route or compute distance

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. Dates show when Glama detected each change.

  1. Changed5 schema fields changed
    • addedOutput schema / properties / _source / properties / authority_current_edition
      Added value: +{
      +  "type": "string"
      +}
    • addedOutput schema / properties / _source / properties / checked_at
      Added value: +{
      +  "type": "string"
      +}
    • addedOutput schema / properties / _source / properties / dataset_edition
      Added value: +{
      +  "type": "string"
      +}
    • removedOutput schema / properties / envelope_version / const
      Removed value: -"1"
    • addedOutput schema / properties / envelope_version / enum
      Added value: +[
      +  "1",
      +  "1.1"
      +]
  2. Changed37 schema fields changed
    • removedOutput schema / properties / _source / description
      Removed value: -"Citability envelope: ISO method + the specific open factor used (authority, edition, value, basis, last_verified date, source, licence)"
    • 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: -{
      -  "description": "True if a factor matched and emissions were computed; false if the combination is not covered",
      -  "type": "boolean"
      -}
    • removedOutput schema / properties / available_for
      Removed value: -{
      -  "additionalProperties": false,
      -  "description": "Present when available:false — the covered modes/regions/sub-modes",
      -  "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": {},
      +            "propertyNames": {
      +              "type": "string"
      +            },
      +            "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
    • removedOutput schema / properties / confidence / description
      Removed value: -"Human-readable confidence label for representativeness"
    • 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: -{
      -  "description": "Best-effort estimate; not a verified carbon report",
      -  "type": "string"
      -}
    • removedOutput schema / properties / emissions
      Removed value: -{
      -  "additionalProperties": false,
      -  "description": "Computed emissions: WTW + TTW where available, plus the primary value per basis",
      -  "properties": {
      -    "basis_used": {
      -      "type": "string"
      -    },
      -    "primary_kgco2e": {
      -      "type": "number"
      -    },
      -    "ttw_kgco2e": {
      -      "anyOf": [
      -        {
      -          "type": "number"
      -        },
      -        {
      -          "type": "null"
      -        }
      -      ]
      -    },
      -    "wtw_kgco2e": {
      -      "anyOf": [
      -        {
      -          "type": "number"
      -        },
      -        {
      -          "type": "null"
      -        }
      -      ]
      -    }
      -  },
      -  "required": [
      -    "wtw_kgco2e",
      -    "ttw_kgco2e",
      -    "primary_kgco2e",
      -    "basis_used"
      -  ],
      -  "type": "object"
      -}
    • removedOutput schema / properties / empty_running
      Removed value: -{
      -  "description": "Whether the fleet-average factor already embeds average empty running (\"sector_average_included\" → do NOT add your own empty-return leg) or the source does not state it (\"see_source\")",
      -  "type": "string"
      -}
    • addedOutput schema / properties / envelope_version
      Added value: +{
      +  "const": "1",
      +  "type": "string"
      +}
    • removedOutput schema / properties / factor
      Removed value: -{
      -  "additionalProperties": false,
      -  "description": "The exact emission-intensity factor used",
      -  "properties": {
      -    "authority": {
      -      "type": "string"
      -    },
      -    "edition": {
      -      "type": "string"
      -    },
      -    "id": {
      -      "type": "string"
      -    },
      -    "mode": {
      -      "type": "string"
      -    },
      -    "region": {
      -      "type": "string"
      -    },
      -    "sub_mode": {
      -      "type": "string"
      -    },
      -    "ttw": {
      -      "anyOf": [
      -        {
      -          "type": "number"
      -        },
      -        {
      -          "type": "null"
      -        }
      -      ]
      -    },
      -    "unit": {
      -      "type": "string"
      -    },
      -    "wtw": {
      -      "anyOf": [
      -        {
      -          "type": "number"
      -        },
      -        {
      -          "type": "null"
      -        }
      -      ]
      -    }
      -  },
      -  "required": [
      -    "id",
      -    "mode",
      -    "sub_mode",
      -    "authority",
      -    "edition",
      -    "region",
      -    "unit",
      -    "wtw",
      -    "ttw"
      -  ],
      -  "type": "object"
      -}
    • removedOutput schema / properties / inputs
      Removed value: -{
      -  "additionalProperties": false,
      -  "description": "Echo of the resolved inputs (incl. defaults applied)",
      -  "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: -{
      -  "description": "Mass basis the factor expects: always \"actual_gross_mass\" — NOT chargeable/volumetric weight (a common air-freight mistake)",
      -  "type": "string"
      -}
    • removedOutput schema / properties / message
      Removed value: -{
      -  "description": "Present when available:false — why no factor matched",
      -  "type": "string"
      -}
    • removedOutput schema / properties / methodology
      Removed value: -{
      -  "description": "ISO 14083:2023 / GLEC Framework v3.2",
      -  "type": "string"
      -}
    • addedOutput schema / properties / normalized_input
      Added value: +{
      +  "additionalProperties": {},
      +  "propertyNames": {
      +    "type": "string"
      +  },
      +  "type": "object"
      +}
    • addedOutput schema / properties / ok
      Added value: +{
      +  "type": "boolean"
      +}
    • removedOutput schema / properties / representativeness
      Removed value: -{
      -  "description": "How representative the generic default factor is: \"low\" for sea/air (varies materially by vessel/aircraft type, load, routing), \"medium\" for road/rail/inland",
      -  "type": "string"
      -}
    • addedOutput schema / properties / result
      Added value: +{
      +  "additionalProperties": {},
      +  "propertyNames": {
      +    "type": "string"
      +  },
      +  "type": "object"
      +}
    • removedOutput schema / properties / summary
      Removed value: -{
      -  "description": "Primary human-readable one-line result — carries the empty-running + actual-gross-mass notes and, for sea/air, a high-variance warning. Surface this to the user, do not drop it.",
      -  "type": "string"
      -}
    • removedOutput schema / properties / tonne_km
      Removed value: -{
      -  "description": "Transport activity = mass (tonnes) × distance (km)",
      -  "type": "number"
      -}
    • addedOutput schema / properties / validity
      Added value: +{
      +  "additionalProperties": false,
      +  "properties": {
      +    "as_of": {
      +      "type": "string"
      +    },
      +    "effective_from": {
      +      "type": "string"
      +    },
      +    "effective_to": {
      +      "anyOf": [
      +        {
      +          "type": "string"
      +        },
      +        {
      +          "type": "null"
      +        }
      +      ]
      +    }
      +  },
      +  "required": [
      +    "as_of"
      +  ],
      +  "type": "object"
      +}
    • addedOutput schema / properties / warnings
      Added value: +{
      +  "items": {
      +    "additionalProperties": false,
      +    "properties": {
      +      "code": {
      +        "type": "string"
      +      },
      +      "details": {
      +        "additionalProperties": {},
      +        "propertyNames": {
      +          "type": "string"
      +        },
      +        "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. Changed8 schema fields changed
    • changedOutput schema / properties / _source / description
      Previous value: -"Citability envelope: ISO method + the specific open factor used (authority, edition, value, basis, source, licence)"New value: +"Citability envelope: ISO method + the specific open factor used (authority, edition, value, basis, last_verified date, source, licence)"
    • 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: +{
      +  "description": "Human-readable confidence label for representativeness",
      +  "type": "string"
      +}
    • addedOutput schema / properties / empty_running
      Added value: +{
      +  "description": "Whether the fleet-average factor already embeds average empty running (\"sector_average_included\" → do NOT add your own empty-return leg) or the source does not state it (\"see_source\")",
      +  "type": "string"
      +}
    • addedOutput schema / properties / mass_basis
      Added value: +{
      +  "description": "Mass basis the factor expects: always \"actual_gross_mass\" — NOT chargeable/volumetric weight (a common air-freight mistake)",
      +  "type": "string"
      +}
    • addedOutput schema / properties / representativeness
      Added value: +{
      +  "description": "How representative the generic default factor is: \"low\" for sea/air (varies materially by vessel/aircraft type, load, routing), \"medium\" for road/rail/inland",
      +  "type": "string"
      +}
    • addedOutput schema / properties / summary
      Added value: +{
      +  "description": "Primary human-readable one-line result — carries the empty-running + actual-gross-mass notes and, for sea/air, a high-variance warning. Surface this to the user, do not drop it.",
      +  "type": "string"
      +}
  4. Added

TDQS

A4.8/5.0
Behavior5/5

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

Given readOnlyHint/idempotentHint, the description adds substantive context: deterministic results, inclusion of empty running, low representativeness for sea/air, available:false behavior for unknown values, rate-limit and 429 retry semantics, and a caveat that this is not an audited carbon report. No contradiction with annotations.

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

Conciseness4/5

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

Description is long but well-structured with scannable sections (usage, behavior, returns, limitations, related). Every sentence conveys a distinct constraint or fact; no filler. However, the length is somewhat high, so not a perfect 5.

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?

With extensive context and a rich output schema, the description covers input requirements, edge cases, rate limiting, return envelope, and limitations. It leaves no critical operational gap for an agent selecting or invoking the tool.

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

Parameters4/5

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

Schema covers all 7 params with descriptions (100%), satisfying the baseline of 3. The description elevates this by clarifying that mass means actual gross mass (not chargeable/volumetric), distance must be user-provided (no routing), and unknown sub_mode/region behavior. This adds cautionary semantics beyond the schema.

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

Purpose5/5

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

The description opens with a specific verb-object-scope ('Estimate freight transport greenhouse-gas emissions (kgCO2e) for a shipment leg'), includes the calculation formula, and explicitly distinguishes itself from sibling volume/weight calculators. This makes the tool's role unmistakable.

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?

Provides explicit when-to-use instructions: prerequisites (mass, distance_km, mode), what NOT to do (don't pass chargeable weight, don't add empty-return leg), and names alternatives (cbm_calculator, ldm_calculator, chargeable_weight_calculator) in the 'Related' section. Also mentions rate-limit fallback (get_subscribe_link).

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

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

TDQS

A4.3/5.0
Disambiguation3/5

The tools cluster into clear domains and the descriptions are detailed, but there are several overlapping pairs: consignment_calculator vs shipment_summary, cbm_calculator vs unit_converter, and validate vs resolve_reference all have fuzzy boundaries. An agent could plausibly mis-select between the composite calculators or between identifier-handling tools despite the helpful cross-references.

Naming Consistency4/5

Naming is mostly consistent: reference tools use *_lookup, calculation tools use *_calculator, and checks use *_check. Exceptions like validate, resolve_reference, nearest_airport, and shipment_summary break the dominant pattern slightly, but all names are snake_case and generally predictable.

Tool Count3/5

At 25 tools, this sits at the heavy end of the range for an MCP server. The broad freight/logistics scope justifies many of them, but several single-purpose calculators could have been consolidated or grouped, making the surface feel larger and more redundant than necessary.

Completeness4/5

The server covers ADR dangerous-goods rules, multi-modal freight calculations, equipment lookups, identifier validation, customs/trade data, and emissions estimation. Minor gaps exist—no routing/geocoding, no SCAC/BIC coverage, no customs filing—but core freight-reference and calculation workflows are well supported.