Reevol

用於貿易作業的 MCP 伺服器:架構與範例

說明 Model Context Protocol(MCP)伺服器如何安全地向 AI 代理公開貿易作業資料(ERP、銀行、航運、KYB)——涵蓋架構模式、安全性模型,以及三個參考實作。

By Gil Shiff and Asaf Halfon··7 min read

適用於貿易營運的 MCP 伺服器:架構與範例

你的 AI 代理需要分類 HS code、查詢關稅稅率並提交報關申報。沒有 MCP,就得做三套整合、三套驗證流程、三種錯誤處理。把你營運的每個國家都乘上去,在代理執行第一筆交易前,你就已經陷入維運惡夢。

Model Context Protocol(MCP) 透過提供單一方式來發現並使用貿易系統能力,解決了這個問題。你的代理不再把 API 呼叫硬編碼,而是詢問 MCP 伺服器「你能做什麼?」並獲得結構化的 resources(可讀取的資料)與 tools(可執行的動作)。伺服器負責處理現實世界中海關 API、承運人格式與銀行介面的各種不一致。

本文將逐步介紹適用於貿易營運的 MCP 架構,並提供報關申報與貿易融資的可運行範例。你將看到如何設計用於 HS 分類的 resources、打造用於提交申報的 tools,以及如何處理使貿易有別於一般企業整合的非同步審批工作流。

什麼是 Model Context Protocol,為何對貿易重要?

MCP 解決的整合難題

所有連接貿易系統的 AI 代理都會面臨同一個數學問題:N 個代理乘上 M 個系統,等於 N×M 個客製整合。你的分類代理需要 ACE 存取;你的文件代理需要承運人 API;你的合規代理需要制裁篩檢。每個連線都要撰寫驗證、錯誤處理、流量限制與格式轉換。

MCP 把這降維成 N+M。代理講 MCP;伺服器講 MCP。協定處理能力探索,代理不需對各系統的功能硬編碼。

生態系成長迅速。Anthropic 發布規範後兩個月內,開發者已建立超過 1,000 個社群 MCP 伺服器。多數鎖定一般企業用例——資料庫、檔案系統、通訊工具。貿易專用伺服器仍然稀少,這同時是缺口也是機會。

MCP 架構:Resources、Tools 與 Prompts

MCP 定義的三個原語,能直接對應到貿易營運:

Resources 暴露給代理可讀取的資料。對貿易而言,包含:

  • HS code 分類資料庫
  • 依國別配對的關稅稅率表
  • 貨件追蹤狀態
  • 文件樣板與要求

Tools 讓代理執行動作。貿易範例:

  • submit_customs_declaration —— 向 單一窗口 系統送出報關申報
  • request_certificate_of_origin —— 發起原產地證明(CO)申請
  • initiate_letter_of_credit —— 與開證行啟動 LC 流程

Prompts 提供可重用的工作流。分類用的 prompt 可能引導代理蒐集產品細節、檢視預先裁定,並以可解釋的推理選定適當的 HS code。

關鍵洞見:resources 僅供讀取,可安全頻繁呼叫;tools 會執行動作,且在呼叫前需要使用者明確同意。這對合規很重要——你的稽核追蹤能清楚顯示每次申報提交何時經由人員核准。

MCP 與傳統 API 整合的差異

MCP 與傳統 API 整合比較
面向傳統 REST/GraphQLModel Context Protocol
連線模型點對點、硬編碼端點能力探索、動態繫結
資料存取每個 API 需自訂解析標準化資源格式
動作執行直接呼叫 API具同意檢查點的工具呼叫
同意處理應用層級(若有)協定層級、明確核准
稽核能力自訂日誌實作內建呼叫追蹤
傳輸僅 HTTPstdio(本機)或 HTTP+SSE(遠端)

MCP 採用 JSON-RPC 2.0 訊息格式,可運行於 stdio(本機開發)或 HTTP 搭配 Server-Sent Events(SSE,用於正式環境)。協定包含能力協商——伺服器宣告支援能力,客戶端宣告需求,雙方協調出相容的功能集合。

對貿易營運,必須強調同意模型。當代理呼叫 submit_customs_declaration,MCP 要求在執行前取得使用者核准。這不僅是良好體驗,更是稽核證據:每次申報均由人員授權,足以回應海關對「誰核准該報單」的追問。

貿易營運用 MCP 伺服器架構

跨境貿易的參考架構

MCP 貿易營運參考架構

架構清楚分層:

AI Client 層:Claude、GPT-4 或自建代理。使用 MCP,發現可用伺服器,協調多步驟工作流。

MCP 伺服器層:依領域打造。報關伺服器封裝單一窗口 API;航運伺服器標準化承運人追蹤;貿易融資伺服器處理 LC 與付款工作流。

Schema 層:WCO Data Model(183 個會員國採用)與 UN/CEFACT 標準指引 MCP 伺服器如何結構化 resources 與 tools。當報關伺服器暴露 HS 分類 resource,其回應格式應對齊 WCO 慣例。

系統層:實際 API——US ACE、EU EUCDM、承運人 EDI、銀行 SWIFT 介面。MCP 伺服器在協定標準格式與系統特定需求間轉換。

設計貿易資料用的 MCP Resources

Resources 遵循 URI 模式並回傳結構化資料。良好設計的貿易 resource 應包含:

{
  "jsonrpc": "2.0",
  "method": "resources/read",
  "params": {
    "uri": "trade://customs/hs-classification/8471.30"
  },
  "id": 1
}

回應:

{
  "jsonrpc": "2.0",
  "result": {
    "contents": [{
      "uri": "trade://customs/hs-classification/8471.30",
      "mimeType": "application/json",
      "text": "{\"code\":\"8471.30\",\"description\":\"Portable automatic data processing machines, weighing not more than 10 kg\",\"duty_rates\":{\"US\":{\"general\":\"0%\",\"column2\":\"35%\"},\"EU\":{\"MFN\":\"0%\"}},\"notes\":[\"Includes laptops, notebooks, tablets with keyboard\"],\"binding_rulings_available\":true}"
    }]
  },
  "id": 1
}

請注意,resource 同時包含多法域的稅率、相關分類附註,以及是否存在具約束力裁定的旗標。你的代理可據此做出決策,無須額外 API 呼叫。

建立用於貿易動作的 MCP Tools

Tools 會觸發真實世界動作,設計更須謹慎。報關申報工具需要:

  1. 輸入驗證——在打海關 API 前先攔截錯誤
  2. 同意檢查點——MCP 協定確保使用者核准
  3. 執行與錯誤處理——優雅的失敗模式
  4. 稽核記錄——詳載每次呼叫的參數與結果
{
  "jsonrpc": "2.0",
  "method": "tools/call",
  "params": {
    "name": "submit_customs_declaration",
    "arguments": {
      "entry_type": "01",
      "importer_id": "12-3456789",
      "port_of_entry": "2704",
      "line_items": [
        {
          "hs_code": "8471.30.0100",
          "description": "Laptop computers",
          "quantity": 500,
          "value_usd": 250000,
          "country_of_origin": "TW"
        }
      ]
    }
  },
  "id": 2
}

MCP 用戶端(如 Claude 或你的代理框架)會攔截此呼叫並在執行前呈給使用者核准。這建立明確的稽核紀錄:「使用者 X 在時間 Y 核准以參數 Z 提交申報。」

透過多伺服器協調實現端到端工作流

實際貿易流程橫跨多個領域。一筆進口需要報關、航運協調與付款執行。MCP 支援多伺服器連線——你的代理同時維持與各伺服器的工作階段並協調整體工作流。

具備多伺服器協同的進口流程

同意檢查點會出現在每次 tool 呼叫前。代理可自動計算稅費、準備文件,但實際提交必須等待人員核准。這與 授權經濟營運商(AEO)計畫對合規控管的期待一致。

對付款執行而言,BIS Project Nexus 規格以 60 秒內跨境結算為目標。包裝符合 Nexus 的支付軌道之 MCP 工具,能在海關放行確認後觸發近乎即時的結算。

範例:報關申報 MCP 伺服器

以 MCP 封裝單一窗口 API

WTO 貿易便利化協定(TFA)第 10.4 條要求會員國建置單一窗口系統——進出口文件的一站式提交。實務上,各國單一窗口的 API、驗證與資料格式大相逕庭。

MCP 報關伺服器抽象化這些差異。你的代理無論向 US ACE、EU EUCDM 或新加坡 TradeNet 申報,都呼叫同一個 submit_customs_declaration 工具。伺服器負責:

  • 驗證(依系統使用憑證、API key、OAuth token 等)
  • 格式轉換(你的標準負載 → 系統特定 XML/JSON)
  • 回應正規化(多樣狀態碼對應為一致狀態)
  • 錯誤處理(系統特定錯誤翻譯為可行動訊息)

此抽象很快就能回本。新增國家時,只需實作一個 MCP 伺服器,而非更新所有會觸及報關的代理。

Resource 實作:HS code 分類

HS 分類 resource 展示了 MCP 的資料存取模式。以下為簡化實作:

@server.read_resource("trade://customs/hs-classification/{code}")
async def read_hs_classification(code: str) -> Resource:
    # Query HS database (WCO Data Model format)
    classification = await hs_database.lookup(code)
    
    # Enrich with duty rates from multiple jurisdictions
    duty_rates = await duty_service.get_rates(
        code, 
        jurisdictions=["US", "EU", "UK", "CA"]
    )
    
    # Check for binding rulings
    rulings = await rulings_database.search(code)
    
    return Resource(
        uri=f"trade://customs/hs-classification/{code}",
        mimeType="application/json",
        text=json.dumps({
            "code": code,
            "description": classification.description,
            "chapter_notes": classification.notes,
            "duty_rates": duty_rates,
            "binding_rulings": [r.summary for r in rulings[:5]],
            "last_updated": classification.updated_at.isoformat()
        })
    )

此 resource 將多來源資料(HS 資料庫、稅率服務、具約束力裁定)彙整為單一回應。你的代理用一次呼叫即可取得分類決策所需資訊。

想更深入了解分類方法,請參閱我們的指南:AI 驅動的 HS code 分類

Tool 實作:申報提交

此申報提交流程示範 MCP 的動作執行模式與正確的同意處理:

@server.tool("submit_customs_declaration")
async def submit_declaration(
    entry_type: str,
    importer_id: str,
    port_of_entry: str,
    line_items: list[LineItem],
    supporting_documents: list[DocumentRef]
) -> ToolResult:
    # Validate before execution
    validation_errors = validate_declaration(
        entry_type, importer_id, port_of_entry, line_items
    )
    if validation_errors:
        return ToolResult(
            success=False,
            error=f"Validation failed: {validation_errors}"
        )
    
    # Log the invocation (audit trail)
    audit_log.record(
        action="submit_customs_declaration",
        parameters={
            "entry_type": entry_type,
            "importer_id": importer_id,
            "port_of_entry": port_of_entry,
            "line_items_count": len(line_items),
            "total_value": sum(item.value for item in line_items)
        },
        timestamp=datetime.utcnow(),
        user_consent_received=True  # MCP protocol ensures this
    )
    
    # Submit to appropriate Single Window
    result = await single_window_client.submit(
        build_declaration_payload(
            entry_type, importer_id, port_of_entry, 
            line_items, supporting_documents
        )
    )
    
    return ToolResult(
        success=result.accepted,
        data={
            "entry_number": result.entry_number,
            "status": result.status,
            "estimated_release": result.estimated_release_time
        }
    )

稽核日誌會捕捉每次呼叫與完整參數。當海關稽核你的報單時,你能準確展示何時提交、提交內容,以及已透過 MCP 協定取得使用者同意。

研究顯示,自動化能將通關時間較人工處理縮短 70–80%。以 MCP 驅動的代理可在維持合規控管與 AEO 資格的前提下達成這些成效。

處理監管審批工作流

海關決策並非即時。你的申報可能立即放行、被要求補件,或安排實體查驗。MCP 工具需能處理這些非同步模式:

@server.tool("check_declaration_status")
async def check_status(entry_number: str) -> ToolResult:
    status = await single_window_client.get_status(entry_number)
    
    if status.state == "PENDING_DOCUMENTS":
        return ToolResult(
            success=True,
            data={
                "status": "pending_documents",
                "required_documents": status.required_docs,
                "deadline": status.response_deadline.isoformat(),
                "suggested_action": "Upload required documents using submit_supporting_document tool"
            }
        )
    
    if status.state == "EXAMINATION_ORDERED":
        return ToolResult(
            success=True,
            data={
                "status": "examination_ordered",
                "exam_type": status.exam_type,
                "location": status.exam_location,
                "suggested_action": "Coordinate with freight forwarder for exam scheduling"
            }
        )
    
    # ... handle other states

你的代理可以輪詢狀態並採取適當後續動作——上傳補充文件、通知利害關係人,或在需要時升級交由人工處理。

範例:貿易融資 MCP 伺服器

讓 AI 代理連接信用狀系統

貿易融資仍高度仰賴紙本。根據 ICC Digital Standards Initiative,少於 1% 的貿易文件完全數位化。這為以 MCP 伺服器橋接 AI 代理與 LC 系統創造了機會。

法規框架也在演變。MLETR(電子可轉讓記錄示範法)推動數位提單與其他可轉讓票據。MCP 貿易融資伺服器可在此新興數位框架內暴露工具。

@server.tool("initiate_letter_of_credit")
async def initiate_lc(
    applicant: str,
    beneficiary: str,
    amount: Money,
    terms: LCTerms,
    required_documents: list[str]
) -> ToolResult:
    # Note: Actual LC initiation requires bank relationship and KYC
    # This tool initiates the application workflow
    
    application = await bank_api.create_lc_application(
        applicant=applicant,
        beneficiary=beneficiary,
        amount=amount,
        terms=terms,
        required_documents=required_documents
    )
    
    return ToolResult(
        success=True,
        data={
            "application_id": application.id,
            "status": "pending_bank_review",
            "next_steps": [
                "Bank will review application within 2 business days",
                "Additional documentation may be requested",
                "LC will be issued upon approval"
            ]
        }
    )

請注意,此工具啟動的是申請工作流,而非直接開立 LC。銀行往來、KYC 要求與徵信決策仍由金融機構掌握。MCP 伺服器的價值在於簡化申請流程,而非取代核准決策。

文件驗證 Resources

貿易融資依賴文件驗證——提單、原產地證明、商業發票。MCP resources 可暴露驗證狀態:

@server.read_resource("trade://finance/document/{document_id}")
async def read_document_status(document_id: str) -> Resource:
    doc = await document_registry.get(document_id)
    
    verification = {
        "document_type": doc.type,
        "issuer": doc.issuer,
        "issue_date": doc.issued_at.isoformat(),
        "verification_status": doc.verification_status,
        "blockchain_anchor": doc.blockchain_tx_id if doc.anchored else None,
        "matches_lc_requirements": doc.lc_compliance_check
    }
    
    return Resource(
        uri=f"trade://finance/document/{document_id}",
        mimeType="application/json",
        text=json.dumps(verification)
    )

當文件錨定於區塊鏈或經可信登錄處驗證時,resource 會揭露該驗證狀態。你的代理可在付款放行前檢查文件真偽。

以 ISO 20022 觸發付款工具

跨境支付日益採用 ISO 20022 訊息格式。MCP 工具可用此標準觸發付款執行:

@server.tool("trigger_trade_payment")
async def trigger_payment(
    lc_reference: str,
    payment_amount: Money,
    beneficiary_account: BankAccount,
    documents_presented: list[str]
) -> ToolResult:
    # Verify LC conditions met
    lc = await lc_service.get(lc_reference)
    compliance = await lc_service.check_document_compliance(
        lc, documents_presented
    )
    
    if not compliance.all_conditions_met:
        return ToolResult(
            success=False,
            error=f"LC conditions not met: {compliance.missing_conditions}"
        )
    
    # Build ISO 20022 payment message
    payment_msg = build_iso20022_payment(
        amount=payment_amount,
        beneficiary=beneficiary_account,
        reference=lc_reference
    )
    
    # Submit to payment network
    result = await payment_network.submit(payment_msg)
    
    return ToolResult(
        success=True,
        data={
            "payment_reference": result.reference,
            "status": result.status,
            "expected_settlement": result.settlement_time.isoformat()
        }
    )

隨著 BIS Project Nexus 以 60 秒內跨境結算為目標,這些工具可在交易條件驗證完成後,實現近即時的付款執行。

合規與稽核注意事項

為何 MCP 的同意模型對受監管貿易至關重要

MCP 規範要求在工具執行前取得使用者明確同意。這不是可選項,而是協定內建。對貿易營運而言,此設計符合監管期待。

WCO SAFE Framework 期望取得 AEO 認證的企業維持清楚的授權控管。當你的 AI 代理提交報關申報時,稽核人員要看到:

  1. 是誰授權了此次提交
  2. 提交了哪些資訊
  3. 何時完成授權
  4. 代理的推理過程為何

MCP 的同意檢查點可自動提供第 1–3 點的證據;第 4 點則由你的實作透過適當記錄補足。

在 MCP 伺服器中建立稽核追蹤

處理貿易營運的每個 MCP 伺服器都應記錄:

class AuditLogger:
    async def log_tool_invocation(
        self,
        tool_name: str,
        parameters: dict,
        user_id: str,
        consent_timestamp: datetime,
        result: ToolResult,
        execution_time_ms: int
    ):
        await self.store.insert({
            "event_type": "tool_invocation",
            "tool": tool_name,
            "parameters": self.sanitize_sensitive(parameters),
            "user": user_id,
            "consent_at": consent_timestamp.isoformat(),
            "success": result.success,
            "result_summary": self.summarize_result(result),
            "execution_ms": execution_time_ms,
            "server_version": self.version,
            "timestamp": datetime.utcnow().isoformat()
        })

在保留足以稽核的資訊同時,需去識別與最小化敏感資料(如價格、客戶細節)。將日誌儲存在僅追加式、具完整性驗證的存儲中。

處理敏感貿易資料

MCP 伺服器會處理敏感資訊,例如:

  • 商業發票金額與定價
  • 客戶與供應商身分
  • 可揭露商業策略的貿易模式
  • 銀行與付款細節

安全重點:

  • 傳輸加密:正式環境使用 HTTP+SSE 時務必啟用 TLS
  • 驗證與授權:在暴露 MCP 端點前實作完備的存取控制
  • 資料最小化:resources 僅回傳代理所需
  • 存取日誌:追蹤哪些代理存取了哪些 resources
  • 保留政策:定義詳細日誌的保存期限

正式部署模式

傳輸選擇:stdio vs HTTP+SSE

MCP 支援兩種傳輸:

stdio —— 伺服器以子行程運行,透過標準輸入/輸出通訊。適用於:

  • 本機開發與測試
  • 單一使用者桌面應用(Claude Desktop)
  • 代理與伺服器同機運行情境

HTTP+SSE —— 伺服器暴露 HTTP 端點並使用 SSE 串流。適用於:

  • 正式環境的多租戶部署
  • 需要獨立擴展的伺服器
  • 需要負載平衡與故障切換的情境

在貿易營運中,正式部署通常使用 HTTP+SSE。你的報關 MCP 伺服器以服務形式運行,處理組織內多個代理的請求。

為高交易量貿易擴展 MCP 伺服器

貿易營運有其擴展挑戰:

受速率限制的海關 API:許多單一窗口嚴格限制頻率。你的 MCP 伺服器需要:

  • 具有優先權的請求佇列
  • 針對唯讀 resources 的快取(HS code、稅率)
  • 斷路器以避免連鎖失敗

連線池化:與底層系統維持長連線,而非每次請求重新連線。

地理分散:多國營運時,將 MCP 伺服器部署在接近所包裝的海關系統處。延遲在截關前搶時效尤為關鍵。

class RateLimitedClient:
    def __init__(self, rate_limit: int, window_seconds: int):
        self.semaphore = asyncio.Semaphore(rate_limit)
        self.window = window_seconds
        
    async def call(self, request):
        async with self.semaphore:
            result = await self._execute(request)
            await asyncio.sleep(self.window / self.rate_limit)
            return result

監控與可觀測性

追蹤以下指標以監控貿易用 MCP 伺服器:

  • 依工具的延遲:提交申報需時?HS 查詢需時?
  • 依目的國的錯誤率:哪些海關系統失敗?
  • API 配額消耗:是否逼近速率上限?
  • 同意至執行時間:使用者核准動作所需時間?
  • 快取命中率:HS code 查詢快取表現如何?

設定警示於:

  • 錯誤率飆升(海關系統中斷?)
  • 延遲上升(API 效能劣化?)
  • 配額逼近上限(需要節流?)

快速上手:你的第一個貿易 MCP 伺服器

選擇你的首個整合目標

選擇你的第一個 MCP 伺服器整合

在打造會執行動作的工具之前,先從唯讀 resources 開始:

適合起手的專案:

  • HS code 分類 resource(唯讀,高價值)
  • 貨件追蹤 resource(唯讀,即時有用)
  • 稅率計算 resource(唯讀,邏輯複雜)

留待後續:

  • 申報提交工具(需謹慎處理同意)
  • 付款觸發工具(需整合銀行)
  • 多國協調(需多伺服器實作)

開發環境設定

官方 MCP SDK 提供 TypeScript 與 Python。對貿易營運常見的資料處理而言,Python 經常更合適。

# Install MCP SDK
pip install mcp

# Clone reference implementations
git clone https://github.com/modelcontextprotocol/servers

# Create your trade server
mkdir trade-mcp-server
cd trade-mcp-server

建構伺服器結構:

trade-mcp-server/
├── server.py           # MCP server implementation
├── resources/          # Resource handlers
│   ├── hs_codes.py
│   └── duty_rates.py
├── tools/              # Tool handlers
│   └── declarations.py
├── clients/            # External API clients
│   ├── ace_client.py
│   └── eucdm_client.py
└── tests/

使用 Claude Desktop 測試

Claude Desktop 內建 MCP 支援,非常適合在開發期間測試貿易伺服器。

在 Claude 的設定中加入你的伺服器:

{
  "mcpServers": {
    "trade-customs": {
      "command": "python",
      "args": ["/path/to/trade-mcp-server/server.py"],
      "env": {
        "CUSTOMS_API_KEY": "your-key"
      }
    }
  }
}

現在你可以透過 Claude 與你的貿易伺服器互動:

「查詢筆記型電腦的 HS code,並顯示自台灣進口到美國的關稅稅率。」

Claude 會呼叫你的 HS 分類 resource 並回傳結構化結果。你可以迭代 resource 設計、測試錯誤處理並在部署前優化資料格式。

想了解 MCP 如何融入自動代理的貿易系統,請參閱我們的綜覽:代理式商務基礎AI 驅動的代理式商務 支柱。


OECD 估計,數位化貿易便捷化可為中小企業降低 10–15% 的貿易成本。把 AI 代理連上貿易系統的 MCP 伺服器,就是捕捉這些收益的基礎設施。從單一 resource 開始,驗證模式有效,再擴展到 tools 與多伺服器協調。

這個協定仍新,貿易專用實作仍稀少。這就是機會:打造你的營運所需的 MCP 伺服器,你就會領先仍維護點對點整合的競爭者。

常見問題

MCP 的資源與工具有何差異?+
資源是唯讀資料,您的 AI 代理可自由存取——HS code、關稅稅率、貨件狀態。工具則用於執行動作,例如提交申報或觸發付款。MCP 在執行工具前需要使用者明確同意,從而建立稽核人員所需的稽核軌跡。
MCP 伺服器能否處理多國的海關系統?+
可以。單一 MCP 伺服器可整合多個 Single Window API(US ACE、EU EUCDM、Singapore TradeNet),並向您的代理呈現一致的介面。伺服器會為各系統處理驗證、格式轉換與錯誤正規化。
MCP 如何處理像海關查驗這類非同步流程?+
MCP 工具會立即回傳狀態資訊。對於非同步流程,您可實作一個供代理輪詢的狀態查詢資源或工具。當海關下達查驗或要求文件時,狀態回應會包含後續步驟與截止期限。
我需要修改現有的貿易系統才能使用 MCP 嗎?+
不需要。MCP 伺服器充當 AI 代理與您現有 API 之間的轉接器。您的報關系統、承運商整合與銀行連線均維持不變。MCP 伺服器會在通訊協定與您的系統之間進行轉換。
在正式環境中,MCP 的最佳傳輸方式是什麼?+
正式環境建議使用 HTTP+SSE。它支援多個並行代理、可進行負載平衡,並讓您的 MCP 伺服器可獨立擴充。stdio 傳輸僅用於本機開發與在 Claude Desktop 上測試。
MCP 伺服器如何維持合規稽核軌跡?+
MCP 通訊協定的同意要求會自動產生稽核證據——每次工具呼叫都包含使用者核准。您的伺服器實作應加入參數、時間戳與結果的記錄。將日誌儲存在唯增式儲存中以供稽核調閱。

延伸閱讀