container-loading
Plan optimal container & truck loads: 3D layouts, utilization, centre of gravity, crush checks.
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": {
"container-loading": {
"url": "https://mcp.loadingmcp.com/mcp"
}
}
}Remote endpoints
https://mcp.loadingmcp.com/mcpstreamable-httpWhat it can do
Tool inventory
Tools (6)
🟢list_equipment(category)
List the standard container, truck, ULD and pallet types LoadingMCP can plan loads into, with internal dimensions (mm) and max payload (kg).
Input Schema
{
"type": "object",
"properties": {
"category": {
"description": "Optional category filter",
"type": "string",
"enum": [
"container",
"truck",
"uld",
"pallet"
]
}
},
"$schema": "http://json-schema.org/draft-07/schema#"
}⚪suggest_containers(volumeM3, weightKg)
Given total cargo volume (m³) and weight (kg), suggest how many of which container to use — a quick volume/weight estimate. For an exact, dimension-aware plan with utilization, CoG and securing, use plan_load (which can also auto right-size).
Input Schema
{
"type": "object",
"properties": {
"volumeM3": {
"type": "number",
"description": "Total cargo volume in cubic metres"
},
"weightKg": {
"type": "number",
"description": "Total cargo weight in kilograms"
}
},
"required": [
"volumeM3",
"weightKg"
],
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢plan_load(equipmentCode, mode, items, vgm, jurisdiction, ...)
Compute a 3D load plan for cargo into a container or truck: containers used, utilization (volume & payload %), centre of gravity, crush-protection violations, and a securing checklist (round cargo that rolls, soft cargo that slumps). Cargo `type` drives realism — drums/pipes hex-nest, big bags/sacks load on top and are never crushed. Omit `equipmentCode` to auto right-size to the cheapest container that fits. A real API key runs the production PackingSolver optimizer; the public demo key uses the offline preview packer.
Input Schema
{
"type": "object",
"properties": {
"equipmentCode": {
"description": "Equipment code, e.g. 40HC (see list_equipment). Omit to auto right-size.",
"type": "string"
},
"mode": {
"default": "sea",
"description": "Transport mode — scopes auto right-size to usable equipment (sea→containers, road→trucks, air→ULDs). Ignored when equipmentCode is given.",
"type": "string",
"enum": [
"sea",
"road",
"air"
]
},
"items": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Your reference for this cargo line"
},
"type": {
"default": "box",
"description": "Cargo shape: drum/cylinder/roll hex-nest; bigbag/sack load on top, never crushed",
"type": "string",
"enum": [
"box",
"pallet",
"drum",
"cylinder",
"bigbag",
"roll",
"sack"
]
},
"length": {
"type": "number",
"description": "mm"
},
"width": {
"type": "number",
"description": "mm"
},
"height": {
"type": "number",
"description": "mm"
},
"weight": {
"type": "number",
"description": "kg per unit"
},
"quantity": {
"default": 1,
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991
},
"stackable": {
"default": true,
"description": "Whether anything may be stacked on top",
"type": "boolean"
},
"thisSideUp": {
"default": false,
"description": "Must stay upright — restricts the packer to upright orientations",
"type": "boolean"
},
"bulky": {
"default": false,
"description": "Bulky/awkward — never takes a load on top and needs handling clearance",
"type": "boolean"
},
"deliveryStop": {
"description": "Multi-drop delivery-stop order (1 = first delivered, loaded last at the doors). ≥2 distinct stops + sequenceStops zones the load nose→doors.",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991
},
"refrigerated": {
"default": false,
"description": "Needs the cold chain (reefer only)",
"type": "boolean"
},
"hazmatClass": {
"description": "IMDG dangerous-goods class (e.g. \"3\", \"5.1\") — drives 7.2.4 segregation. Omit for non-hazardous.",
"type": "string"
},
"unNumber": {
"description": "UN number, e.g. \"UN1263\" or \"1263\". When set, the engine DERIVES the IMDG class, packing group, subsidiary risks, marine-pollutant status, segregation groups, stowage category and EmS from the curated Dangerous Goods List — no need to hand-enter each. Explicit DG fields override the derived ones.",
"type": "string"
},
"packingGroup": {
"description": "IMDG packing group. Derived from the UN number when unNumber is set.",
"type": "string",
"enum": [
"I",
"II",
"III"
]
},
"marinePollutant": {
"description": "Marine pollutant (IMDG 2.10 / MARPOL Annex III). Derived from the DGL.",
"type": "boolean"
},
"limitedQuantity": {
"description": "Shipped as a limited quantity (IMDG 3.4) — exempt from most segregation except vs class 1/7.",
"type": "boolean"
},
"subsidiaryHazards": {
"description": "IMDG subsidiary hazard classes, e.g. [\"6.1\", \"8\"].",
"type": "array",
"items": {
"type": "string"
}
},
"segregationGroups": {
"description": "IMDG 2.7.2.5 segregation groups this substance belongs to.",
"type": "array",
"items": {
"type": "string"
}
},
"segregateFromGroups": {
"description": "IMDG segregation groups to keep this substance away from (its DGL column-16b provisions).",
"type": "array",
"items": {
"type": "string"
}
},
"compatibilityGroup": {
"description": "Class-1 explosives compatibility group (A–S).",
"type": "string"
},
"maxStackWeightKg": {
"description": "Your crush limit: max kg allowed on top of one unit. Omit for a generous default; 0 = nothing may stack on it.",
"type": "number",
"minimum": 0
},
"boardEctLbIn": {
"description": "Corrugated edge-crush test (lb/in) → physical McKee crush limit for cartons",
"type": "number",
"exclusiveMinimum": 0
},
"boardCaliperMm": {
"description": "Corrugated board thickness (mm)",
"type": "number",
"exclusiveMinimum": 0
},
"doubleWall": {
"description": "Double-wall corrugated (vs single)",
"type": "boolean"
}
},
"required": [
"id",
"length",
"width",
"height",
"weight"
]
},
"description": "Cargo lines to load"
},
"vgm": {
"description": "SOLAS Verified Gross Mass declaration (else a tare+cargo estimate is reported)",
"type": "object",
"properties": {
"declaredKg": {
"description": "Shipper-declared SOLAS VGM per container (kg), index-aligned to containers used",
"type": "array",
"items": {
"type": "number",
"minimum": 0
}
},
"method": {
"description": "VGM method: M1 = weighbridge of the packed container, M2 = certified calculated sum",
"type": "string",
"enum": [
"M1",
"M2"
]
},
"dunnageKg": {
"description": "Dunnage/securing mass (kg) to fold into the calculated VGM estimate",
"type": "number",
"minimum": 0
}
}
},
"jurisdiction": {
"description": "Road jurisdiction for the axle / gross-weight compliance check (default EU). Set CN for China GB 1589 drayage limits.",
"type": "string",
"enum": [
"EU",
"US",
"CN"
]
},
"sequenceStops": {
"default": false,
"description": "Delivery-stop sequencing: with ≥2 distinct deliveryStop values, zone the load nose→doors in reverse delivery order.",
"type": "boolean"
},
"vesselMotion": {
"description": "IMO CSS Annex 13 vessel motion + stowage position. When set, the sea leg uses the position-dependent DYNAMIC acceleration field (a container on deck forward sees a far harsher case than one low amidships) instead of the flat sea-area coefficient.",
"type": "object",
"properties": {
"lengthFraction": {
"type": "number",
"minimum": 0,
"maximum": 1,
"description": "Longitudinal stowage position as a fraction of ship length from the aft perpendicular (0=aft, 1=fore)."
},
"stowageZone": {
"type": "string",
"enum": [
"onDeckHigh",
"onDeckLow",
"tweendeck",
"lowerHold"
],
"description": "Vertical stowage zone."
},
"lengthM": {
"description": "Ship length between perpendiculars (m); with speedKn, derives the Annex 13 length/speed correction (50–300 m).",
"type": "number",
"exclusiveMinimum": 0
},
"speedKn": {
"description": "Service speed (kn); pairs with lengthM.",
"type": "number",
"exclusiveMinimum": 0
},
"bOverGm": {
"description": "Beam / metacentric-height ratio B/GM; derives the Annex 13 transverse B/GM correction.",
"type": "number",
"exclusiveMinimum": 0
},
"lengthSpeedFactor": {
"description": "Explicit IMO CSS Annex 13 length/speed correction factor (fallback when lengthM/speedKn absent).",
"type": "number",
"exclusiveMinimum": 0
},
"bGmFactor": {
"description": "Explicit IMO CSS Annex 13 B/GM correction factor (fallback when bOverGm absent).",
"type": "number",
"exclusiveMinimum": 0
}
},
"required": [
"lengthFraction",
"stowageZone"
]
}
},
"required": [
"items"
],
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢export_plan(equipmentCode, mode, retailers, items)
Export a load as a machine-readable LOADING WORK ORDER: a numbered stuffing sequence (which SKU, where, in what order and orientation), the securing/bracing action list, the key declarable figures (VGM, axle load, centre of gravity), and an optional per-retailer inbound-packaging check (Amazon FBA / Walmart). Feed it to a WES/TMS, a robotic palletiser, or a printable worker sheet. This is decision support to MEET published retailer/carrier specs — verify in your own portal; it is not a retailer certification.
Input Schema
{
"type": "object",
"properties": {
"equipmentCode": {
"description": "Equipment code, e.g. 40HC (see list_equipment). Omit to auto right-size.",
"type": "string"
},
"mode": {
"default": "sea",
"description": "Transport mode for auto right-size (ignored when equipmentCode is given).",
"type": "string",
"enum": [
"sea",
"road",
"air"
]
},
"retailers": {
"description": "Retailer inbound-packaging profiles to check the load against.",
"type": "array",
"items": {
"type": "string",
"enum": [
"AMAZON_FBA",
"WALMART_STORES",
"WALMART_WFS",
"GENERIC_GMA"
]
}
},
"items": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Your reference for this cargo line"
},
"type": {
"default": "box",
"type": "string",
"enum": [
"box",
"pallet",
"drum",
"cylinder",
"bigbag",
"roll",
"sack"
]
},
"length": {
"type": "number",
"description": "mm"
},
"width": {
"type": "number",
"description": "mm"
},
"height": {
"type": "number",
"description": "mm"
},
"weight": {
"type": "number",
"description": "kg per unit"
},
"quantity": {
"default": 1,
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991
},
"stackable": {
"default": true,
"type": "boolean"
},
"hazmatClass": {
"description": "IMDG class (e.g. \"3\", \"5.1\"); omit if none",
"type": "string"
},
"unNumber": {
"description": "UN number (e.g. \"UN1263\") — derives the IMDG class/PG/segregation/stowage/EmS from the DGL.",
"type": "string"
},
"maxStackWeightKg": {
"type": "number",
"minimum": 0
}
},
"required": [
"id",
"length",
"width",
"height",
"weight"
]
},
"description": "Cargo lines to load"
}
},
"required": [
"items"
],
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢import_packing_list(packingList)
ERP/TMS on-ramp: take a versioned "loadingmcp.packing-list" document (a WMS/ERP export — cargo lines + equipmentCode) and return a load plan + a container manifest. Parsing is fail-explicit: an invalid document returns the exact per-line issues, never a silently-dropped row. Pairs with plan_load's output for a full round-trip.
Input Schema
{
"type": "object",
"properties": {
"packingList": {
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": {},
"description": "A loadingmcp.packing-list document: { format: \"loadingmcp.packing-list\", formatVersion, equipmentCode, jurisdiction?, lines: [...] }. See docs/INTEGRATION.md."
}
},
"required": [
"packingList"
],
"$schema": "http://json-schema.org/draft-07/schema#"
}⚪export_dg_paperwork(packingList)
Draft the dangerous-goods paperwork for a load from its cargo lines: an IMDG 5.4.1 transport-document description per DG line (UN, proper shipping name, class, PG, marine pollutant), the 5.3 placards + marks required, and the 5.4.2 container/vehicle packing-certificate statements. Input is a "loadingmcp.packing-list" document. This is a DRAFT from the curated DGL — it lists the fields a DG-competent person must still complete (flash point, net explosive mass, unverified PSN) and is never signed.
Input Schema
{
"type": "object",
"properties": {
"packingList": {
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": {},
"description": "A loadingmcp.packing-list document with DG-bearing lines (unNumber/hazmatClass/packingGroup/marinePollutant). See docs/INTEGRATION.md."
}
},
"required": [
"packingList"
],
"$schema": "http://json-schema.org/draft-07/schema#"
}Community
Evidence