BerthTime

com.berthtimePublished by berthtime.comOfficial publisherv1.0.4Updated Nov 7, 2026

Track ocean containers and shipments: live ETAs, delays, carrier events and share links.

VerifiedStreamable HTTPWeb executableLocation & LifestyleBusiness & Commerce

Overview

AI-generated overview

BerthTime's remote MCP server lets an assistant look up ocean container shipments: positions, routes, ETAs, delays, carrier events and share links.

What you can do
  • Find and filter the company's shipments, shared shipments, arrivals in the next days and delayed ones
  • Read one shipment's route, ETA and latest events, or its full carrier event timeline
  • Check a reference number's type and carrier, list supported carriers, and start tracking a new container, bill of lading or booking
  • Change a shipment's booking, bill of lading or container numbers, or archive it
  • Read plan usage and billing, alert rules and support requests, and open a support request
  • Create or fetch a public read-only tracking link for a shipment
When to use it
Useful when someone works with ocean freight and wants to ask an assistant in plain language where a container is, what arrives this week, what is running late, or to start tracking a new reference.
Requirements
A remote streamable HTTP endpoint hosted by BerthTime; nothing to install. Needs a BerthTime account and either OAuth sign-in or a BerthTime API key sent as a bearer token. Write tools need read-and-write access granted at sign-in plus an owner or admin role, or a read-and-write API key.
Before you install
Write tools change data: they start tracking, edit identifiers, create public share links and archive shipments. Share links are open to anyone with the URL. Sign-in grants access to one or all of the user's companies, so pick the narrowest scope. Each tool call is recorded in the company's audit log. Rate limits apply.

Installation

In SourceWeft

  1. Open BerthTime in the dashboard and add it to a workspace.
  2. Enable the server for the chats that should use its tools.

Web executable via Streamable HTTP. Remote servers run from the web runtime once configured in a workspace.

Use with an agent

Paste this prompt into Claude Code, Codex, Cursor or another agent — or into SourceWeft chat. The agent reads this server's install guide, shows you its publisher, endpoint and sign-in, and adds it to your client once you agree. Keys never go into a command.

Read https://sourceweft.com/mcp/com.berthtime%2Fberthtime/install.md and connect the MCP server it describes to my client. Before changing any config, show me its publisher, endpoint and sign-in method and wait for my OK. Never put an API key in a command or in a file I would commit; ask me where it should come from.

Read the install guide the agent follows

Other MCP clients

Add this to your client's mcpServers config.

{
  "mcpServers": {
    "berthtime": {
      "type": "http",
      "url": "https://berthtime.com/api/v1/mcp"
    }
  }
}

README

BerthTime MCP server

Ask your AI assistant where your ocean containers are.

BerthTime tracks ocean containers across the major carriers. Its remote MCP server lets ChatGPT, Claude, Cursor, VS Code and any other MCP client read your shipments in plain language: where a container is, what arrives this week, what is running late, and the full carrier event history. You can also start tracking new containers.

This repository contains the public connection details, registry metadata and client setup examples. The server is hosted by BerthTime; there is nothing to install or run yourself.

Endpointhttps://berthtime.com/api/v1/mcp
TransportStreamable HTTP
AuthenticationOAuth 2.1 (sign in with your BerthTime account), or a BerthTime API key
MCP Registrycom.berthtime/berthtime
Setup guidehttps://berthtime.com/ai-assistant
RequirementsA BerthTime account (sign up)

What you can ask

  • "Where is container MSCU1234566 right now?"
  • "Which of my containers arrive this week?"
  • "Is anything delayed by more than two days?"
  • "Show me everything that happened to my Felixstowe shipment."
  • "Start tracking booking 123456789."

Tools

Read: list_companies, list_shipments, list_shared_shipments, get_shipment, get_shipment_events, list_arriving_shipments, list_delayed_shipments, detect_reference, list_carriers, get_usage, list_alert_rules, list_support_requests.

Write (needs read-and-write access, chosen at sign-in, and an owner or admin role in the company; or a read + write API key): track_shipment, update_shipment_identifiers (set the booking, bill of lading or container numbers on a shipment), get_share_link (creates a link if none exists; paid plans), create_share_link (paid plans), create_support_request, archive_shipment.

BerthTime updates shipments automatically in the background; there is no manual refresh.

Several tools were renamed on 6 November 2026; the old names (arriving_soon, delayed_shipments, list_notification_rules, list_tickets, create_ticket) still work.

Every tool declares MCP annotations (readOnlyHint, destructiveHint, idempotentHint, openWorldHint). If you belong to several companies, pass the optional company argument (id, @handle or exact name).

Connect

ChatGPT and Claude

Add a custom connector with the URL https://berthtime.com/api/v1/mcp and choose OAuth. Step-by-step instructions with screenshots: https://berthtime.com/ai-assistant

Claude Code

sh
claude mcp add --transport http berthtime https://berthtime.com/api/v1/mcp

Cursor

~/.cursor/mcp.json: see examples/cursor-mcp.json.

VS Code

.vscode/mcp.json: see examples/vscode-mcp.json.

With an API key instead of OAuth

Create an API key in BerthTime (Settings → API keys) and send it as a bearer token: see examples/api-key-header.json. An API key acts for a single company.

Security and privacy

  • When you sign in you pick one company, or all the companies you belong to, and whether the assistant may only read or may also make changes. Tokens are valid only on the MCP endpoint; access tokens last one hour and refresh tokens rotate.
  • Disconnect a signed-in app in Settings → AI assistants, or revoke an API key in Settings → API keys. Both take effect immediately.
  • The server only reads and changes your data in BerthTime. It does not store your conversations; each tool call (tool name and arguments) is recorded in your company's audit log.
  • Rate limits: 120 requests per minute and 600 per hour per API key or token, shared with the REST API.
  • Privacy policy · Terms of service

Support

[email protected], or the support page inside the BerthTime app.


BerthTime is operated by Majorbird Vietnam Company Limited. The examples in this repository are MIT-licensed; the BerthTime service itself is proprietary.

Source: README.md at commit 6d11dad

Tools

18

list_companies

Who am I / my companies

Who this connection acts as (user or API key) and every company it may act for, with read or read + write access in each (a.k.a. whoami). Call it first when the user belongs to several companies or a call says access is denied; then pass `company` (id, @handle or exact name) to the other tools. No arguments. Returns: acting_as {type, name, email or prefix, app}, connection (api_key or oauth), all_companies, default_company and companies[] {id, name, handle, plan, plan_name, role, access, default}.

Takes no parameters.

list_shipments

List shipments

List or search the company's own tracked shipments, newest first. Use it to find a shipment (free-text `q`: reference, customer reference, container number, vessel) or to filter by status (default active), carrier SCAC, phase, tag, ETA window (eta_after / eta_before, ISO 8601) or predicted eta_risk. For one shipment's full detail use get_shipment; for the next N days use list_arriving_shipments; for slipped ETAs use list_delayed_shipments; shipments other companies share with you are in list_shared_shipments. All arguments are optional. Returns: shipments[] {id, reference, ref_type, carrier, customer_reference, status, tracking_status, phase, pol, pod, eta, original_eta, delay_hours, predicted_eta, eta_risk, vessel, containers, booking_number, bl_number, tracked_via}, has_more, next_cursor. Paging: limit 1-100 (default 20); pass next_cursor as `cursor` for the next page.

Parametersqtaglimitphasecursorstatuscarriercompanyeta_risketa_aftereta_before

list_shared_shipments

Shipments shared with us

Shipments that other companies (network connections) share with this company, read only, and open tracking requests (filter=requests). They are not the company's own shipments, so list_shipments, get_shipment and the write tools do not see them. All arguments are optional: filter (all or requests), free-text `q`. Returns: shipments[] {id, reference, ref_type, carrier, carrier_name, customer_reference, owner (@handle), owner_name, status, tracking_status, phase, eta, delay_hours, pol, pod, vessel, kind, request_status, paid_by_you, shared_at}, has_more, next_cursor. Paging: limit 1-100 (default 20) and `cursor`.

Parametersqlimitcursorfiltercompany

get_shipment

Get shipment

Everything about one shipment: summary, route (POL, transshipments, POD with actual and estimated times), current position estimate, carrier ETA and predicted ETA, and the latest actual events. Use it for "where is X" questions; for the full event history use get_shipment_events. `shipment` (required) is the BerthTime id, the tracked reference, or a container number on the shipment. Optional `events` (0-50, default 5) = how many latest actual events to include. Returns: shipment {id, reference, ref_type, carrier, customer_reference, status, tracking_status, phase, pol, pod, eta, original_eta, delay_hours, predicted_eta, eta_risk, vessel, containers, booking_number, bl_number, tracked_via, last_position, container_remarks}, route {stops[] {role, name, un_locode, arrival, departure}, legs[], current_position} or null, latest_events[]. Unknown reference: an error that suggests list_shipments or track_shipment.

Parameterseventscompanyshipmentrequired

get_shipment_events

Shipment events

The full DCSA-style event timeline of one shipment (gate in, load, departure, arrival, discharge, ...), oldest first. Use it when the user wants the history; get_shipment already includes the last few actual events. `shipment` (required) is the BerthTime id, the tracked reference, or a container number on the shipment. Optional: classifier (ACT actual, EST estimated, PLN planned; default all), limit (most recent N, 1-500, default 50). Returns: shipment_id, reference, events[] {at, timezone, precision, classifier, code, type, description, location, un_locode, vessel, voyage, container}. Times are UTC.

Parameterslimitcompanyshipmentrequiredclassifier

list_arriving_shipments

Arriving soon

Active shipments not yet arrived whose carrier ETA falls within the next N days, soonest first. Use it for "what arrives this week"; for an exact date range or other filters use list_shipments with eta_after / eta_before. All arguments are optional: days (1-120, default 7), limit (1-200, default 50). Returns: days, shipments[] {id, reference, ref_type, carrier, customer_reference, status, tracking_status, phase, pol, pod, eta, original_eta, delay_hours, predicted_eta, eta_risk, vessel, containers, booking_number, bl_number, tracked_via}. No paging: raise limit or narrow days.

Parametersdayslimitcompany

list_delayed_shipments

Delayed shipments

Active shipments whose carrier ETA has slipped versus the first ETA BerthTime saw, by at least min_delay_hours, most delayed first. Use it for "what is late"; for shipments predicted to be late from the vessel position use list_shipments with eta_risk=likely_late. All arguments are optional: min_delay_hours (0-10000, default 24), limit (1-200, default 50). Returns: min_delay_hours, shipments[] {id, reference, ref_type, carrier, customer_reference, status, tracking_status, phase, pol, pod, eta, original_eta, delay_hours, predicted_eta, eta_risk, vessel, containers, booking_number, bl_number, tracked_via} (delay_hours = the slip). No paging.

Parameterslimitcompanymin_delay_hours

detect_reference

Detect reference

Check a number before tracking it: is it a container (ISO 6346 check digit), bill of lading or booking number, and which carrier issued it. Stores nothing and needs no company. Use it when the user is unsure what a number is; track_shipment detects on its own. Required: reference (3-64 characters, e.g. MSCU1234566). Returns: reference, ref_type, carrier_scac, carrier_name, confidence, check_digit_valid, note, suggested_carrier.

Parametersreferencerequired

list_carriers

List carriers

The carriers BerthTime knows: SCAC, name, which reference types each supports and whether tracking is live today. Use it to find the SCAC for track_shipment's `carrier` or to answer "do you support X". Optional: live_only (default false). Returns: carriers[] {scac, name, ref_types, tracking, ...}. No paging (the full list).

Parameterslive_only

get_usage

Plan and usage

The company's plan and billable shipments for one month: included allowance, used, overage, cost so far and trial end. A shipment counts once per month when the carrier returned data for it. Use it for plan, quota or billing questions. Optional: month (YYYY-MM, UTC; default this month), include_shipments (default false) to list the counted shipments. Returns: month, plan, plan_name, included (null = unlimited), used, overage, projected_cost, currency, trial_ends_at, trial_active, and with include_shipments: shipments[] {shipment_id, reference, ref_type, first_counted_at, merged}.

Parametersmonthcompanyinclude_shipments

list_alert_rules

Email alert rules

The company's email alert rules (delay over N days, arrived, delivered, tracking failed), their scope (all shipments, a tag or a carrier) and how many people get them. Read only: rules are created and changed in the web app (Settings > Notifications). Optional: include_inactive (default false) to add paused rules. Returns: rules[] {id, name, summary, rule_type, delay_days, delay_mode, failure_count, scope, scope_value, is_active, recipients {all_members, members, extra_emails}}.

Parameterscompanyinclude_inactive

list_support_requests

Support requests

The company's support requests to the BerthTime team, most recent activity first. Use it to check the status of a request; to open one use create_support_request. Internal staff notes are never included. Optional: status (active = open + pending, the default; open, pending, resolved, closed or all), limit (1-100, default 20). Returns: tickets[] {id, number (BT-1234), subject, topic, status, priority, last_message_at, last_message_by, message_count, preview}, counts by status.

Parameterslimitstatuscompany

track_shipment

Track shipment

Start tracking a container, bill of lading or booking number. Type and carrier are detected when omitted; if the carrier is not recognised the shipment is added but not tracked, and you should call again with `carrier` (SCAC, see list_carriers). Already tracked references are returned as they are (archived ones are re-activated), so repeating a call is safe. Required: reference (4-64 characters, e.g. MSCU1234566). Optional: ref_type (container, bl, booking), carrier, customer_reference, tags, booking_number and bl_number (the other numbers of the same shipment, e.g. a container with its booking: one shipment, not three). Returns: result (created or exists), shipment {id, reference, ref_type, carrier, customer_reference, status, tracking_status, phase, pol, pod, eta, original_eta, delay_hours, predicted_eta, eta_risk, vessel, containers, booking_number, bl_number, tracked_via}. The first carrier data arrives in the background: check get_shipment a minute later. Counts towards the plan's monthly allowance once the carrier returns data. Needs write access: a read + write API key, or read + write access granted at sign-in by an owner or admin of the company.

Parameterstagscarriercompanyref_typebl_numberreferencerequiredbooking_numbercustomer_reference

update_shipment_identifiers

Set booking / B/L / containers

Set, change or remove the booking and bill of lading numbers of a tracked shipment, or add container numbers to it. Use it when the user gives another number of a shipment already tracked (e.g. the booking of a container); track_shipment would start a new shipment instead. The tracker asks these numbers when the reference fails, and first when the carrier's booking query gives more than its container query (e.g. COSCO). `shipment` (required) is the BerthTime id, the tracked reference, or a container number on the shipment. Optional: booking_number, bl_number (an empty string removes it; omitted = unchanged), containers (ISO 6346, up to 20). At least one of them is required. Returns: shipment {id, reference, ref_type, carrier, customer_reference, status, tracking_status, phase, pol, pod, eta, original_eta, delay_hours, predicted_eta, eta_risk, vessel, containers, booking_number, bl_number, tracked_via}, retracking (true = a re-track was queued). A container number given as booking or B/L, or a malformed number, is an error. Needs write access: a read + write API key, or read + write access granted at sign-in by an owner or admin of the company.

Parameterscompanyshipmentrequiredbl_numbercontainersbooking_number

create_support_request

Contact BerthTime support

Open a support request with the BerthTime team on behalf of the user. Only when the user asks to contact support or report a problem; to see existing requests use list_support_requests. Required: subject (3-200 characters), message (plain text). Optional: topic (support, sales, billing, partnership, other; default support), priority (normal or high, high only when the user says it is urgent). Returns: id, number (BT-1234), status, requester_email. The team answers by email and in the web app. Each call opens a new request, so do not repeat it. Needs write access: a read + write API key, or read + write access granted at sign-in by an owner or admin of the company.

Parameterstopiccompanymessagerequiredsubjectrequiredpriority

archive_shipment

Archive shipment

Stop tracking a shipment. Its history is kept and track_shipment with the same reference re-activates it. Only when the user asks to stop or remove a shipment. `shipment` (required) is the BerthTime id, the tracked reference, or a container number on the shipment. Returns: shipment_id, status (archived). Archiving an archived shipment changes nothing. Needs write access: a read + write API key, or read + write access granted at sign-in by an owner or admin of the company.

Parameterscompanyshipmentrequired

Version history

2
  1. v1.0.4LatestNov 7, 2026
  2. v1.0.3Nov 6, 2026

Score

100% of the applicable checks met

How complete this listing is, computed from the registry entry, the endpoint and public sources. Not a rating of the server and not a statement that it is safe or working today: reachability is a dated check, and no installs or reviews go into the score.

  • Reached in the last 30 daysRequired25 pts
  • Auth declaredRequired10 pts
  • Tools listedRequired15 pts
  • DescriptionRequired15 pts
  • Logo10 pts
  • Documentation15 pts
  • License10 pts