返回資料庫
Standards

MCP 模組程式碼標準

最後更新:2026年7月14日

為什麼程式碼標準很重要

我們交付的每個連接器都長得一樣。這不是巧合——這是紀律。當第二個整合到來時,代理的能力更容易測試、稽核和替換,因為每個 MCP 模組都遵循相同的結構、命名和錯誤契約。

本文檔定義了 IdeaBosque 編排主幹中所有 MCP 模組的標準。涵蓋目錄布局、工具註冊、輸入輸出 schema、錯誤處理、速率限制、稽核日誌和 PII 邊界處理。

目錄結構

每個 MCP 模組都位於 app/mcp_modules/ 下自己的目錄中,布局一致:

app/mcp_modules/<slug>/
  __init__.py
  module.py          # 工具註冊 + handler
  schemas.py         # 輸入輸出 Pydantic 模型
  tests/
    test_module.py
  README.md

工具註冊

每個模組透過標準介面註冊其工具。編排主幹透過掃描 register_tools() 進入點來發現工具——無需手動接線。

def register_tools(registrar):
    """註冊本模組提供的所有工具。"""
    registrar.tool(
        name="search_catalog",
        description="按 SKU 或名稱搜尋供應商目錄",
        input_schema=SearchCatalogInput,
        output_schema=SearchCatalogOutput,
        rate_limit=120,  # 每分鐘呼叫數
    )

錯誤處理

模組必須拋出型別化例外,而不是裸字串。主幹捕獲 MCPToolError 子類並將其轉換為代理可推理的結構化回應:

  • MCPAuthError — 憑證缺失或過期
  • MCPRateLimitError — 觸及上游速率限制
  • MCPTimeoutError — 上游呼叫超過配置的超時
  • MCPValidationError — 輸入未通過 schema 驗證
  • MCPUpstreamError — 上游回傳錯誤狀態

速率限制

每個工具在註冊呼叫中宣告自己的速率限制。主幹按代理、按工具、按視窗執行這些限制。當達到限制時,代理收到一個帶 Retry-After 標頭的 429 回應——它不會崩潰或盲目重試。

稽核日誌

每次工具呼叫都記錄:時間戳記、代理 ID、工具名、輸入雜湊(不是原始輸入——PII 邊界)、輸出狀態、時長和上游系統。日誌以結構化 JSON 寫入並推送到可觀測性管線。

「每次工具呼叫都被記錄且可稽核」不是我們後來才加的功能。它是標準要求的第一件事。

PII 邊界處理

模組必須宣告哪些輸入欄位包含 PII。主幹在記錄前對這些欄位做雜湊,絕不把原始 PII 發到稽核管線。PII 欄位在 schema 中標記:

class SearchCatalogInput(BaseModel):
    sku: str
    customer_name: str = Field(..., pii=True)
    region: str

當設定 pii=True 時,稽核日誌器把值替換為 SHA-256 雜湊。工具 handler 仍然接收原始值——PII 處理在日誌邊界強制執行,不在業務邏輯內部。

想為您的系統建構這個嗎?

這裡的每份文件都來自真實的生產工作。如果您有目標系統和工作流程想法,我們可以在一週內確定範圍。

申請客製開發

為期一週的發掘階段。您會拿到系統清單、工作流程地圖和固定範圍——無論您最終是否與我們合作開發。