Container tracking
Skill Terminal49/agent-plugins/plugins/terminal49/skills/container-tracking
Find, track, and investigate ocean container shipments with Terminal49 MCP tools, written for logistics operators. Use when a user provides a container number, bill of lading, booking, or reference number, or asks about container status, location, pickup readiness, terminal holds, last free day, ETAs or ETA changes, dwell time, rail moves, inland destinations, transport events, routes, delays, tracking requests, carrier support, or demurrage and detention risk.From its SKILL.md
npx -y skills add Terminal49/agent-plugins --skill container-trackingAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
2 things to look at
- 25 days oldThe repository was created 25 days ago. New is not bad, but a brand new repository carrying a familiar-sounding name is the shape a typosquat arrives in, and there has been no time for anyone else to find a problem with it.
- 0 stars0 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
SKILL.md
9.5 KB, ~2.0k tokens by cl100k_base, as published. Nobody here has run it
Container tracking (Terminal49 MCP)
Use the Terminal49 MCP server for container and shipment questions. The user is usually a logistics operator, not a developer: answer in plain operational language, lead with what they should do or know, and prefer the smallest tool sequence that answers the question. Preserve the difference between observed data and inference.
A bare identifier with no question ("CAIU1234567", "where is MSCU…") means: find it and report current status, location, and anything that needs attention.
Before using tools
- Confirm that Terminal49 MCP tools are available.
- If the client requests authentication, let it start the OAuth browser flow.
- Never ask the user to paste an API key, access token, password, or one-time code into chat.
- If the tools remain unavailable, say that the Terminal49 connection must be enabled and authenticated. Do not invent shipment data.
Identifier rules
Users normally provide a container number, bill of lading, booking number, or reference number. Detail tools require a Terminal49 UUID.
- Use
search_containerto resolve a user-facing identifier to a container or shipment UUID. - Normalize obvious whitespace and casing, but preserve the identifier in the response.
- If search returns several plausible matches, show the distinguishing fields and ask the user to choose. Do not select silently.
- If search returns no match, do not immediately create a tracking request. Explain that the identifier is not currently visible and offer to start tracking it.
Search before creating
track_container can create a tracking request. Treat it as a write operation.
- Call
search_containerfirst unless the user explicitly asks to add or start tracking a new identifier and has already confirmed it is not tracked. - Call
track_containeronly when the user intends to start tracking. - Prefer the
numberfield. SupplynumberTypeonly when the type is known, andscaconly when known or confirmed. - If the carrier is uncertain, use
get_supported_shipping_linesto resolve a name or SCAC rather than guessing. - Report whether a tracking request was created and whether results may still be pending.
Choose the right tool
| User intent | Tool sequence |
|---|---|
| Find a container, BL, booking, or reference | search_container |
| Start tracking a new identifier | search_container, then track_container after intent is clear |
| Current status or basic container details | search_container, then get_container with shipment |
| Pickup readiness, terminal availability, holds, or LFD | search_container, then get_container with shipment and pod_terminal |
| What happened, where it moved, or delay analysis | search_container, then get_container_transport_events |
| Full shipment and its containers | search_container, then get_shipment_details |
| Multi-leg route, rail leg, transshipment, or itinerary | search_container, then get_container_route |
| Containers or shipments matching operational filters | list_containers or list_shipments |
| Tracking-request status or audit | list_tracking_requests |
| Supported carrier or SCAC lookup | get_supported_shipping_lines |
Use the terminal49://docs/mcp-query-guidance resource when available for the
server's current intent-to-tool playbooks. Use
terminal49://docs/milestone-glossary when event terminology needs explanation.
What matters at each state
Which attributes are worth reporting depends on where the container is in its lifecycle. Lead with the fields for the current state; skip fields that are not yet meaningful.
| State | Lead with |
|---|---|
| Booked, before departure | ETD, POL, vessel and voyage, whether carrier data has started flowing |
| On the water | POD ETA and any change to it, current vessel, transshipment ports |
| Arrived at POD, not yet discharged | Actual arrival vs the last ETA, discharge status, holds already visible |
| Discharged at the POD terminal | Availability, holds, last free day, days since discharge, terminal name |
| Moving inland by rail | Rail departure and arrival events, destination ramp and its ETA, that pickup happens inland |
| Available for pickup | Pickup location, LFD and remaining free days, confirmation that holds are cleared |
| Picked up (full out) | Delivery status, empty-return deadline, whether the empty has been returned |
Risk signals to surface
Check for these whenever the data is already in hand, and lead the answer with any that apply — even if the user only asked "where is it":
- ETA change — the current ETA differs from earlier estimates in the transport events. Report old vs new and the cumulative drift.
- Long dwell — discharged 3 or more days ago and not picked up. State the day count; treat it as urgent when the LFD is past or unknown.
- LFD pressure — last free day is today, tomorrow, or past. This outranks everything else in the summary.
- Active holds — customs, freight, or terminal holds block pickup even when the container shows as available. Name each hold type.
- Rolled or transshipped — events show discharge and reload at an intermediate port, or the vessel changed mid-route.
- Detention risk — picked up but the empty has not been returned and the return deadline is near or past.
Label anything inferred (for example, dwell computed from a discharge date) as computed, and never present a risk as a confirmed charge.
Where pickup happens
Do not assume pickup is at the port of discharge. Check the shipment destination and route:
- If the shipment has an inland destination or the route/events show a rail leg, pickup happens at the inland ramp or destination terminal — report that location and the rail arrival ETA, not the POD availability.
- If the container terminates at the POD, use
pod_terminaldata for availability, holds, and LFD. - When it is unclear which applies, say so and check
get_container_routeor the transport events for rail milestones before answering.
Efficient detail loading
For get_container, request only the related data needed:
shipmentfor routing, bill of lading, carrier, and reference contextpod_terminalfor pickup availability, terminal state, holds, and demurrage questionstransport_eventsonly when the full event history is needed; preferget_container_transport_eventswhen the question is purely about the timeline
Do not call every detail tool by default. Follow up only when the first result leaves a material question unanswered.
Fleet queries
- Use
list_containersfor container-level operational views andlist_shipmentsfor shipment-level views. - Apply filters supplied by the user:
status, PODportLOCODE, carrier SCAC, andupdated_afterin ISO 8601 form. - Use pagination instead of silently assuming the first page is complete.
- State the filters and time boundary used in the answer.
- For "what needs attention" requests, rank results by the risk signals above: LFD pressure first, then holds, then dwell, then ETA changes.
Interpret and present results
- Lead with the operational answer: status, location, readiness, or risk — then supporting detail.
- Separate actual timestamps from estimated timestamps and label each clearly.
- Preserve source time zones. If converting a time, state the target time zone.
- Call out terminal holds, customs issues, and pickup blockers explicitly.
- Treat missing dates as unknown, not as evidence that an event did not occur.
- Treat
FeatureNotEnabledfromget_container_routeas an account capability boundary, not as missing route data. Use available shipment and event data as the alternative. - For multi-row results, use a compact table and honor any response-contract presentation guidance returned by the server.
- End with at most two useful next checks when important information is incomplete.
Common workflows
Status or pickup readiness
- Resolve the identifier with
search_container. - Call
get_containerwithshipmentandpod_terminal. - Determine the lifecycle state and where pickup happens (POD or inland).
- Summarize status, location, availability, holds, relevant dates, and any risk signals.
- If the state is unclear, call
get_container_transport_eventsfor context.
Delay investigation
- Resolve the identifier.
- Call
get_container_transport_events. - Order events chronologically and compare estimates with actuals.
- Identify the last confirmed movement and the first material divergence.
- Describe likely causes as hypotheses unless the data explicitly names one.
Demurrage-risk review
- Use
list_containerswith the narrowest known operational filters. - Fetch
get_containerwithpod_terminalfor the candidates that need detail. - Prioritize known pickup LFDs, active terminal holds, discharge state, availability, and dwell days since discharge.
- Do not calculate fees unless the required tariff and timing inputs are present. Label any risk assessment separately from an actual charge.
What ships with it
Read from the repository
Just SKILL.md. No reference files, no scripts.