用於貿易作業的 MCP 伺服器:架構與範例
說明 Model Context Protocol(MCP)伺服器如何安全地向 AI 代理公開貿易作業資料(ERP、銀行、航運、KYB)——涵蓋架構模式、安全性模型,以及三個參考實作。
適用於貿易營運的 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 整合的差異
| 面向 | 傳統 REST/GraphQL | Model Context Protocol |
|---|---|---|
| 連線模型 | 點對點、硬編碼端點 | 能力探索、動態繫結 |
| 資料存取 | 每個 API 需自訂解析 | 標準化資源格式 |
| 動作執行 | 直接呼叫 API | 具同意檢查點的工具呼叫 |
| 同意處理 | 應用層級(若有) | 協定層級、明確核准 |
| 稽核能力 | 自訂日誌實作 | 內建呼叫追蹤 |
| 傳輸 | 僅 HTTP | stdio(本機)或 HTTP+SSE(遠端) |
MCP 採用 JSON-RPC 2.0 訊息格式,可運行於 stdio(本機開發)或 HTTP 搭配 Server-Sent Events(SSE,用於正式環境)。協定包含能力協商——伺服器宣告支援能力,客戶端宣告需求,雙方協調出相容的功能集合。
對貿易營運,必須強調同意模型。當代理呼叫 submit_customs_declaration,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 會觸發真實世界動作,設計更須謹慎。報關申報工具需要:
- 輸入驗證——在打海關 API 前先攔截錯誤
- 同意檢查點——MCP 協定確保使用者核准
- 執行與錯誤處理——優雅的失敗模式
- 稽核記錄——詳載每次呼叫的參數與結果
{
"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 代理提交報關申報時,稽核人員要看到:
- 是誰授權了此次提交
- 提交了哪些資訊
- 何時完成授權
- 代理的推理過程為何
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 伺服器
選擇你的首個整合目標
在打造會執行動作的工具之前,先從唯讀 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 伺服器,你就會領先仍維護點對點整合的競爭者。