mcp-packing-list
Create and manage price-free packing lists and packing slips, from ordered lines through cartons, packing, weight reporting, shipment status and final slip.
Create packing lists against an order reference with consignee, ship-to address, date and note.
Declare expected order lines with SKU, description and quantity so shortfalls are calculated.
Add cartons with labels, tare weight in whole grams, and optional full dimensions.
Pack or unpack items into cartons with quantities and per-unit weights.
Show full packing-list details, including contents, derived weights, shortfall, readiness and status history.
List and filter packing lists by status, reference, consignee or open-only.
Generate carton/shipment reports with tare, net, gross, volume, volumetric and chargeable weight using a configurable divisor.
Report packing shortfall, over-packing and items packed but not on the order.
Move lists through draft, packed, shipped or cancelled statuses; shipping records carrier/tracking and freezes the list.
Produce a plain-text packing slip with no prices; Pro can also write it to a .txt file.
Delete non-shipped packing lists with confirmation.
Check licence status and activate a Pro key offline.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@mcp-packing-list Create a packing list for order 1042 and show the shortfall report."
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
mcp-packing-list
MCP server for packing slips and packing lists: cartons, contents, weights, chargeable weight and what is still to pack. Packing slips that carry no prices: what is in each carton, what it weighs, and what is still to pack.
Works with Claude Desktop, Claude Code, Cursor and any Model Context Protocol client. Runs on your own machine, or hosted with no install.
Product page: https://mcp.zovo.one/s/packing-list - what it does, the tools it exposes, and a live token endpoint.
Install
Hosted, nothing to install. Get a token from https://mcp.zovo.one/mcp/connect (the connect page) or https://mcp.zovo.one/mcp/token (the same token as JSON); a free anonymous one is issued on the spot and a Pro key works the same way. Then point an MCP client at https://mcp.zovo.one/mcp/packing-list over streamable-http and send the token as Authorization: Bearer <token>.
If your client cannot set headers, put the token in the path instead: https://mcp.zovo.one/mcp/packing-list/t/<token>. Both forms work. The bare URL with no token answers 401 on tools/call, so the token is not optional.
Claude Desktop, one click. Download packing-list.mcpb from the latest release and double-click it.
From source. The mirror is self-contained: every @theluckystrike/* dependency is vendored, so a fresh clone builds with no extra setup.
git clone https://github.com/theluckystrike/mcp-packing-list.git
cd mcp-packing-list
npm install && npm run buildThen point your client at the built entry point:
{
"mcpServers": {
"packing-list": {
"command": "node",
"args": ["/absolute/path/to/mcp-packing-list/dist/index.js"]
}
}
}
@theluckystrike/mcp-packing-listis not published on npm yet, so annpx -y @theluckystrike/mcp-packing-listcommand will fail. The three paths above are the working ones and each is exercised by CI.

Read-only mirror of mcp-servers/servers/packing-list. See MIRROR.md.
In the official MCP Registry (io.github.theluckystrike/packing-list).
The packing slip for a shipment, and the answer to the only two questions anybody asks
while packing one: what is in which box, and what is still to pack. A packing list is
raised against an order you name, the lines that order says should ship are declared on
it, cartons are added with a tare weight and their outside dimensions, and goods go into
cartons one call at a time. packing_shortfall then reports every line as short, complete,
over-packed, or packed and not on the order at all. carton_report gives the tare, net,
gross, volume, volumetric and chargeable weight per carton and for the shipment.
That is not a simplification, it is what the document is
for: it travels inside the box, and the consignee's warehouse is not the party that sees
what the goods cost. The invoice against the same order is a different document and lives
in @theluckystrike/mcp-invoice. There is no money arithmetic in this server at all, and a
test asserts there is not.
Mass is in whole grams everywhere and dimensions in whole centimetres, for the same reason money is in minor units: a kilogram carried as a float accumulates error over a hundred lines and then disagrees with the carrier's scale.
Nothing derived is stored. A record holds its cartons, its declared order lines and its packed lines; every weight and the whole shortfall are computed on the call. A stored gross weight is a second copy of what the lines already say, and it is the copy that gets believed after somebody unpacks a line.
Related MCP server: Shipi MCP
The chargeable weight, which is the number that costs money
Couriers bill the greater of what a box weighs and what its volume is worth. The volumetric
weight is length x width x height / divisor, in centimetres, and the divisor is a tariff
term: 5000 cm3/kg is the courier air default, 6000 the older IATA air figure, 4000 appears
on some road tariffs. It is a parameter on every tool that reports it and never a constant
inside a formula, because a chargeable weight computed against the wrong divisor is a
carrier invoice nobody catches until the account is reconciled.
Two refusals matter here and both are deliberate:
A carton with only two of its three dimensions is refused outright. Two of three cannot make a volume, and a partially measured box would drop silently out of the shipment total.
If any carton has no dimensions at all, the shipment's volumetric and chargeable totals come back as
null, never as a total that quietly skipped three boxes.
Install
One-click (.mcpb): download packing-list.mcpb from the latest release and double-click
it in Claude Desktop: https://github.com/theluckystrike/mcp-servers/releases/latest
npm publish for @theluckystrike/mcp-packing-list is pending, so the npx line below
returns 404 today. Build from source in the meantime; see llms-install.md.
Claude Desktop
~/Library/Application Support/Claude/claude_desktop_config.json (macOS) or
%APPDATA%\Claude\claude_desktop_config.json (Windows):
{
"mcpServers": {
"packing-list": {
"command": "npx",
"args": ["-y", "@theluckystrike/mcp-packing-list"]
}
}
}Claude Code
claude mcp add packing-list -- npx -y @theluckystrike/mcp-packing-listCursor
~/.cursor/mcp.json (global) or .cursor/mcp.json (project), same entry as Claude Desktop.
Tools
Tool | What it does |
| Open a packing list against an order: the reference, the consignee, where it ships to, the date |
| Declare an ordered line, so the shortfall is real. Nothing is read from the quotes, work-order or invoice store |
| Add a carton: a label, the empty weight in whole grams, and all three outside dimensions or none |
| Put a quantity of one item into a named carton, with the per-unit weight in whole grams |
| Take a packed line back out by its L01-style id. Deleted, not zeroed |
| The whole list: cartons with contents and weights, the ordered lines, the shortfall, and whether it is ready to ship |
| Packing lists newest first, filtered by status, order reference or consignee |
| Tare, net, gross, volume, volumetric and chargeable weight, per carton and for the shipment |
| Ordered against packed: what is short, what is over-packed, what is not on the order |
| draft to packed to shipped, or cancelled. Shipping records the carrier and tracking, and freezes the list |
| The slip as text on every tier. Pro also writes it to |
| Delete a list for good. A shipped list is refused: it is the record of what left the building |
| Which tier this install is on and where the key came from |
| Store a Pro key for this server |
There is also a resource, packinglist://contract, carrying the status machine, the weight
basis, what each shortfall state means, the free-tier limits and the one directory this
server writes; and a prompt, pack_the_shipment, that walks the whole job in order.
Free vs Pro
Free | Pro | |
Open packing lists at once | 3 | unlimited |
Cartons, packed lines, ordered lines | unlimited | unlimited |
| yes | yes |
The packing slip as text | yes | yes |
Writing the slip to a file with | no | yes |
The cap is on shipments in flight, not on knowing what is in a box. Marking a list shipped or cancelling it frees its slot, and so does deleting a draft, so a free user can always get back under the limit without a key.
Get Pro: https://mcp.zovo.one/buy/packing-list (one-time), or all servers for one price at https://mcp.zovo.one/buy/bundle
Privacy
All data stays local, in
${XDG_DATA_HOME:-~/.local/share}/mcp-servers/packing-list/. There is no network call
anywhere in this server, no API key, and no account. The only file it reads that it does not
own is the shared business profile, for the name and address at the top of the slip, and it
never writes to it.
Built by theluckystrike. Support: support@zovo.one
Use these docs as an MCP server
Any MCP client (Claude, Cursor, Windsurf, VS Code) can read this repository's documentation directly via GitMCP - no install:
Docs MCP URL: https://gitmcp.io/theluckystrike/mcp-packing-list
Available Tools
14 toolscarton_addAdd a cartonB
Add a carton to a packing list and return its C01-style id: a label, the empty weight in WHOLE GRAMS, and optionally length, width and height in WHOLE CENTIMETRES. Dimensions are what make a chargeable weight possible.
Inputs: label (required), tare_grams (required), packing_list (required), note, +3 more.
carton_reportWeigh the cartonsA
Per carton and for the shipment: tare, net, gross, volume, volumetric weight and the chargeable weight, the greater of gross and volumetric. A carton with no dimensions makes the chargeable total null, never a guess.
Inputs: packing_list (required), divisor.
license_activateActivate licenseA
Activate a Pro key (MCPL1.xxx.yyy) from checkout: verified offline against a built-in public key, saved to your config file. A wrong, malformed or expired key is refused, unsaved. license_status reads it back.
Inputs: key (required).
license_statusLicense statusA
Report this server's licence state: product, tier free or pro, licence id, expiry, the key source and the upgrade URL. No arguments, no network. Explains a free-tier refusal; license_activate installs a key.
Inputs: no named parameters.
packing_expectDeclare what the order says should shipA
Add an ordered line to a packing list so the shortfall is real: a SKU, a description and a quantity. Nothing is read from the quotes, work order or invoice store; what the order says is stated here.
Inputs: quantity (required), description (required), packing_list (required), sku.
packing_list_createOpen a packing listA
Open a packing list against an order and return its PL-YYYY-NNNN number: the order reference, the consignee, where it ships to and the date. Free tier: 3 open at once; shipping or cancelling frees a slot.
Inputs: consignee (required), reference (required), date, note, +3 more.
packing_list_deleteDelete a packing listA
Delete a packing list for good, with its cartons and packed lines. A shipped list is refused: it is the record of what left the building. Cancel a list you no longer want instead of deleting a real shipment.
Inputs: confirm (required), packing_list (required).
packing_list_listList packing listsA
Packing lists newest first, with cartons, units, gross weight and how many ordered lines are still short. Filter by status, by order reference or by consignee. Returns at most 500 rows.
Inputs: status, divisor, consignee, open_only, +1 more.
packing_list_showShow one packing listA
The whole packing list: its cartons with contents and derived weights, the ordered lines, the shortfall, whether it is ready to ship and why not, and its status history. Nothing here is stored; it is computed.
Inputs: packing_list (required), divisor.
packing_list_statusMove a packing list onA
Move a packing list draft to packed to shipped, or cancel it. Shipping records the carrier, the tracking number and the date, and freezes the list. A shipped list cannot be reopened or edited.
Inputs: status (required), packing_list (required), date, note, +3 more.
packing_shortfallWhat is still to packA
Ordered against packed, line by line: what is still short, what was over-packed, and what was packed that is not on the order at all. A packed line with no ordered line is reported, never dropped.
Inputs: packing_list (required).
packing_slipProduce the packing slipA
The packing slip as plain text on every tier: cartons, contents, weights and a signature line, and no prices anywhere. Pro also writes it to out_path as a .txt file. Refuses a URL and refuses to overwrite unless told to.
Inputs: packing_list (required), divisor, out_path, overwrite.
pack_itemPack goods into a cartonB
Put a quantity of one item into a named carton: a description, how many, and the per-unit weight in WHOLE GRAMS. Leave unit_grams out when it was not weighed and the carton gross comes back as a lower bound.
Inputs: carton (required), quantity (required), description (required), packing_list (required), +3 more.
unpack_itemTake a packed line back outA
Remove one packed line from a packing list by its L01-style id and return the carton it came out of. The line is deleted, not zeroed, so the slip does not print an item nobody packed.
Inputs: line (required), packing_list (required).
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 14 tools
Most tools target a distinct resource/action: create vs add expected line vs add carton vs pack vs unpack are clear. The main overlap risk is among read/report tools (packing_list_show, carton_report, packing_slip, packing_shortfall), but their descriptions differentiate scope well enough.
Names are all snake_case and readable, but conventions are mixed: resource_verb (packing_list_create, carton_add), verb_resource (pack_item, unpack_item), and noun-only names (packing_shortfall, packing_slip, license_status). 'packing_list_list' and 'packing_expect' are awkward and break a predictable pattern.
14 tools is well within the ideal range and each tool covers a specific step in the packing workflow, including license management. No tool feels redundant, and the set is not bloated.
The packing list lifecycle is largely covered: create, add expected lines, add cartons, pack/unpack, report, status transitions, slip, delete, and licensing. However, there is no way to edit or remove an expected line or a carton, so a mistaken packing_expect or carton_add can only be fixed by destructive actions like canceling/deleting the whole list.
Maintenance
Related MCP Connectors
Packing slips: cartons, contents, weights, chargeable weight and what is still to pack.
Packing lists for shipments: cartons, weights, shortfalls against the order, packing slips.
Calculate required trucks or containers, verify shipment fit, and manage Haulista loading plans.
Compare rates, manage orders, buy labels, schedule pickups, and report on shipping.
Related MCP Servers
- -licenseNot gradedqualityNot gradedmaintenanceEnables comprehensive shipping and order management through EasyPost and Veeqo integrations. Supports creating orders, generating shipping labels, tracking shipments, and managing unified workflows with a web-based dashboard interface.-
- AlicenseAqualityDmaintenanceManage shipping workflows by creating labels, tracking packages, and scheduling carrier pickups. Compare live rates from major carriers like FedEx and UPS to optimize costs for every shipment. Organize logistical operations with a centralized address book and detailed shipping analytics.189 npm1MIT

Easyship MCPofficial
AlicenseNot gradedqualityDmaintenanceEnables AI agents to manage global shipping operations, including rate comparison, shipment creation, label purchasing, tracking, pickup scheduling, address validation, billing, and analytics, via natural language.32 npmMIT- AlicenseNot gradedqualityCmaintenanceEnables AI agents to track packages, rate and create shipments, manage pickups and customs documentation, and perform international shipping logistics checks through natural language.MIT