un-comtrade-mcp-server について
un-comtrade-mcp-serverは、貿易研究者、分析者、政策チームに、UN Comtradeの商品・サービス貿易統計をMCP経由で提供します。国や商品コードの検索に加え、二国間貿易、貿易収支、ランキング、データ公開状況を扱います。
主な機能
- 01国・地域コードの解決
- 02HS商品とサービス分類の検索
- 03商品・サービス貿易フローの取得
- 04貿易収支の計算とランキング
- 05報告国と期間ごとのデータ公開状況確認
活用シーン
- 01期間ごとの輸出入を比較する
- 02貿易額で相手国や商品を順位付けする
- 03貿易照会に使うコードを探す
- 04直近データの公開状況を確認する
MCP 対応
MCPクライアントにUN Comtradeの9つの検索・データツールと、国およびHS分類リソースを公開します。STDIOとStreamable HTTPに対応し、データツールは購読キーなしで公開プレビューエンドポイントを利用できます。
設定
リモートサーバーはインストール不要です。クライアントを選んで設定をコピーするか、ワンクリックで導入できます。
https://un-comtrade.caseyjhand.com/mcpclaude mcp add --transport http cyanheads-un-comtrade https://un-comtrade.caseyjhand.com/mcp{"mcpServers":{"cyanheads-un-comtrade":{"type":"http","url":"https://un-comtrade.caseyjhand.com/mcp"}}}Cursor で開く{"servers":{"cyanheads-un-comtrade":{"type":"http","url":"https://un-comtrade.caseyjhand.com/mcp"}}}VS Code で開く{"mcpServers":{"cyanheads-un-comtrade":{"type":"http","url":"https://un-comtrade.caseyjhand.com/mcp"}}}{"mcpServers":{"cyanheads-un-comtrade":{"serverUrl":"https://un-comtrade.caseyjhand.com/mcp"}}}コマンドはターミナルで実行し、JSON は各クライアントの MCP 設定に貼り付けて再起動します。認可が必要なサーバーは初回接続時にログインを求めます。
ツール
9| パラメーター | 型 | 必須 | 説明 |
|---|---|---|---|
| role | enum | いいえ | 役割で絞り込みます。「reporter」は reporterCode パラメーターで有効なコードのみ、「partner」はパートナー地域のみ(地域グループを含む)、「any」は役割にかかわらず一致するすべての項目を返します。reporter | partner | any |
| query | string | はい | 検索する国名または地域名の一部または正式名称、あるいは ISO alpha-2/alpha-3 コード。大文字と小文字は区別されません。例:「Germany」、「DEU」、「DE」、「united states」、「china」。 |
| include_groups | boolean | いいえ | 地域および経済グループ(例:EU、ASEAN)を含めるかどうか。false に設定すると、個々の国のみを返します。 |
詳細
@cyanheads/un-comtrade-mcp-server
国連Comtradeの国際的な財・サービス貿易統計にMCP経由でアクセスできます。国の検索、HS商品検索、二国間貿易フロー、貿易収支、ランキング、データの利用可能状況に対応しています。STDIOまたはStreamable HTTP。
公開ホスト型サーバー: https://un-comtrade.caseyjhand.com/mcp
概要
国連Comtradeの国際的な財・サービス貿易統計を提供します。国およびHS商品コードを特定し、二国間の貿易フローやサービス貿易を取得できるほか、貿易収支、相手国・商品別ランキング、データの利用可能状況を算出できます。
ツール
| ツール | 説明 |
|---|---|
comtrade_lookup_countries | 国名および地域名をComtrade M49数値コードに変換します。 |
comtrade_search_commodities | キーワード、説明、またはコードのプレフィックスでHS商品コードを検索します。 |
comtrade_list_service_categories | キーワードまたは親コードでEBOPS 2010サービス貿易カテゴリを一覧表示します。 |
comtrade_get_trade_flows | 二国間の貿易フロー記録を取得します。期間・商品・相手国ごとの金額、数量、重量を確認できます。 |
comtrade_get_trade_balance | 1つ以上の期間について、国の貿易収支(輸出から輸入を差し引いた値)を算出します。 |
comtrade_get_top_partners | 報告国、商品、フローの方向に基づき、貿易額で取引相手国をランキングします。 |
comtrade_get_top_commodities | 報告国とフローの方向に基づき、貿易額で商品カテゴリをランキングします。 |
comtrade_get_data_availability | データが公開されている報告国・期間・分類の組み合わせを確認します。 |
comtrade_get_services_trade | 国際サービス貿易データ(EBOPS 2010)を取得します。 |
リソース
| リソース | 説明 |
|---|---|
comtrade://countries | M49コード、ISO識別子、報告国としての有効性を含む、国・地域コードの完全な一覧です。 |
comtrade://hs-classification/{level} | 章、項、号の各レベルにおける、HS商品分類の最上位階層です。 |
どちらのリソースもツールから利用できます。comtrade_lookup_countries と comtrade_search_commodities では、同じデータをキーワード検索できます。
機能リファレンス
comtrade_lookup_countries ツール
- 国名の一部または正式名称、あるいはISO alpha-2/alpha-3コードを指定できます。
roleでは"reporter"、"partner"、"any"(デフォルト)で絞り込めます - 各一致結果の
validAsReporterフラグは、報告国として有効かどうかを示します(例:WorldやEUなどの地域グループは、パートナーとしては有効ですが、報告国としては無効です) include_groups(デフォルトはtrue)で、結果に地域・経済グループを含めるかどうかを切り替えられます- 参照データは起動時にUNの静的ファイルから読み込まれるため、サブスクリプションキーは不要で、即座に応答します
comtrade_search_commodities ツール
- フリーテキストのキーワード、説明の一部、またはコードの接頭辞で検索できます。
classificationではHS(統合データセット、デフォルト)または特定の版H0~H6を選択します aggr_levelでは2(章)、4(項)、6(号)に絞り込めます。すべてのレベルを対象にする場合は省略しますlimitのデフォルトは50です。200を超える値を指定すると、一致するすべての結果が返されます。上限より少ない値に一致結果が収まらない場合は、truncated: trueが返されます- 各結果の
recommendedQueryCodeは、貿易クエリでcmd_codeとして渡すのに最適なコードです
comtrade_list_service_categories ツール
- EBOPS 2010のサービス分類を一覧表示します。キーワードまたは
parent_codeで絞り込むこともできます limitのデフォルトは100です。500を超える値を指定すると、すべての分類が返されます。上限より少ない値に一致結果が収まらない場合は、truncated: trueが返されます- 返される
idは、comtrade_get_services_tradeで使用するservice_codeです
comtrade_get_trade_flows ツール
reporter_code、flow_code(M輸入/X輸出/RX再輸出/RM再輸入)、およびperiod(YYYYまたはYYYYMM形式)が必要です。最大120期間を指定できますが、提供されるのは先頭の12期間のみで、残りはunservedPeriodsに一覧表示されますpartner_code: 0を指定すると世界合計が返されます。パートナー別の内訳を取得する場合は省略します。classificationではHS、H0~H6、およびSITCのS1~S4/SSを指定できます(商品検索はHSのみ対応)cmd_code[]には最大200コードを指定できますが、提供されるのは先頭の20コードのみで、残りはunservedCmdCodesに一覧表示されます。商品分類をまたぐ合計を取得する場合は省略するか、["TOTAL"]を渡します。truncated: trueとtruncationHintは、応答が500件の上限に達したことを示します。isReportedでは、直接報告された行とUNによる推計値を区別します
comtrade_get_trade_balance ツール
- 期間ごとに
balanceUsd(符号付き)、exportsUsd、importsUsd、およびcoverageRatio(輸出/輸入)を返します。省略可能なcmd_code[]を指定すると、HSまたはSITCの商品に収支を絞り込めます - 1回の呼び出しで12期間、20コードが提供されます(最大120期間、200コードまで受け付けます)。残りは
unservedPeriods/unservedCmdCodesに一覧表示されます。いずれかのフローが500件の上限に達した場合、収支が不完全な可能性があることをnoticeで警告します - すべての応答に含まれる
mirrorCaveatは、収支がこの報告国自身の値を反映し、パートナー側のミラーデータを反映していないことを示します
comtrade_get_top_partners ツール
reporter_code、flow_code(M/X)、および単一のperiodを指定します。省略可能な単一のcmd_codeを指定できます(商品全体の貿易を取得する場合は省略します)- 最大
limit件のパートナーを返します(デフォルトは10。50を超える値を指定すると、取得されたすべての結果が返されます)。各結果にはrank、primaryValueUsd、sharePercentが含まれます - 取得結果が500件の上限に達した場合は、
truncated: trueが返されます
comtrade_get_top_commodities ツール
reporter_code、flow_code、単一のperiodを指定します。aggr_levelは2(HS章、既定値)または4(項)です。partner_codeの既定値はWorld(0)です。特定の相手国に絞るには値を設定します- 最大
limit件のカテゴリーを返します(既定値は10、50を超えると取得したすべてのカテゴリーを返します)。各カテゴリーにはrank、primaryValueUsd、sharePercentが含まれます - 取得件数が500件の上限に達した場合、
truncated: trueを返します
comtrade_get_data_availability ツール
- すべてのフィルターは省略可能です。
reporter_code、period、freq(A/M、既定値はA)、type_code(Cは物品/Sはサービス、既定値はC)、classification(省略または空欄の場合、物品ではHS、サービスではEB10に解決されます) - 利用可能な場合、データセットごとに
totalRecords、firstReleased、lastReleasedを返します。物品の利用可能性を確認するには、すべてのフィルターを省略します - 年次データは通常、対象年の3~12か月後に公開されます。直近の期間を照会する前に、このツールを呼び出してください
comtrade_get_services_trade ツール
comtrade_get_trade_flowsと同じ入力を指定します。reporter_code、flow_code(M/X)、periodの値、任意のpartner_code(すべての相手国をまとめる場合は0)。最大120期間のうち、最初の12期間を処理し、残りはunservedPeriodsに一覧表示しますservice_codeを指定すると、1つのEBOPSカテゴリーに絞り込めます。comtrade_list_service_categoriesを使用してコードを確認してください- 応答が500件の上限に達した場合、
truncated: trueとtruncationHintを返します。国と期間の対象範囲は、物品よりも限定されています
comtrade://countries リソース
- 国/地域の完全な一覧を
application/json形式で返します。M49コード、ISO識別子、validAsReporter、isGroupが含まれます comtrade_lookup_countriesの検索対象と同じ起動時参照キャッシュから読み込まれます
comtrade://hs-classification/{level} リソース
levelのパスパラメーターには2(章)、4(項)、6(号)を指定できます。それ以外の値を指定すると、検証エラーが発生します- 各コードの
description、parent、isLeafを返します。すべての末端コードを列挙すると大きすぎるため、キーワード検索にはcomtrade_search_commoditiesを使用してください
機能
@cyanheads/mcp-ts-coreを基盤とし、stdioおよびStreamable HTTPトランスポート、認証方式の切り替え(none/jwt/oauth)、ストレージの切り替え(in-memory、filesystem、Supabase、Cloudflare KV/R2/D1)、任意のOpenTelemetryトレース機能を備えた構造化ログに対応しています。
Comtrade 固有の機能:
- 参照データ(国コード、HS階層、EBOPSカテゴリー)は起動時にUNの静的ファイルから読み込まれます。キーワード検索でリクエストごとの取得は発生しません
- 認証済みエンドポイント(
data/v1/get)と公開プレビューエンドポイント(public/v1/preview)に対応しています。サブスクリプションキーが設定されていない場合、ツールはプレビューエンドポイントにフォールバックします - ワークフローツールでサブリクエストを並列実行します(
comtrade_get_trade_balanceは輸出と輸入の取得を並行して実行します) - 一時的な障害が発生した場合は指数バックオフで再試行し、上流から
Retry-Afterヘッダーが提供されていればそれに従います - 説明の補完 — 参照キャッシュから国名とHS/EBOPS名を結合し、プレビューエンドポイントで省略される
*Descフィールドを補います
エージェント向けの出力:
- 公開プレビューの応答が500件に達した場合、復旧のヒントとともに
truncated: trueを返します - 貿易フローのレコードに
isReportedフラグを付与し、直接報告された値と、国連が推計または集計した行を区別します - 国の検索結果に
validAsReporterを付与し、相手国専用の地域コードを使った無効なクエリの作成を防ぎます - 貿易収支の出力に
mirrorCaveatを付与し、エラーテキストを解析せずに方法論上の注意点を示します
はじめに
公開ホスト型インスタンス
公開インスタンスは https://un-comtrade.caseyjhand.com/mcp で利用できます。インストールは不要です。キー不要の公開プレビューエンドポイント(上流リクエストあたり500レコード)で実行され、提供対象期間を少なくとも1秒間隔で間隔を空けたリクエストに分割します。Balance では期間ごとに2回のリクエストが必要なため、配列が長いほど時間がかかります。Streamable HTTP を使って、任意の MCP クライアントを接続してください。
{
"mcpServers": {
"un-comtrade-mcp-server": {
"type": "streamable-http",
"url": "https://un-comtrade.caseyjhand.com/mcp"
}
}
}
セルフホスト/ローカル
前提条件: UN Comtrade のサブスクリプションキーは任意です。キーがない場合、ツールは公開プレビューエンドポイント(上流リクエストあたり500レコード)を使用します。キーを設定すると認証付きアクセスが有効になります。データの取得とリクエストの上限は、UN Comtrade およびサブスクリプションの内容によって異なります。
以下を MCP クライアントの設定ファイルに追加してください。
{
"mcpServers": {
"un-comtrade-mcp-server": {
"type": "stdio",
"command": "bunx",
"args": ["@cyanheads/un-comtrade-mcp-server@latest"],
"env": {
"MCP_TRANSPORT_TYPE": "stdio",
"MCP_LOG_LEVEL": "info",
"COMTRADE_SUBSCRIPTION_KEY": "your-key-here"
}
}
}
}
または、npx を使う場合(Bun は不要です):
{
"mcpServers": {
"un-comtrade-mcp-server": {
"type": "stdio",
"command": "npx",
"args": ["-y", "@cyanheads/un-comtrade-mcp-server@latest"],
"env": {
"MCP_TRANSPORT_TYPE": "stdio",
"MCP_LOG_LEVEL": "info",
"COMTRADE_SUBSCRIPTION_KEY": "your-key-here"
}
}
}
}
または、Docker を使う場合:
{
"mcpServers": {
"un-comtrade-mcp-server": {
"type": "stdio",
"command": "docker",
"args": [
"run", "-i", "--rm",
"-e", "MCP_TRANSPORT_TYPE=stdio",
"-e", "COMTRADE_SUBSCRIPTION_KEY=your-key-here",
"ghcr.io/cyanheads/un-comtrade-mcp-server:latest"
]
}
}
}
Streamable HTTP を使う場合は、トランスポートを設定してサーバーを起動してください。
MCP_TRANSPORT_TYPE=http MCP_HTTP_PORT=3010 COMTRADE_SUBSCRIPTION_KEY=... bun run start:http
# Server listens at http://localhost:3010/mcp
前提条件
- Bun v1.4.0 以降(または Node.js v24 以降)。開発環境と Docker イメージでは Bun 1.4.3 を使用します。
- 任意:サブスクリプションの上限に従って認証付き API アクセスを行うには、UN Comtrade のサブスクリプションキーが必要です。キーがない場合、データツールは公開プレビューエンドポイント(上流リクエストあたり500レコード)を使用します。参照/検索ツール(
comtrade_lookup_countries、comtrade_search_commodities、comtrade_list_service_categories)はキーを必要とせず、静的な UN の参照ファイルを照会します。
インストール
- リポジトリをクローンします:
git clone https://github.com/cyanheads/un-comtrade-mcp-server.git
- ディレクトリに移動します:
cd un-comtrade-mcp-server
- 依存関係をインストールします:
bun install
- 環境を設定します:
cp .env.example .env
# edit .env and set COMTRADE_SUBSCRIPTION_KEY if you have one
設定
すべての設定は、src/config/server-config.ts の Zod スキーマによって起動時に検証されます。
| 変数 | 説明 | デフォルト |
|---|---|---|
COMTRADE_SUBSCRIPTION_KEY | comtradedeveloper.un.org で取得する Azure API Management サブスクリプションキーです。キーがない場合、ツールは公開プレビューエンドポイント(上限500レコード)を使用します。 | — |
COMTRADE_API_BASE_URL | Comtrade API のベース URL を上書きします。 | https://comtradeapi.un.org |
MCP_TRANSPORT_TYPE | トランスポート:stdio または http。 | stdio |
MCP_HTTP_PORT | HTTP サーバーのポートです。 | 3010 |
MCP_HTTP_ENDPOINT_PATH | HTTP エンドポイントのパスです。 | /mcp |
MCP_PUBLIC_URL | リバースプロキシ環境で公開オリジンを上書きします。 | — |
MCP_SESSION_MODE | HTTP セッションモード:auto、stateful、または stateless。 | stateless |
MCP_AUTH_MODE | 認証モード:none、jwt、または oauth。 | none |
MCP_LOG_LEVEL | ログレベル(debug、info、warning、error)。 | info |
LOGS_DIR | ログファイル用のディレクトリ(Node.js のみ)。 | <project-root>/logs |
LOG_TOOL_FAILURE_PAYLOADS | 失敗したツールの引数と結果を、キー名に基づいて機密情報を伏せ字にして記録します。LOG_TOOL_FAILURE_PAYLOAD_MAX_BYTES(デフォルトは 16384)を上限とします。自由形式の値に含まれるシークレットは伏せ字になりません。 | false |
STORAGE_PROVIDER_TYPE | ストレージバックエンド:in-memory、filesystem、supabase、cloudflare-kv/r2/d1。 | in-memory |
OTEL_ENABLED | OpenTelemetry instrumentation を有効にします。 | false |
OTEL_EXPORTER_OTLP_ENDPOINT | トレース(/v1/traces)とメトリクス(/v1/metrics)用の OTLP ベース URL です。 | — |
OTEL_EXPORTER_OTLP_LOGS_ENDPOINT | 任意の OTLP ログエンドポイントです。指定した値をそのまま使用します。 | — |
任意の上書き設定の全一覧は .env.example を参照してください。
サーバーの実行
ローカル開発
-
ビルドして実行:
# One-time build bun run rebuild # Run the built server bun run start:stdio # or bun run start:http -
チェックとテストを実行:
bun run devcheck # Lint, format, typecheck, security bun run test # Vitest test suite bun run lint:mcp # Validate MCP definitions against spec
Docker
docker build -t un-comtrade-mcp-server .
docker run --rm -e COMTRADE_SUBSCRIPTION_KEY=your-key -p 3010:3010 un-comtrade-mcp-server
Dockerfile のデフォルトは HTTP トランスポート、ステートレスセッションモードで、ログは /var/log/un-comtrade-mcp-server に出力されます。OpenTelemetry のピア依存関係はデフォルトでインストールされます。これらを省略するには、--build-arg OTEL_ENABLED=false を指定してビルドしてください。
プロジェクト構成
| ディレクトリ | 用途 |
|---|---|
src/index.ts | createApp() のエントリーポイントです。ツールとリソースを登録し、サービスを初期化します。 |
src/config | 環境変数の解析と、Zod による検証を行います。 |
src/mcp-server/tools | ツール定義(*.tool.ts)です。参照の解決、貿易データ、ワークフローの集約に関する9つのツールがあります。 |
src/mcp-server/resources | リソース定義(*.resource.ts)です。国の一覧と HS 階層のリソースがあります。 |
src/services/comtrade-data | ComtradeDataService — リトライとキーのフォールバックに対応した、認証済み/プレビュー用リクエストビルダーです。 |
src/services/comtrade-reference | ComtradeReferenceService — 参照データ(国、HS、EBOPS)のローダーです。起動時のキャッシュとキーワード検索を行います。 |
src/services/comtrade-meta | ComtradeMetaService — データの利用可否とデータセットのメタデータを提供するエンドポイントです。 |
tests/ | src/ に対応する単体テストと統合テストです。 |
開発ガイド
開発ガイドラインとアーキテクチャのルールについては、CLAUDE.md を参照してください。要点は次のとおりです。
- ハンドラーは例外をスローし、フレームワークが捕捉します。ツールのロジックで
try/catchを使用しないでください。 - リクエスト単位のログには
ctx.logを、テナント単位のストレージにはctx.stateを使用します。 - 新しいツールとリソースは、
src/mcp-server/*/definitions/index.tsのバレルを介して登録します。 - 外部 API 呼び出しは、未加工データを検証 → ドメイン型に正規化 → 出力スキーマを返す、という手順でラップします。不足しているフィールドを捏造してはいけません。
- 参照データ(国、HS コード)との結合では、リクエストごとに取得するのではなく、起動時のキャッシュからデータを取得する必要があります。
データライセンス
UN Comtrade データは、再配布条件を含む UN Comtrade ライセンス契約に従って使用してください。
貢献
Issue は歓迎します。提出前にチェックとテストを実行してください。
bun run devcheck
bun run test
ライセンス
Apache-2.0 — 詳細については LICENSE を参照してください。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。