Fortitude21 Dangerous Goods Tools
Dangerous goods packaging tools: UN number lookup, UN mark decoder, ADR points, IBC dates, bunds
Should I use this
Quality & Safety
Based on automated analysis of tool definitions and protocol compliance.
Context Cost
This is the approximate number of tokens consumed each time the server's tools are loaded into a model's context. Higher counts reduce the attention available for other tasks.
Install
One-Click Install
Add this to your `claude_desktop_config.json` file:
{
"mcpServers": {
"dangerous-goods": {
"url": "https://fortitude21.com/mcp"
}
}
}Remote endpoints
https://fortitude21.com/mcpstreamable-httpWhat it can do
Tool inventory
Tools (6)
🟢un_number_packaging(un, name)
Look up a dangerous goods UN number (or substance name) in ADR 2025 Table A and its packing instructions. Returns class, packing group, limited quantity, UN mark level and, for each container type (jerrican, drum, IBC, composite), the UN codes allowed and the largest size in litres. Covers 72 UN numbers of liquids.
Input Schema
{
"type": "object",
"properties": {
"un": {
"type": "string",
"description": "UN number, e.g. \"1203\" or \"UN 1203\""
},
"name": {
"type": "string",
"description": "Substance name instead of a UN number, e.g. \"acetone\""
}
}
}🟢decode_un_packaging_mark(mark, un)
Read a UN packaging mark part by part (packaging code, performance level, density or gross mass, test pressure, year, state, maker; IBC, large packaging, salvage and reconditioned marks too). Add a UN number to check whether the container may carry that substance under ADR 2025.
Input Schema
{
"type": "object",
"properties": {
"mark": {
"type": "string",
"description": "The mark as printed, e.g. \"UN 3H1/Y1.9/150/26/D/BAM 12345\""
},
"un": {
"type": "string",
"description": "Optional UN number to check the mark against"
}
},
"required": [
"mark"
]
}🟢ibc_inspection_dates(mark, code, made, leak, insp, ...)
Work out an IBC's next leakproofness test, 2.5-year and 5-year inspections, the last month it may be filled and (UN/ADR, plastic and composite IBCs) the end of its five-year life. Dates as MM/YYYY, "March 2024" or YYYY-MM.
Input Schema
{
"type": "object",
"properties": {
"mark": {
"type": "string",
"description": "The IBC UN mark; code and month of manufacture are read from it"
},
"code": {
"type": "string",
"description": "IBC code, e.g. 31HA1, if no mark"
},
"made": {
"type": "string",
"description": "Month of manufacture"
},
"leak": {
"type": "string",
"description": "Month of the last leakproofness test"
},
"insp": {
"type": "string",
"description": "Month of the last inspection"
},
"regime": {
"type": "string",
"enum": [
"un",
"us"
],
"description": "un (UN Model Regulations and ADR, default) or us (49 CFR 180.352)"
}
}
}🟢adr_1000_points(lines)
Total the ADR 1.1.3.6 points for a vehicle load and say whether it stays within the small-load exemption (1,000 points, or the quantity limit for one transport category), and what still applies. Covers 92 UN numbers. If any line cannot be read the whole load is refused, never totalled without it.
Input Schema
{
"type": "object",
"properties": {
"lines": {
"type": "array",
"description": "One item per substance",
"items": {
"type": "object",
"properties": {
"un": {
"type": "string",
"description": "UN number, e.g. \"1203\""
},
"packing_group": {
"type": "string",
"enum": [
"I",
"II",
"III"
],
"description": "Packing group from section 14 of the safety data sheet. Needed where the UN number has entries in more than one transport category, such as 1263 paint"
},
"quantity_per_package": {
"type": "number",
"description": "Litres or kg in each package"
},
"packages": {
"type": "integer",
"description": "Number of packages",
"default": 1
}
},
"required": [
"un",
"quantity_per_package"
]
}
}
},
"required": [
"lines"
]
}🟢bund_size(region, liquid, drums, ibcs, small, ...)
Apply the secondary containment rule for a country or region to the containers stored together, and return the minimum sump capacity in litres, the rule that governs, and spill pallets that pass. Regions: England, Wales, Scotland, Northern Ireland, Ireland, Germany, France, Netherlands, Spain, United States, Canada, Australia, New Zealand, Singapore, Japan, or world.
Input Schema
{
"type": "object",
"properties": {
"region": {
"type": "string",
"description": "e.g. \"gb-eng\", \"England\", \"us\", \"Texas\", \"Germany\""
},
"liquid": {
"type": "string",
"description": "oil (fuel, diesel, petrol), flam (flammable), other (chemicals); waste in the US"
},
"drums": {
"type": "integer",
"description": "Number of 205-litre drums"
},
"ibcs": {
"type": "integer",
"description": "Number of 1,000-litre IBCs"
},
"small": {
"type": "integer",
"description": "Number of smaller containers"
},
"smallSize": {
"type": "number",
"description": "Litres in each smaller container"
},
"other": {
"type": "integer"
},
"otherSize": {
"type": "number"
}
}
}🟢jerry_can_quantity(mode, scenario, people, days, distance, ...)
Work out how much water (people x days x litres a day, Sphere and national advice) or fuel (distance and consumption, or hours and consumption, or generator kVA) to hold, with a margin, and how many jerry cans that takes.
Input Schema
{
"type": "object",
"properties": {
"mode": {
"type": "string",
"enum": [
"water",
"fuel"
]
},
"scenario": {
"type": "string",
"description": "Water: relief, acute, protracted, survival, nl, se, no, fi, dk, de, custom. Fuel: road, overland, marine, generator, agri, direct."
},
"people": {
"type": "number"
},
"days": {
"type": "number"
},
"distance": {
"type": "number",
"description": "km (miles with units=us)"
},
"consumption": {
"type": "number",
"description": "L/100 km or L/h"
},
"hours": {
"type": "number"
},
"kva": {
"type": "number"
},
"units_n": {
"type": "number",
"description": "Vehicles, boats or machines"
},
"volume": {
"type": "number"
},
"reserve": {
"type": "number",
"description": "Margin in per cent"
}
}
}Community
Evidence