Provides AI agents with deterministic freight reference data, dangerous goods (ADR) validation, customs codes, and logistics calculations.
Also known as SoapyRED/freightutils-mcp, freightutils-mcp
- Stars
- 8
- Tools
- 29
- Downloads, 30 days
- —
- Latest version
- 2.34.4
- Last commit
- Nov 14, 2026
- License
- MIT
What is FreightUtils MCP?
FreightUtils provides AI agents with deterministic freight reference data, dangerous goods (ADR) validation, customs codes, and logistics calculations. It exposes 29 tools, such as ldm_calculator, cbm_calculator, chargeable_weight_calculator.
Summary generated from the project's README
About FreightUtils MCP server
FreightUtils MCP Server acts as a neutral reference layer for AI agents handling logistics and transport data. It provides deterministic access to primary regulatory sources, including ADR 2025 and ADR 2027 for dangerous goods, HS 2022 for customs, and IATA-regulated airline prefixes. Instead of generating speculative answers, the server uses 26 specialized tools to perform precise calculations and lookups for road, air, and sea freight.
Developers can integrate this server into local or remote client setups using an API key via the FREIGHTUTILS_API_KEY environment variable. While a free key allows for basic usage, it is required to generate and store check receipts for auditing purposes. The server supports batch processing for UN numbers, customs codes, and airport or airline lookups, making it suitable for high-volume logistics workflows. Every response includes a structured citation block, allowing agents to verify the authority, edition, and license of the data used.
Written from the project's README. Every use case is checked against a quote from it.
How to install FreightUtils MCP
Formats verified 10 Nov 2026Add to CursorAdd to GooseInstall FreightUtils MCP in Claude Code
$ claude mcp add freightutils-mcp -- npx -y freightutils-mcpInstall FreightUtils MCP in Cursor
~/.cursor/mcp.json
{
"mcpServers": {
"freightutils-mcp": {
"command": "npx",
"args": [
"-y",
"freightutils-mcp"
]
}
}
}Install FreightUtils MCP in VS Code
.vscode/mcp.json
{
"servers": {
"freightutils-mcp": {
"type": "stdio",
"command": "npx",
"args": [
"-y",
"freightutils-mcp"
]
}
}
}Install FreightUtils MCP in VS Code CLI
$ code --add-mcp '{"name":"freightutils-mcp","type":"stdio","command":"npx","args":["-y","freightutils-mcp"]}'Install FreightUtils MCP in Claude Desktop
claude_desktop_config.json
{
"mcpServers": {
"freightutils-mcp": {
"command": "npx",
"args": [
"-y",
"freightutils-mcp"
]
}
}
}Install FreightUtils MCP in Codex
$ codex mcp add freightutils-mcp -- npx -y freightutils-mcpInstall FreightUtils MCP in Codex config.toml
~/.codex/config.toml
[mcp_servers.freightutils-mcp] command = "npx" args = ["-y", "freightutils-mcp"]
Install FreightUtils MCP in Gemini CLI
$ gemini mcp add -s user freightutils-mcp npx -- -y freightutils-mcpInstall FreightUtils MCP in Gemini settings.json
~/.gemini/settings.json
{
"mcpServers": {
"freightutils-mcp": {
"command": "npx",
"args": [
"-y",
"freightutils-mcp"
]
}
}
}FreightUtils MCP tools 29
Detected from the READMEldm_calculatorcbm_calculatorchargeable_weight_calculatorpallet_fitting_calculatorcontainer_lookupunit_converterconsignment_calculatoremissions_calculatoradr_lookupadr_exemption_calculatoradr_lq_eq_checkadr_consignment_check
| ldm_calculator | — | |
| cbm_calculator | — | |
| chargeable_weight_calculator | — | |
| pallet_fitting_calculator | — | |
| container_lookup | — | |
| unit_converter | — | |
| consignment_calculator | — | |
| emissions_calculator | — | |
| adr_lookup | — | |
| adr_exemption_calculator | — | |
| adr_lq_eq_check | — | |
| adr_consignment_check | — |
Show all 29 toolsShow fewer tools
icao_limited_quantityhs_code_lookupuk_duty_calculatorincoterms_lookupics2_checkresolve_referenceairline_lookupunlocode_lookupairport_lookupnearest_airportuld_lookupvehicle_lookupvalidateshipment_summaryget_subscribe_linkcustomsops
| icao_limited_quantity | — | |
| hs_code_lookup | — | |
| uk_duty_calculator | — | |
| incoterms_lookup | — | |
| ics2_check | — | |
| resolve_reference | — | |
| airline_lookup | — | |
| unlocode_lookup | — | |
| airport_lookup | — | |
| nearest_airport | — | |
| uld_lookup | — | |
| vehicle_lookup | — | |
| validate | — | |
| shipment_summary | — | |
| get_subscribe_link | — | |
| customs | — | |
| ops | — |
Configuration
FREIGHTUTILS_API_KEY
| Name | Description | |
|---|---|---|
| FREIGHTUTILS_API_KEY | — |
Automated checks
Ran Nov 12, 2026Full report →Passed our automated checks. That is not a security audit: read the code and give the server the narrowest access it needs. How checks work
- Source repository linked and reachablePass
- Open source license (OSI)Pass
- Commit or release in the last yearPass
- Package name not close to a popular packagePass
- Remote endpoint uses HTTPSPass
- Destructive tools are labelledPass
- No hidden instructions to the modelPass
- No critical advisory in the package or its dependenciesPass
README
View on GitHubFreightUtils MCP Server
The neutral freight reference layer for AI agents.
FreightUtils is the neutral freight reference layer for AI agents — source-backed dangerous-goods, customs, location and freight-calculation data an agent can call and cite, from primary sources (ADR 2025 / UNECE, HS 2022 / WCO, IATA-regulated airline prefixes). Neutral by design: no freight to sell and no carrier to push — a lookup returns what the named source says, with the citation attached so an agent can inspect it rather than take our word for it, regardless of who carries the load.
This Model Context Protocol server gives AI agents access to 26 freight calculation and reference tools, covering road, air, and sea freight. Built by a UK ADR-certified freight transport planner.
Every response cites its source — a _source block with the authority, edition, licence where held, and a verification status an agent can read — and the tools are deterministic, not generated answers. Reference only: never filing, booking, or legal advice, and results state when human review is required (validate is structural check-digit validation only; a clean ics2_check is not ENS acceptance; emissions figures are estimates, not audited reports).
Since 2.11.0, every tool also declares a typed outputSchema and returns structuredContent — the FreightUtils v1 response envelope: the answer under result, plus confidence, normalized_input, warnings, _source and a ready-to-use citation. The legacy flat JSON text channel is unchanged (byte-identical), so existing text-parsing consumers are unaffected.
Since 2.24.0 the envelope is version 1.2, which adds four fields beside ok: status (ok, partial when required inputs are missing, not_found, ambiguous or unsupported), missing_inputs (the inputs a partial answer still needs), edition (the edition the answer is served from, with the dates it applies from and may apply until; null for a computed or live answer) and as_of (the date the answer's data was last audited, or today for a computed answer). A refusal carries the same envelope on structuredContent, so an agent can read partial and missing_inputs there as well. The change is additive: envelope 1 and 1.1 answers still validate.
Since 2.26.0:
- ADR 2025 and ADR 2027. The tools that read ADR data —
adr_lookup,adr_exemption_calculator,adr_lq_eq_check,consignment_calculator,shipment_summaryand, from 2.29.0,adr_consignment_check— takeedition("2025"or"2027") andas_of(YYYY-MM-DD).editionwins; otherwiseas_of(default today, UTC) picks the edition by the legal timeline. Without either, they answer ADR 2025 until 31 December 2026 and ADR 2027 from 1 January 2027. ADR 2027 is accepted and applies from 1 January 2027: an ADR 2027 answer for an earlier date says it is not yet applicable on thatas_of(EDITION_NOT_YET_APPLICABLE). From 1 January to 30 June 2027 either edition may be applied (EDITION_TRANSITIONAL); ADR 2025 answers end on 30 June 2027, and from 1 July 2027edition: "2025"is refused withEDITION_UNSUPPORTED. An answer on a named edition carriesadr_edition; an ADR 2027 exemption answer for UN 0081, 0082, 0084, 0241, 0331, 0332, 0482, 1005 or 1017 also carriestransitional_1_6_1_61(the ADR 2025 note-a basis that 1.6.1.61 allows until 31 December 2030) beside the verdict, never instead of it.
Since 2.25.0:
- The ADR consignment check (2.29.0).
adr_consignment_checktakes the consignment object (lines[]withun_number,quantity { value, unit, basis },packing_group/variant_index,packages,inner_packagingand, on an ID line,icao_limited_quantity;journey { date, tunnels_on_route, mode }) withedition/as_ofbeside it (journey.dateis the defaultas_of) and answersstatus—pass,fail,conditionalorinsufficient_data— withmissing_inputs[](each input by path, the check it blocks, what to send) andchecks_performed[](each check's verdict, edition, date, basis and the ADR section and page it rests on). The 1.1.3.6 check isadr_exemption_calculator's answer, whole; the LQ / EQ checks areadr_lq_eq_check's; the tunnel check gives the whole load's code (the most restrictive, 8.6.3.2) and which tunnels on the route the load may use without and with the 1.1.3.6 relief (8.6.3.3); the document entries follow 5.4.1.1.1 (a), (b), (c), (d), (k), e.g.UN 1098 ALLYL ALCOHOL, 6.1 (3), I, (C/D). From 2.30.0 it also checks mixed loading (mixed_loading_7_5_2): every pair of lines against the ADR 7.5.2.1 table by the labels of Table A column (5), subsidiary labels included, Class 1 pairs against the 7.5.2.2 table by compatibility group, each pair with its deciding cell (e.g.3 × 1.4) and source; and the foodstuffs precautions of 7.5.4 for goods with CV28, with the optionalvehicle.foodstuffs_carried. Where the ADR text does not settle a case the check asks instead of assuming. Not yet checked: plates and placards (5.3), vehicle equipment (8.1), driver training (8.2.1), packaging codes. A keyed call stores a check receipt. - Check receipts. A receipt is stored only when the package runs with an API key (
FREIGHTUTILS_API_KEY) — a free key is enough (freightutils.com/pricing). Then every answer of the seven executed checks (adr_exemption_calculator,adr_lq_eq_check,uk_duty_calculator,consignment_calculator,shipment_summary,ics2_checkand, from 2.29.0,adr_consignment_check) carries_meta.check_idand_meta.receipt_url. A receipt is the record of that one check, kept for 90 days atGET https://www.freightutils.com/api/receipts/{check_id}(?format=textfor a summary): the inputs as consumed, the edition and as-of date, the data hashes, the rules applied, the result, anything unresolved and areceipt_hasha copy can be checked against. Without a key the answer carries the receipt hash inline and nothing is stored:_meta.receipt(stored: false,reason: "key_required"; from 2.28.0 the reason may also be"quota"— the key's daily stored-receipt allowance for the day is used up, the answer is unchanged and nothing is stored;receipt_hashand the hashed fields the answer does not otherwise carry, so the hash recomputes from the answer alone), and nocheck_id(the API's rule since 30 October 2026, typed in this package from 2.26.0). Verifying by id needs no plan and no payment — a keyed check's receipt is read with the same key — and a fetch counts as one request against the daily allowance, like a lookup. A receipt never holds a name, an address, a key or an IP address. Every check also names the edition it rested on (edition+as_of), or answersedition: nullwith_meta.edition_basis"no regulatory dataset read". - Batch inputs.
adr_lookuptakesun_numbers[];unlocode_lookup,airport_lookup,airline_lookupandhs_code_lookuptakecodes[](up to 50 each);uk_duty_calculatortakeslines[](up to 10). Send the list alone: the answer isresults[]in input order, each item with its ownstatus. One call against the daily limit, one per item against the Pro monthly allowance. - What each ADR code means.
adr_lookupanswersresolved_codes[]besideresults[]: each code in Table A columns (5)–(20), once per answer, with therowsthat carry it, its summary, ADR section andverification_status.include_codespickscompact(the default for a UN number),full(adds the url, title, meaning and references) ornone;include_statements: trueadds plain-word statements to every row. The meanings are FreightUtils' paraphrases of ADR 2025, cited to section, andverification_statussays how each has been reviewed:paraphrase_unreviewed,machine_reviewed(two independent readings of the UNECE text, compared with the record; the owner adjudicates every disagreement),contested,owner_reviewed,dg_reviewed,needs_fix, orverifiedon the transport category and tunnel code entries read from the 1.1.3.6.3 and 8.6.4 tables (typed from 2.28.0). - Scopes.
--scope dg | customs | ops(orFREIGHTUTILS_SCOPE) serves only that scope's tools — see Scoped tool lists. The default serves all of them. - The consignment object.
consignment_calculator,shipment_summaryandadr_exemption_calculatortake oneconsignmentargument (schema) instead of their own inputs;validatechecks one withtype: "consignment".
Website: https://www.freightutils.com API Docs: https://www.freightutils.com/api-docs
Tools (26)
Calculators
| Tool | Description |
|---|---|
ldm_calculator |
Loading metres for European and US road trailers |
cbm_calculator |
Cubic metres for sea freight |
chargeable_weight_calculator |
Air freight chargeable weight (volumetric vs actual) |
pallet_fitting_calculator |
Box-on-pallet optimisation with rotation |
container_lookup |
ISO container specs (10 types) and loading calculation |
unit_converter |
Weight, volume, length, and freight-specific conversions |
consignment_calculator |
Multi-item CBM, LDM, volumetric & mode-specific chargeable weight (sea/air/road) + advisory flags |
emissions_calculator |
Freight CO2e via the ISO 14083 / GLEC distance-based method — open DEFRA/EPA/ADEME factors (WTW + TTW); use actual gross mass (not chargeable/volumetric); result carries empty_running + representativeness (sea/air = low) + a summary |
Dangerous Goods (ADR)
| Tool | Description |
|---|---|
adr_lookup |
2,939 UNECE ADR 2025 entries, all 20 Table A columns — beyond class, packing group, labels, special provisions, LQ/EQ, transport category, tunnel code and HIN: packing_instructions, special_packing_provisions, mixed_packing_provisions, portable_tank_instructions, portable_tank_special_provisions, tank_code, tank_special_provisions, vehicle_for_tank_carriage, carriage_packages, carriage_bulk, carriage_loading_unloading_handling, carriage_operation |
adr_exemption_calculator |
ADR 1.1.3.6 small load exemption check |
adr_lq_eq_check |
Limited and Excepted Quantity eligibility |
adr_consignment_check |
One call on the consignment object: the 1.1.3.6 verdict, LQ / EQ per line, the whole-load tunnel code against the route (ADR 8.6.3 / 8.6.4), the 5.4.1.1.1 transport-document entries and mixed loading (7.5.2, 7.5.4), with one status and page-cited checks |
In 2.34.0: the envelope declares _meta.upstream — the upstream state of the datasets an answer was drawn from, as the site's daily upstream check recorded it: per dataset the state (in_step, changed_upstream, schema_drift, unreachable, window_missed, or unknown when it could not be read), how the dataset is watched, the last successful check and the window, with stale true only when a dataset missed its window (the answer is still the last verified edition held). Optional and passthrough, so an answer without it still validates. It says whether the upstream was checked inside its window, not that an answer is right (data status). Still 26 tools.
In 2.33.0: every record the fifteen record tools return declares fu_id (a stable FreightUtils identifier, the same across editions) and, where the dataset has editions, fu_version_id (fu_id@<edition>) — optional strings on passthrough records, so an answer without them still validates; the envelope declares _meta.ids { scheme, pattern }; each of those tools says so in one closing clause; and resolve_reference takes an fu: identifier of up to 200 characters, which resolves to exactly its one record or to none (every other identifier keeps the 32-character limit). Still 26 tools.
In 2.32.0: adr_consignment_check reads the UN packaging mark of each line — the optional lines[].packages.un_mark, read by ADR 6.1.3.1 field by field (symbol, the 6.1.2.7 code, the X / Y / Z packing-group letter and the density or gross mass, S or the test pressure, year, State, maker) and its letter held against the line's packing group (packaging_code_validity; no mark → conditional; the packaging kind against the packing instruction is not checked) — and leaves a limited / excepted quantity line whose stated regime is met out of the 1.1.3.6 total (ADR 1.1.3.6.5, exemption_1_1_3_6.engine.excluded_lines). Nothing removed: every 2.31.0 argument and answer field still validates.
In 2.31.0: adr_consignment_check answers the vehicle side — placards_and_plates_5_3 (orange-coloured plates, placards for Class 1 / Class 7 packages, the 5.3.6 mark, the 3.4.13 LQ mark as a condition), equipment_8_1 (documents, the 8.1.4.1 extinguisher band by the transport unit's mass, the 8.1.5 items by danger label) and driver_training_8_2 (the 8.2.1 certificate and Class 1 / Class 7 specialisations; 8.2.3 / Chapter 1.3 under 1.1.3.6). Each lists the requirements the load puts on the vehicle and checks them against the optional vehicle.* / crew inputs; without them a dangerous-goods load is conditional. fail means a check the load does not meet: a load outside 1.1.3.6 answers exemption_1_1_3_6: not_applicable (a fully regulated load, not a failed one), a line with no stated regime that fits neither LQ nor EQ is not_applicable, and result.regime ("1.1.3.6" | "full_adr" | "undetermined") says which rules the checks answered under.
In 2.30.0: adr_consignment_check checks mixed loading (mixed_loading_7_5_2: every pair of lines against the ADR 7.5.2.1 table by the labels of Table A column (5), Class 1 pairs against 7.5.2.2 by compatibility group, each pair with its deciding cell, e.g. 3 × 1.4, and source; the foodstuffs precautions of 7.5.4 for goods with CV28) and takes the optional vehicle.foodstuffs_carried. Still to come: plates and placards 5.3, equipment 8.1 and driver training 8.2.1 in build 2c, packaging codes in build 2d. Nothing removed: every 2.29.0 argument and answer field still validates.
In 2.29.0: adr_consignment_check (above; checks today: 1.1.3.6, LQ / EQ per line, the tunnel code, the transport-document entries; coming: mixed loading 7.5.2 in build 2b, plates and placards 5.3, equipment 8.1 and driver training 8.2 in build 2c, packaging codes in build 2d — each listed as not_in_this_version until then; a keyed call stores a check receipt, a keyless one carries the receipt hash). adr_exemption_calculator types two fields the API already serves: strict_adr_2027.entry_deleted (with deleted_un_numbers and message) and items[].edition_basis. A line whose entry is deleted in ADR 2027 (e.g. UN 2941) has no ADR 2027 figure; on a stated as_of from 2027-01-01 to 2027-06-30 the load is answered on ADR 2025 under 1.6.1.1 (basis: "1.6.1.1", every line edition_basis: "2025"), the strict block's four figures null. Nothing removed: every 2.28.0 argument and answer field still validates.
In 2.28.0: adr_exemption_calculator mirrors the website's 4 November calculator changes.
icao_limited_quantity(boolean, on an ID-prefixed line such asID8000): an air-only line is counted out of 1.1.3.6 (AIR_ONLY_ID) only when the request states that the packages are limited quantities to the ICAO Technical Instructions; without it the line isBLOCKED(entry_required). On a UN-numbered line the API answers 400.- An item quantity of 0 is accepted: the goods are read as not carried, the line is left out of the load (state
EXCLUDED_NIL) and named in a warning; a load of nothing but zeros is refused, never cleared. - A gross mass on an entry counted by mass is an upper bound of the net mass: the load is exempt on it only when it clears even so (
figure_basis: "upper_bound_gross",items[].upper_bound_gross). - ADR 2027 answers carry
basis(adr_2027,1.6.1.61or1.6.1.1). ADR 2027 applies from 1 January 2027; on a statedas_offrom that date, a transitional measure that clears a load ADR 2027 itself does not is headlined, withbasis_untiland the strict ADR 2027 figure beside it (strict_adr_2027);transitional_1_6_1_1states the load on ADR 2025 inside the 1.6.1.1 window.
adr_lookup types verification_status as the ADR code registry serves it (see below). Nothing removed: every 2.27.0 argument and answer field still validates.
In 2.26.0: edition and as_of on the five ADR tools — ADR 2025 and ADR 2027 (accepted, applying from 1 January 2027) by edition or by date, with the ADR 2027 answer fields (adr_edition, transitional_1_6_1_61, transitional_notes, amended_in_2027); a check receipt is stored for keyed calls only, and an answer without a key carries its receipt hash in _meta.receipt. Nothing removed: every 2.25.0 argument and answer field still validates.
In 2.25.0: check receipts, batch inputs, resolved_codes on adr_lookup (what each Table A code means), --scope dg | customs | ops, the consignment object, and resolve_reference decodes ADR Table A codes ("TU9"). Nothing removed: every 2.24.0 call answers as before.
In 2.24.0: every tool answers with response envelope 1.2 (status, missing_inputs, edition, as_of); unlocode_lookup says 116,086 UN/LOCODE codes. In 2.23.0, adr_lookup gained the 12 further Table A columns (packing, tank, vehicle and carriage provisions, columns 8–14 and 16–19) in its description and result schema; empty columns are null.
Some UN numbers have more than one ADR Table A row (packing groups, concentration bands). When a bare UN number matches rows that give different answers, the ADR tools never pick one: they withhold the verdict and return the candidate rows, and you pin one with packing_group or variant_index. The rules, with worked cases (UN 1789, UN 1790 PG I, UN 2215 PG III): the ADR 1.1.3.6 calculator in the API docs.
Customs & Tariff
| Tool | Description |
|---|---|
hs_code_lookup |
6,940 Harmonized System tariff codes (HS 2022) |
uk_duty_calculator |
UK import duty and VAT (live GOV.UK Trade Tariff data) |
incoterms_lookup |
Incoterms 2020 — all 11 rules with risk/cost transfer points |
ics2_check |
Flag EU ICS2 unacceptable goods-description terms (stop-words) before filing an ENS — reference only |
Reference Data
| Tool | Description |
|---|---|
resolve_reference |
Resolve any freight identifier ("176", "UN1845", "NLRTM", "FOB") to typed, ranked, cited candidates when its type is unknown |
airline_lookup |
6,356 airlines with IATA/ICAO codes and AWB prefixes |
unlocode_lookup |
116,086 UN/LOCODE transport locations |
airport_lookup |
86,248 airports by IATA/ICAO code, name or city (OurAirports) |
nearest_airport |
Nearest airports to a latitude/longitude, by great-circle distance — by default airports with scheduled airline service and an IATA code (include_all: true lists every type) |
uld_lookup |
16 air cargo ULD types (LD3, PMC, etc.) |
vehicle_lookup |
17 road freight vehicles and trailers |
What's new in 2.27.0: the airline record's operational status, shared-prefix flag and air-safety-list flags; nearest_airport's scheduled-service default with include_all; the refreshed airport fields; failure reasons on validate and resolve_reference. Nothing removed: every 2.26.0 argument and answer field still validates.
- Airlines (
airline_lookup). A cargo carrier's record carriesoperational_status(active,ceasedorunknown) withoperational_status_basis— the carrier's own published page, a current FAA designator listed for that carrier, or a dead-domain check after the FAA withdrew the designator. It is a separate thing from the verificationstatusladder: a record can behistoricalin verification and still say why the carrier is ceased. Every record with an AWB prefix carriesprefix_sharedandprefix_holders(prefix 081 is shared by four carriers, Qantas among them).restrictions[]lists the carrier when the EU Air Safety List or the UK Air Safety List names it, with the list, annex, regulation or list date and the source URL. It is a flag with its source, not a legal determination — best-effort; verify with the list itself. Where the carrier publishes them, the record links its own cargo website (cargo_website), its tracking URL template (tracking_url_template) and its dangerous-goods acceptance page (dg_acceptance_url). - Airports (
airport_lookup,nearest_airport). 86,248 airports from the OurAirports refresh of 30 October 2026; records gainicao_code,scheduled_service,iso_region,gps_codeandkeywords.nearest_airportanswers, by default, airports with scheduled airline service and an IATA code — never a heliport and never a closed field.include_all: truelists every type except closed fields; atypefilter keeps the earlier behaviour for that type. Every answer statesdistance_basis: "great_circle", thefilterapplied (scheduled_iata,allortype) andfilter_description. The hosted server changed the same way on 30 October; the package now sendsinclude_alland types the answer.
Validation
| Tool | Description |
|---|---|
validate |
Parse any text (a booking line, an email) to find & validate every container (ISO 6346), AWB (modulus-7) and IMO number in it — or validate a single identifier by type |
Failure reasons (2.27.0). An invalid identifier in a validate answer carries failure — reason (INVALID_CHECK_DIGIT, WRONG_LENGTH or BAD_CHARSET), message, expected_format and an example of a valid one — so an agent can tell the user what to fix ("176-12345676": the check digit is 6, the modulus-7 calculation gives 5). An AWB whose prefix no record holds, or several records share, says so in details.airline_failure (UNKNOWN_PREFIX / AMBIGUOUS); the check digit is a different question. resolve_reference carries validation (type, valid, failure) when the query is an AWB, container or IMO number — an invalid AWB still names the carrier its prefix belongs to — and failure (NO_MATCH / AMBIGUOUS, with candidate_types) when nothing or more than one type matched.
Composite
| Tool | Description |
|---|---|
shipment_summary |
Chains CBM + weight + LDM + ADR + duty in one call |
Plans
| Tool | Description |
|---|---|
get_subscribe_link |
The pricing page URL with the Pro plan's limit and price (50,000/month at £19/mo) |
Installation
Claude (claude.ai, desktop and mobile apps, Cowork)
Add FreightUtils from Claude's connector directory: https://claude.ai/directory/connectors/freightutils. Or add it as a custom connector — Customize → Connectors → Add custom connector — with the URL https://www.freightutils.com/api/mcp. No API key, no sign-in. Setup, limits and privacy: freightutils.com/mcp#use-in-claude.
FreightUtils MCP questions
How do I add FreightUtils MCP to Claude Code?
Run claude mcp add freightutils-mcp -- npx -y freightutils-mcp in your terminal. Add --scope user to make it available in every project.
How do I add FreightUtils MCP to Cursor?
Open ~/.cursor/mcp.json and add the server under mcpServers, using the Cursor config shown in the install section above.
What tools does FreightUtils MCP provide?
It exposes 29 tools, including ldm_calculator, cbm_calculator, chargeable_weight_calculator, pallet_fitting_calculator, container_lookup.
What kind of data does FreightUtils provide?
It provides source-backed dangerous-goods, customs, location, and freight-calculation data including ADR, HS, UN/LOCODE, and IATA-regulated airline prefixes.
Does the server provide legal or booking advice?
No, it is for reference only and does not provide filing, booking, or legal advice.
How can I get a receipt for a check?
A receipt is stored when the package runs with an API key (FREIGHTUTILS_API_KEY).
Can the server handle multiple codes at once?
Yes, several tools support batch inputs, such as up to 50 codes for UN/LOCODE, airport, airline, or HS code lookups.