ClaudeとTerminal49を連携する方法 — 海上コンテナの位置とLFDを会話で引く
Terminal49のMCPサーバーをClaudeとClaude Codeにつなぐ手順です。OAuthとAPIキーの違い、書き込み系ツールの止め方、有料機能の線引き、ディレクトリ掲載とdocsの食い違いも載せます。
Claude Terminal49連携とは何か
Claude Terminal49連携は、海上コンテナの追跡サービスTerminal49のMCPサーバーをClaudeにつなぐ仕組みです。コンテナ番号やB/L(船荷証券)番号から、現在の状態、航路、輸送イベント、無料保管期限(LFD、Last Free Day)を自然文で尋ねられます。追跡画面を開いて一件ずつ番号を貼る作業を、会話に置き換えられます。
Connectorsディレクトリの掲載名は「Terminal49」で、提供元はTerminal49, Inc.です。「Anthropic verified」の表示があり、追加時期は2026年8月、サインインは必須です。カテゴリはCommerce & shopping、Data & analytics、Otherの3つが付いています。
主な読み手は、輸入側の物流担当、フォワーダー、通関業者、ドレージ(港から倉庫までのトラック輸送)の手配担当です。たとえば次のように頼めます。
- このコンテナは今どこにあり、いつ港で引き取れるか
- 今週LFDを迎える追跡中コンテナを、ターミナル別に数えてほしい
- 遅延しているコンテナの経路と、遅れの出た区間はどこか
Connector全般の考え方はClaudeのコネクタ解説にまとめています。同じく「読み取り中心で、書き込みだけ別扱い」という線引きが要点になる例は、Claude Crossbeam連携にもあります。
接続前に必要なものと、認証の2方式
必要なのはTerminal49のアカウントです。サーバーはOAuth 2.1に対応していて、クライアントがブラウザーのサインイン画面を開き、Terminal49の認証情報でログインして許可すれば完了します。APIキーは要りません。
接続の前提
コネクタURL
mcp.terminal49.com
https://mcp.terminal49.com
推奨の認証
OAuth 2.1
PKCEと動的クライアント登録
代替の認証
APIキー
OAuth非対応のクライアント向け
OAuthに対応しないクライアントでは、開発者ポータルで作ったAPIキーをAuthorization: Token YOUR_API_KEYの形で渡します。ここで注意したいのは、スキームの名前です。APIキーはToken、OAuthのアクセストークンはBearerと使い分けられていて、キーをBearerで渡す書き方は誤りになります。
もう1つ、APIキーで繋ぐと使えなくなる機能があります。カスタムフィールド(PO番号や案件担当者など、アカウントで定義した項目)の読み出しは、サインインしたユーザーの資格情報が前提です。get_containerのcustom_fieldsも、list_custom_field_definitionsも、APIキーでは値が返りません。社内の独自項目で絞り込みたい運用は、OAuthで繋ぐ前提で考えます。
Claude.aiでの追加手順
ClaudeアプリではConnectorsディレクトリのTerminal49から追加します。リモートMCPサーバーを繋げるプランが前提です。
Claude.aiでTerminal49を追加する流れ
- 1
ディレクトリの掲載ページを開く
ClaudeのConnectorsディレクトリでTerminal49を開き、「Add to Claude」を選びます。
- 2
Terminal49にサインインする
Terminal49のサインイン画面が開きます。使いたいアカウントでログインし、アクセスを許可します。
- 3
チャットでコネクタを有効にする
新しいチャットでツールのメニューを開き、Terminal49がオンになっているか確かめます。
- 4
接続を試す
「Terminal49でコンテナCAIU1234567を検索し、状態を要約して」のように尋ねます。
組織の方針でディレクトリ経由の追加ができない場合は、カスタムコネクタで繋ぎます。「Settings → Connectors → Add custom connector」を開き、名前にTerminal49、URLにhttps://mcp.terminal49.comを入れます。詳細設定のOAuth欄は空のままにします。Claude側が自動で登録するためです。カスタムコネクタ全般の作り方は、Coworkのカスタムコネクタ自作ガイドが参考になります。
接続できたかは、「Terminal49のMCPサーバーで使えるツールと用途を一覧にして」と頼めば確かめられます。search_container、track_container、get_containerなどが挙がれば成功です。試す番号は、提供元が開発用のテスト番号を用意しています。
Claude Codeでの追加手順
Claude Codeでは、ターミナルから1コマンドで追加します。
claude mcp add --transport http terminal49 https://mcp.terminal49.com追加しただけでは未認証です。Claude Codeのセッション内で/mcpを実行し、terminal49を選んで「Authenticate」を押すとブラウザーが開きます。ログインして許可すると、接続済みの表示に変わります。claude mcp addの構文やスコープの違いは、Claude Code MCP設定ガイドで扱っています。
MCPサーバーを直接足す代わりに、Terminal49のプラグインを入れる方法もあります。プラグインは同じMCP接続を設定したうえで、container-trackingというスキルを加えます。このスキルは、Terminal49のツールをどう選び、どの順で呼ぶかをClaude Codeに教えるものです。インストールのコマンドは提供元のAgent pluginsの案内にあります。
何を頼めるか:ツールを目的別に見る
ツールは多いので、目的から逆引きすると選びやすくなります。
| やりたいこと | 主なツール | 補足 |
|---|---|---|
| 番号から探す | 主なツールsearch_container | 補足コンテナ・B/L・ブッキング・自社参照番号で検索 |
| 現況を見る | 主なツールget_container | 補足UUIDを渡す。引取可否、LFD、保留(ホールド)を含む |
| 経路と遅れを見る | 主なツールget_container_route、get_container_transport_events | 補足経路は有料機能 |
| 一覧と集計 | 主なツールlist_containers、summarize_containers | 補足1ページ最大25件。集計は項目別 |
| 追跡を始める | 主なツールtrack_container | 補足書き込みを伴う |
| 対応する船社を調べる | 主なツールget_supported_shipping_lines | 補足SCACコードを返す |
| 用語やルールを調べる | 主なツールsearch_docs | 補足口座のデータは読まない |
search_containerの結果にはコンテナのIDが入っていて、get_containerはそのUUIDを受け取ります。つまり「状態を教えて」と頼むと、Claudeは検索してから詳細取得へ進む2段で動きます。検索結果に出るコンテナのstatusはunknownで、現在の状態は詳細取得で初めて得られる仕様です。「検索したのに状態が不明」と見えるのは不具合ではありません。
検索の結果には、失敗した追跡リクエストも混ざります。failed_reasonがnot_foundかinvalid_numberなら、船社に番号が拒否されたという意味なので、番号と船社を見直してから再度追跡します。retries_exhaustedとexpiredは、同じ条件でもあとから成功することがあります。duplicateは、同じ荷物の追跡がすでにあることを示します。
定型の依頼として、提供元は3つのプロンプトも用意しています。track-shipment(現況確認)、check-demurrage(超過料金のリスク分析)、analyze-delays(遅延の原因分析)です。Claude Codeでは、MCPのプロンプトが/servername:promptnameの形でスラッシュコマンドに並びます。
掲載ページとdocsの食い違い
Claudeのディレクトリ掲載と、提供元のdocsを並べると、読み違えやすい点が2つあります。
1つ目はツールの数です。掲載ページに並ぶのは13個です。get_container、get_container_route、get_container_transport_events、get_shipment_details、get_supported_shipping_lines、list_containers、list_shipments、list_tracking_requests、search_container、track_container、list_parties、summarize_containers、search_docsが挙がっています。一方、提供元docsのツール一覧は、見出しを数えると業務用に23個、米国の輸入統計を扱うトレードインテリジェンス用に7個あります。差分にはset_party_roleとset_custom_field、書類の読み出し、whoamiなどが含まれます。見えるツールは、後述のヘッダーやトレード機能の有効化で変わります。ツールの一覧を尋ねる、またはwhoamiを呼ぶのが確実です。
2つ目はURLの末尾です。掲載ページのコネクタURLはhttps://mcp.terminal49.com/と末尾にスラッシュが付いています。提供元docsは、カスタムコネクタやClaude Codeの設定で「パスを付けずhttps://mcp.terminal49.comにする」と書いています。ディレクトリから追加する限り意識する必要はありません。手で入れる場面では、docsの表記に合わせるのが安全です。
落とし穴
URLの末尾やパスを足すと、接続の失敗として現れる
提供元のトラブルシューティングは、claude mcp addが失敗するときの確認点として「URLがちょうどhttps://mcp.terminal49.comで、パスがなく、トランスポートがhttpであること」を挙げています。コネクタURLはMCPクライアントが呼ぶ口で、通常のページとしては開けません。
書き込みを伴う操作を止める
このサーバーのツールは、読み取り専用が大半です。例外は3つで、track_containerは追跡リクエストを新規に作り、set_party_roleは荷物に関わる会社(顧客、通関業者、ドレージ業者など)の割り当てを変え、set_custom_fieldはカスタムフィールドの値を書き換えます。後ろの2つは、関係者を外したり値を上書きしたりできるため、MCPクライアントには破壊的な操作として示されます。
track_containerは、すでに追跡中の番号なら新しいリクエストを作らず、既存のものを返します。返り値のtracking_request_createdがfalseなら新規作成はありませんでした。コンテナ番号はISO 6346のチェックディジットで事前に検証されます。船社が推測できない番号ではscacの指定が必要です。MSKUのような番号の頭4文字は機器の所有者を表すだけで、船社のコードではないため、ツール側もSCACには流用しません。
提供元の側で絞る
サーバーへのリクエストヘッダーで、見えるツールを減らせます。
X-T49-MCP-Read-Only: true:読み取り専用のツールだけを出す。track_container、set_party_role、set_custom_fieldが消えるX-T49-MCP-Toolsets:ツールセットをカンマ区切りで指定する。core、documents、operations、tradeなどがある
ヘッダーはツールを減らす方向にしか働きません。許可していないツールが増えることはありません。値の綴りを誤ると400 Bad Requestが返ります。提供元docsの例はAPIキーで繋ぐ構成です。Claude Codeなら次のように書けます。
claude mcp add --transport http terminal49 \
https://mcp.terminal49.com \
--header "Authorization: Token YOUR_API_KEY" \
--header "X-T49-MCP-Read-Only: true"代償は、先に述べたカスタムフィールドが使えなくなることです。OAuthで繋いでカスタムフィールドを読みたい場合は、次のClaude Code側の制限を使います。
Claude Codeの権限ルールで止める
Claude Codeの権限では、MCPのツールをmcp__<サーバー名>__<ツール名>の形で指定できます。denyに入れたツールは、Claudeのコンテキストから外れます。上のコマンドのサーバー名terminal49なら、次の設定で書き込み系の3つを止められます。
{
"permissions": {
"deny": [
"mcp__terminal49__track_container",
"mcp__terminal49__set_party_role",
"mcp__terminal49__set_custom_field"
]
}
}どちらの止め方でも、使い方の癖はCLAUDE.mdに書いておくと安定します。次の断片は、提供元docsの仕様に沿って組んだ一例です。
## Terminal49(コンテナ追跡)
- 状況確認は search_container で ID を取り、get_container で詳細を見る
- track_container は追跡リクエストを作る。ユーザーが番号を示したときだけ呼ぶ
- LFD は pickup_lfd_local(現地時間)を使う。UTC の値を日付として読み上げない有料機能と口座の設定で変わるところ
無料枠や試用で試すと、期待したツールが答えを返さないことがあります。理由はおおむね3つに分かれます。
- 経路(
get_container_route):有料機能です。Routing Dataの権限がない口座ではFeatureNotEnabledが返ります。過去の動きはget_container_transport_eventsで代替できます。get_locationのETA予測も同じ権限を前提とし、なければetaがnullになり理由が付きます - トレードインテリジェンス:口座ごとに有効化する機能です。米国の海上輸入のB/Lデータ(2022年1月以降、毎日更新)から、輸入者や品目、航路別の量を引けます。有効でない口座では、各ツールが「有効ではない」と返します。有効化はTerminal49のサポートへの連絡が必要です
- 追跡枠:無料プランと試用プランには追跡できる件数の上限があり、
whoamiで上限、使用済み、残りを確かめられます
whoamiは、どの資格情報で入っているか、どの口座か、ゲートのかかった機能が使えるかを返します。ルーティングやカスタムフィールドを前提にした依頼を投げる前に、一度呼んでおくと無駄な往復が減ります。
MCPにはまだ出ていない操作もあります。追跡の停止と再開、船社からの生イベントの取得、強制更新、Webhookは、REST APIやSDKでの利用になります。会話の中から「追跡を止めて」と頼んでも、MCP経由では実行できません。
LFDの危ないコンテナを毎朝洗い出す
使い方の例として、LFDの前に動くべきコンテナを拾う流れを考えます。Terminal49側の仕様だけで組めます。
list_containersにpickup_lfdの期間とactively_trackedを渡し、LFDが近い追跡中コンテナを取るsummarize_containersでgroup_byにpod_terminalを指定し、ターミナルごとの件数を見る- 気になるコンテナは
get_containerの詳細で、LFDと保留の有無を確かめる
list_containersの既定は追跡中のものだけで、1ページ25件が上限です。件数が多い日は、ページを送って全体を見る必要があります。summarize_containersの結果は200グループで切れ、切れた場合はtruncatedがtrueになります。「何件か」を聞く質問には集計を、「どれか」を聞く質問には一覧を使い分けるのが、提供元の想定です。
LFDの日付には落とし穴があります。詳細にはpickup_lfd(UTC)とpickup_lfd_local(現地時間)の両方が入っています。UTCの値をそのまま日付として読み上げると、時刻によっては現地の日付とずれます。Claudeに現地時間を使わせたいときは、先のCLAUDE.mdの断片のように明示しておきます。
同じ依頼を毎朝繰り返すなら、Claude Codeに定型の依頼として任せる手もあります。401が出たときの再接続は、/mcp reconnect allの解説にあります。
つまずきの切り分け
| 症状 | 確認すること |
|---|---|
| コネクタを追加できない | 確認することディレクトリの掲載から再度追加する。カスタムなら、URLが末尾なしのhttps://mcp.terminal49.comか確かめる |
| サインイン画面が出ない | 確認することポップアップがブロックされていないか。Claude Codeはデフォルトのブラウザーがあるか |
接続後に401 Unauthorized | 確認することClaudeはコネクタをいったん切って再接続。Claude Codeは/mcpでterminal49を選び再認証 |
| チャットでTerminal49が選べない | 確認することチャットのツールメニューで有効にする。TeamやEnterpriseでは、組織のオーナーが組織向けに有効にする |
| 経路の取得が空 | 確認すること経路データがまだ無い場合はNoRouteData、権限がなければFeatureNotEnabled |
呼び出しの回数制限はREST APIと同じです。同じ回数制限が掛かるので、大量の番号を一気に調べさせる使い方には余裕を見ます。一覧と集計のツールを先に使い、必要なコンテナだけ詳細を見る順にすると、呼び出し回数を抑えられます。