# Zhihuo Container Loading

> How many identical cartons fit in a container or space, where they go, plus a 3D loading plan.

- name: net.zhihuo.mcp/container-loading
- version: 1.0.1
- connection class: R0 (autonomous)
- trust: 60/100 flags: no-repository, deprecated
- quality: 82/100 (good)
- owner: not claimed
- descriptor: https://api.protogrid.dev/v1/servers/net.zhihuo.mcp%2Fcontainer-loading
- tools: https://api.protogrid.dev/v1/servers/net.zhihuo.mcp%2Fcontainer-loading/tools

**An agent can connect right now, no human step.** Remote endpoint, no authentication, reachable on the last probe.

## Connection (mcpServers)

```json
{
  "mcpServers": {
    "container-loading": {
      "type": "http",
      "url": "https://mcp.zhihuo.net/mcp"
    }
  }
}
```


## Trust

- hygiene: 70
- liveness: 100
- freshness: 10
- provenance: 45
- drivers: +dns-namespace +reachable +uptime-100% -no-repository -deprecated
- Derived from observable signals (official registry feed and our own credential-free probes); no code audit performed.

## Quality 82/100 (good)

### protocol: 75 (weight 25)

- warn `protocol.modern`: newest supported version is 2025-11-25; 2026-07-28 not supported, older versions are deprecated until 2027-07-28
- n/a `protocol.stateless`: only applies to 2026-07-28 servers
- pass `protocol.transport`: streamable HTTP
- n/a `protocol.list_ttl`: only applies to 2026-07-28 servers

### authorization: n/a (weight 15)

- n/a `auth.prm`, `auth.as_metadata`, `auth.cimd`: no remote uses OAuth
- n/a `auth.secret_in_url`: no templated URL

### tool hygiene: 79 (weight 30)

- pass `tools.descriptions`: every tool has a description
- warn `tools.description_length`: 1 tools have descriptions over 1,024 characters, which crowds the context
- pass `tools.schemas`: every tool has an object input schema
- pass `tools.annotations`: 2 of 2 tools declare readOnlyHint or destructiveHint
- fail `tools.directory_hints`: no tool declares all four of readOnlyHint, destructiveHint, idempotentHint and openWorldHint; missing: pack_boxes (destructiveHint); send_feedback (idempotentHint)
- pass `tools.token_cost`: about 1,154 tokens to load every tool
- pass `tools.api_dump`: tools are not a one-to-one API dump

### stability: 100 (weight 15)

- pass `stability.changes`: 2 tool changes in 30 days
- pass `stability.rug_pull`: no tool changed its meaning under the same name

### dependencies: n/a (weight 15)

- n/a `deps.known_vulns`, `deps.mcp_sdk_version`, `deps.resolvable`: no npm or PyPI package

- tools: 2, about 1,154 tokens to load them all
- tool set hash: d95501f207e51745ec79557fb2d5dcbc
- tools last changed: 2026-10-19T22:46:31.349Z
- badge: [![protogrid quality](https://protogrid.dev/badge/net.zhihuo.mcp/container-loading.svg)](https://protogrid.dev/servers/net.zhihuo.mcp/container-loading)
- Checks run on what our credential-free, read-only probes observe; tools are never called and no code audit is performed.

### Tool changes

- 2026-10-19 `pack_boxes` changed (description)
  - before: Calculate how many identical boxes fit in a rectangular space, and where. The space is a shipping container, a pallet area, leftover container space, or a larger box. Give the box's L/W/H and EITHER a `container` preset OR the space's L/W/H (all in millimetres - container presets are mm). Boxes mix orientations across regions to pack densely; the plain maximum-load answer uses the exact SmartPacker T solver. Args: box_length: Box length. box_width: Box width. box_height: Box height. container: Container preset instead of explicit space dims (fills the internal usable L/W/H in mm; overrides space_* when recognised). ISO dry: 20GP 20HQ 40GP 40HQ 45GP 45HQ; NA domestic: 53HC 48HC; reefers: 20RF 40RF 40RH; EU pallet-wide: 40HQ-PW 45HQ-PW. Many aliases (20/40/45, 20ft, 40HC, 40', 40 reefer, ...). space_length: Space length (front-back). Use this OR `container`. space_width: Space width (left-right). space_height: Space height (up). count: How many boxes to load. 0 (default) loads the maximum. to_front: Anchor a partial load to the front (else the back). to_left: Anchor a partial load to the left (else the right). to_bottom: Kept for compatibility, no effect: boxes always rest on the floor. box_weight: Weight of one box (optional; same unit as max_weight). max_weight: Max total load weight (optional; 0 = no weight limit). include_image: Set true ONLY when the user wants to SEE or visualize the loading plan / 3D layout (e.g. "show the loading plan", "visualize it", "what does it look like?"). Default false is faster and lighter and still returns `image_url`, a shareable link to the 3D render. When true, the image is ALSO embedded inline (Claude Desktop and Cherry Studio display it; the claude.ai web app shows only the link either way). Returns the maximum that fits, how many were loaded, the fill rate, the region/block decomposition (each block's position, orientation, and grid), any weight limit applied, an `image_url` link to the rendered 3D loading plan, and - when include_image is true - the inline image too.
  - after: Calculate how many identical boxes fit in a rectangular space, and where. The space is a shipping container, a pallet area, leftover container space, or a larger box. Give the box's L/W/H and EITHER a `container` preset OR the space's L/W/H (all in millimetres - container presets are mm). Boxes mix orientations across regions to pack densely; the plain maximum-load answer uses the exact T1 solver. Args: box_length: Box length. box_width: Box width. box_height: Box height. container: Container preset instead of explicit space dims (fills the internal usable L/W/H in mm; overrides space_* when recognised). ISO dry: 20GP 20HQ 40GP 40HQ 45GP 45HQ; NA domestic: 53HC 48HC; reefers: 20RF 40RF 40RH; EU pallet-wide: 40HQ-PW 45HQ-PW. Many aliases (20/40/45, 20ft, 40HC, 40', 40 reefer, ...). space_length: Space length (front-back). Use this OR `container`. space_width: Space width (left-right). space_height: Space height (up). count: How many boxes to load. 0 (default) loads the maximum. to_front: Anchor a partial load to the front (else the back). to_left: Anchor a partial load to the left (else the right). to_bottom: Kept for compatibility, no effect: boxes always rest on the floor. box_weight: Weight of one box (optional; same unit as max_weight). max_weight: Max total load weight (optional; 0 = no weight limit). include_image: Set true ONLY when the user wants to SEE or visualize the loading plan / 3D layout (e.g. "show the loading plan", "visualize it", "what does it look like?"). Default false is faster and lighter and still returns `image_url`, a shareable link to the 3D render. When true, the image is ALSO embedded inline (Claude Desktop and Cherry Studio display it; the claude.ai web app shows only the link either way). Returns the maximum that fits, how many were loaded, the fill rate, the region/block decomposition (each block's position, orientation, and grid), any weight limit applied, an `image_url` link to the rendered 3D loading plan, and - when include_image is true - the inline image too.
- 2026-10-18 `pack_boxes` changed (description)
  - before: Calculate how many identical boxes fit in a rectangular space, and where. The space is a shipping container, a pallet area, leftover container space, or a larger box. Give the box's L/W/H and EITHER a `container` preset OR the space's L/W/H (all in millimetres - container presets are mm). Boxes mix orientations across regions to pack densely; the plain maximum-load answer uses the exact SmartPacker T solver. Args: box_length: Box length. box_width: Box width. box_height: Box height. container: Container preset instead of explicit space dims (fills the internal usable L/W/H in mm; overrides space_* when recognised). ISO dry: 20GP 20HQ 40GP 40HQ 45GP 45HQ; NA domestic: 53HC 48HC; reefers: 20RF 40RF 40RH; EU pallet-wide: 40HQ-PW 45HQ-PW. Many aliases (20/40/45, 20ft, 40HC, 40', 40 reefer, ...). space_length: Space length (front-back). Use this OR `container`. space_width: Space width (left-right). space_height: Space height (up). count: How many boxes to load. 0 (default) loads the maximum. to_front: Anchor a partial load to the front (else the back). to_left: Anchor a partial load to the left (else the right). to_bottom: Anchor a partial load to the bottom (else the top). box_weight: Weight of one box (optional; same unit as max_weight). max_weight: Max total load weight (optional; 0 = no weight limit). include_image: Set true ONLY when the user wants to SEE or visualize the loading plan / 3D layout (e.g. "show the loading plan", "visualize it", "what does it look like?"). Default false is faster and lighter and still returns `image_url`, a shareable link to the 3D render. When true, the image is ALSO embedded inline (Claude Desktop and Cherry Studio display it; the claude.ai web app shows only the link either way). Returns the maximum that fits, how many were loaded, the fill rate, the region/block decomposition (each block's position, orientation, and grid), any weight limit applied, an `image_url` link to the rendered 3D loading plan, and - when include_image is true - the inline image too.
  - after: Calculate how many identical boxes fit in a rectangular space, and where. The space is a shipping container, a pallet area, leftover container space, or a larger box. Give the box's L/W/H and EITHER a `container` preset OR the space's L/W/H (all in millimetres - container presets are mm). Boxes mix orientations across regions to pack densely; the plain maximum-load answer uses the exact SmartPacker T solver. Args: box_length: Box length. box_width: Box width. box_height: Box height. container: Container preset instead of explicit space dims (fills the internal usable L/W/H in mm; overrides space_* when recognised). ISO dry: 20GP 20HQ 40GP 40HQ 45GP 45HQ; NA domestic: 53HC 48HC; reefers: 20RF 40RF 40RH; EU pallet-wide: 40HQ-PW 45HQ-PW. Many aliases (20/40/45, 20ft, 40HC, 40', 40 reefer, ...). space_length: Space length (front-back). Use this OR `container`. space_width: Space width (left-right). space_height: Space height (up). count: How many boxes to load. 0 (default) loads the maximum. to_front: Anchor a partial load to the front (else the back). to_left: Anchor a partial load to the left (else the right). to_bottom: Kept for compatibility, no effect: boxes always rest on the floor. box_weight: Weight of one box (optional; same unit as max_weight). max_weight: Max total load weight (optional; 0 = no weight limit). include_image: Set true ONLY when the user wants to SEE or visualize the loading plan / 3D layout (e.g. "show the loading plan", "visualize it", "what does it look like?"). Default false is faster and lighter and still returns `image_url`, a shareable link to the 3D render. When true, the image is ALSO embedded inline (Claude Desktop and Cherry Studio display it; the claude.ai web app shows only the link either way). Returns the maximum that fits, how many were loaded, the fill rate, the region/block decomposition (each block's position, orientation, and grid), any weight limit applied, an `image_url` link to the rendered 3D loading plan, and - when include_image is true - the inline image too.

Full history: https://api.protogrid.dev/v1/servers/net.zhihuo.mcp%2Fcontainer-loading/changes

## Remotes

- https://mcp.zhihuo.net/mcp (streamable-http, auth none, reachable true, uptime30d 1)

## Packages

_none_

## Tools (2)

- `pack_boxes`: Calculate how many identical boxes fit in a rectangular space, and where.

        The space is a shipping container, a pallet area, leftover container space,
        or a larger box. Give the box's L/W/H and EITHER a `container` preset OR the
        space's L/W/H (all in millimetres - container presets are mm). Boxes mix
        orientations across regions to pack densely; the plain maximum-load answer
        uses the exact T1 solver.

        Args:
            box_length: Box length.
            box_width: Box width.
            box_height: Box height.
            container: Container preset instead of explicit space dims (fills the
                internal usable L/W/H in mm; overrides space_* when recognised).
                ISO dry: 20GP 20HQ 40GP 40HQ 45GP 45HQ; NA domestic: 53HC 48HC;
                reefers: 20RF 40RF 40RH; EU pallet-wide: 40HQ-PW 45HQ-PW. Many
                aliases (20/40/45, 20ft, 40HC, 40', 40 reefer, ...).
            space_length: Space length (front-back). Use this OR `container`.
            space_width: Space width (left-right).
            space_height: Space height (up).
            count: How many boxes to load. 0 (default) loads the maximum.
            to_front: Anchor a partial load to the front (else the back).
            to_left: Anchor a partial load to the left (else the right).
            to_bottom: Kept for compatibility, no effect: boxes always rest on
                the floor.
            box_weight: Weight of one box (optional; same unit as max_weight).
            max_weight: Max total load weight (optional; 0 = no weight limit).
            include_image: Set true ONLY when the user wants to SEE or visualize
                the loading plan / 3D layout (e.g. "show the loading plan",
                "visualize it", "what does it look like?"). Default false is
                faster and lighter and still returns `image_url`, a shareable
                link to the 3D render. When true, the image is ALSO embedded
                inline (Claude Desktop and Cherry Studio display it; the
                claude.ai web app shows only the link either way).

        Returns the maximum that fits, how many were loaded, the fill rate, the
        region/block decomposition (each block's position, orientation, and
        grid), any weight limit applied, an `image_url` link to the rendered 3D
        loading plan, and - when include_image is true - the inline image too.
        
- `send_feedback`: Send a question, suggestion, or bug report about this container-loading tool to the Zhihuo maintainers.

        Use this when the user wants to ask the tool's authors a question,
        suggest an improvement (e.g. another container type or output field),
        or report a result that looks wrong. The note reaches the Zhihuo team.

        Args:
            message: The question, suggestion, or bug report, in plain text.
            contact: Optional email or handle if the user would like a reply.
            category: Optional tag - "question", "suggestion", "bug", or "other".

        Returns a short confirmation string.
        
