Import Sourcing Advisor
Import Sourcing Advisor
ウクライナ向けのマクロレベルの輸入調達スクリーニングのためのドメイン特化型データエージェントです。 どの国から製品グループを調達すべきかを尋ねると、オープンな貿易データを通じてその質問を処理します。つまり、どの原産地が実際に供給しているか、その供給がどの程度集中しているか、各候補の陸揚げコスト、そして候補同士のランキングを提示します。
エージェントは2つのMCP接続によって拡張されています:
Server | 役割 | |
既存 | ウクライナ当局がウェブページとしてのみ公開している当年の貿易額を読み取り、エージェントが統計データの鮮度を把握できるようにする | |
カスタム |
| UN Comtrade、World Bank Indicators API、WITS TRAINS に対する5つのツール |
すべては機密情報を含まない公開データで動作し、カスタムサーバーはどのようなAPI認証情報も必要としません。
最初に表示されるもの
チャットボックスではなく、ワークリストです。追跡対象の輸入ラインが6件あり、それぞれ1行で、リスク帯と金額の順に並んでいます。主要サプライヤー、そのシェア、そのシェアの価値、背後にある実効的な原産地の数、そして一言のステータスが表示されます。行を開くと、その場で原産地の詳細が展開されます。エージェントの実行はそこから意図的に行うアクションです。
リストの上には集計の帯があります。現在のウィンドウでは、554m USDが輸入され、そのうち346mがラインごとに単一の原産地に集中しており(62%)、6ラインのうち3ラインでトルコが首位 — 露出額は183mです。最後の数字は、どの製品別レポートにも表示できないものです。つまり、一緒に失敗するラインを示しています。
リストは推論ではなく計算されています。web/portfolio.py は、エージェントが使用するのと同じカスタムサーバーへのMCP stdioセッションを1つ開き、モデルを介さずにツールを直接呼び出します。訪問者が最初に読み込む画面は、エージェントを待つ必要も、コストがかかることもありません。
通貨。 年間貿易系列は約2年遅れるため、リストは月次レポートから構築された直近12か月のローリングウィンドウで動作し、ソースが実際に公開した月で終了します — 現在は2024年10月から2025年9月で、最新の完全な年間年より約11か月先行しています。これは見た目だけの問題ではありません。2024年の年間データでは、生トマトは71.8%がトルコ産で単一ソースフラグが付きましたが、ウィンドウでは64.6%となり、フラグは付きません。
Related MCP server: supply-chain-mcp-server
前提条件
要件 | テスト済みバージョン | 理由 |
Python | 3.13.3 | カスタムMCPサーバー、エージェント、ウェブアプリ |
Node.js | 22 LTS | npmで配布されるPlaywright MCPのためだけに必要 |
Claude Code CLI または Anthropic APIキー | CLI 2.1.232 | エージェントはClaude Agent SDK上で動作 |
git | 2.49 | — |
3つのデータAPIのいずれにもキー、トークン、アカウントは不要です。
インストール
git clone <repository-url> logistics_mcp
cd logistics_mcp
python -m venv .venv
# Windows
.venv\Scripts\activate
# macOS / Linux
source .venv/bin/activate
pip install -r requirements.txtブラウザサーバーとChromiumビルドを一度インストールします(PATHにNode 18+が必要):
npm install
npx -y playwright install chromiumnpm install は @playwright/mcp を固定し、エージェントはそれを node node_modules/@playwright/mcp/cli.js として起動します。npx は使用しません。Windowsには npx という実行可能ファイルが存在せず、Nodeはシェルなしで npx.cmd を起動することを拒否するため、その名前でサーバーを起動すると静かに失敗しました — 実行は続行され、モデルはブラウザツールがないと報告しました。npm install がない場合、エージェントは npx -y @playwright/mcp@latest にフォールバックします。これはPOSIXシェルが解決できる環境で動作します。
設定
cp .env.example .env.env はgit無視されます。カスタムMCPサーバーにはその中の何も必要ありません。値はエージェントとデータ転送モードにのみ影響します。
変数 | デフォルト | 意味 |
| 未設定 | エージェントのモデル資格情報。未設定の場合、Claude Agent SDKはローカルのClaude Codeログイン( |
|
| 完全なソーシング実行のためのモデル。同じ実行でOpusと比較:両方合格、595秒対620秒、$0.398対$0.547、Sonnetは全再帰フォールバックチェーンをたどって使用可能な数値に到達しましたが、Opusは途中で停止しました |
|
| すでに計算された結果に関するフォローアップ質問のためのモデル:ブラウザなし、読み取り専用ツール3つ |
|
|
|
|
| ローカルレスポンスキャッシュ( |
各コンポーネントを個別に実行する
カスタムMCPサーバーは独立したプロセスであり、単独で起動されます。エージェントに依存するものは何もありません。
1. カスタムMCPサーバー
python -m mcp_server.serverstdioでMCPを提供し、起動時にトランスポートとデータモードをstderrに出力します。エージェントなしで公開される契約を検査するには:
python scripts/inspect_tools.py # summary of all five tool contracts
python scripts/inspect_tools.py --json # full input and output JSON schemasまたは公式インスペクタで操作します:
npx -y @modelcontextprotocol/inspector python -m mcp_server.server2. Playwright MCPサーバー
エージェントがこれを自ら起動します。検査のためだけに手動で実行します。
node node_modules/@playwright/mcp/cli.js --headless --isolated3. エージェントとウェブアプリケーション
python -m web.app # serves http://127.0.0.1:8000ウェブアプリは両方のMCP接続を子プロセスとして起動し、それぞれが公開したツールを表示します。
インストールの検証
python -m pytest tests -q # 47 unit tests, no network, ~2s
python scripts/smoke_tools.py # calls every tool end to end against the live APIs
REPLAY=1 python scripts/smoke_tools.py # the same run, offline, from fixtures
python scripts/run_e2e.py # the whole agent flow, both MCP servers, live
python scripts/run_failure_demo.py # the same flow with the browser server brokenrun_e2e.py はデモが依存するチェックです。両方のサーバーが接続され、5つすべてのカスタムツールが実際に呼び出されない限り、実行を失敗させます。カスタムサーバーが起動に失敗した場合でも、モデルがツールがないと報告するだけで、流暢な回答が生成されます。すべてのイベントは scripts/last_e2e_trace.jsonl に書き込まれるため、実行を信頼するのではなく後で検査できます。完全な実行は約10分、20ターン、約$0.55です。フォールバックの再帰URLでのナビゲーション失敗は、チェーン内の別のページが読み込まれた場合に許容されます — チェーンは順序付けられており、エージェントは最初に応答したページで停止します — しかし、何も読み込まれなかったチェーン、およびカスタムサーバーからのすべてのエラーは、実行を失敗させます。
run_failure_demo.py はもう半分です。ブラウザをフォールバックなしの解決不可能なホストに向け、ナビゲーションがエラーとして報告され、他にエラーがなく、失敗したチェックが名前付きで推奨事項がまだ出てくる場合にのみ合格します。要件は何も失敗しないことではなく、失敗が空の回答と区別できることです。
オフライン / リプレイモード
カスタムサーバーは3つのネットワークAPIを呼び出すため、実際のレスポンスは fixtures/ の下に記録され、ネットワークアクセスなしでリプレイできます:
# Offline
SOURCING_MODE=replay python -m mcp_server.server
# Re-record after changing a query
SOURCING_MODE=record python scripts/smoke_tools.py置換はトランスポート境界(mcp_server/sources/http.py)で行われます。リプレイはネットワークが返したのと同じ生のJSONを返し、その上のすべてのパーサー、重複排除ステップ、計算は変更されずに実行されます。準備された回答を返すコードパスはありません。
各フィクスチャは、正確なURL、取得タイムスタンプ、逐語的なレスポンスボディを記録したエンベロープです。
オフラインでカバーされるもの。 ポートフォリオ、ランディング画面に表示される各製品のランキング、およびエージェントフロー。1つの製品のランキングをライブとリプレイで実行し、すべてのフィールドを比較して検証済み:最後の小数まで同一です。このチェックは維持する価値があります — これが以下の関税バグを発見した方法であり、ランキングフィクスチャが記録される前は、オフラインスコアの崩壊もこれで発見されました。
カバーされないもの。 参照ウィンドウは1つだけ記録されています(2024年10月 – 2025年9月)。そのため、他の任意のトレーリングウィンドウのリクエストは、フォールバックではなくオフラインで失敗します。2つの製品には、どちらのモードでも価格設定できない候補があります — アーモンドのUSAとNLD、キウイフルーツのAZEは重量を報告しないため、導出する単位価値が存在しません。これらの行は画面上で不完全とマークされ、注意書きに名前が挙げられています。これはソースのギャップであり、記録のギャップではありません。
データソース
ソース | エンドポイント | 認証 | 提供内容 |
UN Comtrade (プレビュー) |
| なし | HSコード、パートナー、年ごとの報告された貿易:重量、価値、単位価値 |
World Bank Indicators |
| なし | ロジスティクスパフォーマンス指数とサブ指数、コンテナ港湾交通量 |
WITS TRAINS |
| なし | HS6による適用MFN輸入関税 |
Comtrade参照ファイル |
| なし | HS2022命名法、国コード — プレビューAPIはコードのみを返します |
国家税関サービス | ウェブページ、Playwright MCP経由 | なし | 当年の売上高、HTMLとしてのみ公開。自動クライアントには403を返すため、最初に試みられ、通常は失敗します |
ウクライナ国立銀行 | ウェブページ、Playwright MCP経由 | なし | 外部セクター統計指数 — 再帰チェックの到達可能なフォールバック |
検証済みのエンドポイントの動作、レート制限、癖は docs/01-data-sources-verified.md に文書化されています。
リポジトリ構成
mcp_server/ Custom MCP server (separate process)
server.py Five tool registrations, stdio entry point
models.py Pydantic input/output contracts
sources/ http (rate limit, cache, fixtures), comtrade, worldbank, wits, reference
domain/ costing and analysis calculations
agent/ Claude Agent SDK wiring, two model tiers, trace events
web/ FastAPI application, portfolio over MCP, single-page UI
app.py Endpoints: portfolio, commodity detail, agent run, chat
portfolio.py The tracked lines, queried over an MCP stdio session
index.html Portfolio screen, line detail, MCP trace, chat panel
data/reference/ Vendored HS2022 and country reference data
fixtures/ Recorded genuine API responses for replay mode
scripts/ inspect_tools, smoke_tools, run_e2e
tests/ Unit tests
docs/ Requirements digest, verified sources, contracts, rationale, demo scriptドキュメント
ドキュメント | 内容 |
課題の要件を簡潔にまとめたもの | |
ライブで検証したすべてのソース: エンドポイント、実際の値、制限、落とし穴 | |
各カスタムツールと使用するPlaywrightツールの完全な契約 | |
これらのサーバーを選んだ理由、各ツールがMCP境界に位置する理由、トレードオフ、制限 | |
防御スクリプト |
既知の制限事項
後段に埋もれさせるのではなく、最初に明記する:
運送費はモデル計算による値であり、引用値ではない。 運送料金を公開しているオープンソースは存在しない。モデル化されたすべての数値は、ツール出力では
estimatedとラベル付けされる。関税はMFN税率である。 WITSは特恵税率に対してHTTP 404を返すため、EU DCFTAなどの協定は適用可能性ありとしてフラグ付けされるが、適用はされない。
年次系列は約2年遅れている。 2026年8月時点で、ウクライナは2024年分を報告済みだが2025年分は未報告だった。月次系列は2025年9月まで到達しており、ワークリストはこちらを使用する。ランディングコスト計算ツールとランキングツールは依然として年次ベースで動作し、関税もまたさらに古い観測値から取得される——各結果は使用したベースを明示する。
ユニットバリューは価格ではない。 Comtradeのユニットバリューは、総価値を総重量で割ったものであり、相場ではない。
Logistics Performance Indexは年次系列ではない。 2022年が最新の観測値である。
税関のページは自動化されたクライアントをブロックする。
customs.gov.uaは、Akamaiエッジにおいて人間のブラウザ以外からのアクセスにはHTTP 403を返す一方、人間がアクセスすれば正常に開く。そのため、最新性の確認ステップはNational Bankの対外部門ページにフォールバックし、エージェントは実際に読んだページを明示する。これにより公開時期は確認できるが取引額は確認できないため、最新性チェックは偶然ではなく設計上部分的なものとなる。ポートフォリオは6品目で、シグナルを重視して選定されている。 リンゴ(HS 080810、$0.5M)と殻付きくるみ(HS 080231、ほぼゼロ)は除外された: ウクライナはこの両方を生産・輸出しているため、これらの輸入品目はノイズとなる。
これはスクリーニングツールである。 調査に値する国のリストを絞り込むものであり、入札を代替するものではない。
This server cannot be deployed
Maintenance
Related MCP Connectors
Public Data Ukraine Mcp connects AI agents to real public APIs via MCP. Tools include
Trade Intel MCP — Compound tools that chain Comtrade, Census, Treasury,
Agent-ready economic, market & geo-health intelligence — 318 MCP tools, 309 driver-backed indices.
100+ MCP tools for AI agents: content metadata, trade intelligence, business-expertise analysis.
Related MCP Servers
- AlicenseNot gradedqualityBmaintenanceProvides access to UN Comtrade international bilateral trade data via an MCP server, enabling AI agents to query trade statistics through natural language.32 npmMIT
- AlicenseAqualityDmaintenanceMCP server giving AI agents access to global supply chain and trade data from UN Comtrade, World Bank, and Open Supply Hub.5MIT
- AlicenseAqualityDmaintenanceEnables AI agents to search and analyze Ukraine's national open-data portal (data.gov.ua) using natural language, with tools for finding datasets, inspecting metadata, and retrieving actual data.6MIT
- FlicenseAqualityDmaintenanceMCP server that exposes tools for monitoring supply chain disruptions, including vessel positions, port weather, congestion, and news. Includes an AI agent that synthesizes these sources to assess route risks.5-