第十三節 外部工具服務接入

[!ref] 詳解見使用者手冊「外部工具服務接入」節。

13.1 服務條目欄位

每個外部服務條目包含:

欄位 類型 說明
name string 名字(也作為工具前綴,例如 notion.*
protocol enum http(Streamable HTTP,手動新增時的預設)/ sse(舊式)/ stdio。填錯時連線會自動協商回退:若伺服器端可達但握手被拒(如 405 / Bad Request),自動改試另一種 HTTP 傳輸並把實際生效的方式寫回配置;連不上(拒絕 / 超時 / EOF)則不回退
lazy_load bool 是否延遲載入該服務的工具。缺省跟隨全域「工具分類延遲載入」;顯式關閉則該服務工具常駐。落盤 mcp_lazy_load(按後端名)
endpoint string HTTP / SSE 通道的 URL;stdio 通道不用
command string stdio 通道要啟動的命令列(如 npx -y @some/mcp-server
args array stdio 通道的命令列參數
env map stdio 子程序的環境變數(憑證、token 等)
credential string HTTP / SSE 的 Bearer Token 或 API Key
oauth object OAuth 2.1 + PKCE 配置(authorizationEndpoint / tokenEndpoint / clientId / scope / clientSecret?);endpoint 可通過 .well-known 自動發現
enabled bool 是否啟用
timeout_ms int 請求超時
retry object max=3, base=500ms, jitter=0.3

憑證存儲(VAULT)credential / env / oauth.refresh_token 與續期元資料不入主配置文件、不入記錄檔,統一進國密加密的憑證函式庫(SM4-GCM + HKDF-SM3,machineID 綁定);現有明文憑證下次使用時被動遷移

13.1.1 OAuth 流程欄位

欄位 說明
authorizationEndpoint OAuth 授權端點
tokenEndpoint OAuth token 端點
clientId 用戶端 ID
clientSecret 可選;缺省即 public client(僅相依 PKCE)
scope 申請的權限範圍
redirectUri 本機回環:http://127.0.0.1:<port>/cb
pkce.codeVerifier / pkce.codeChallenge S256
accessTokenExpiresAt 啟動 / 後台到期前用 refresh_token 自動換新

13.1.2 健康看板欄位

MCP 配置 → 健康看板 來源是 zMCP gateway 的 /admin/metrics 環形緩衝:

欄位 說明
backend MCP 後端名
calls 呼叫次數(視窗內)
failRate 失敗率
p50Ms / p95Ms 回應耗時分位(毫秒)
lastError / lastErrorAt 最近一次失敗錯誤訊息 + 時間

13.2 工具命名規則

來源 命名
內置工具 不加前綴(例如 read, git.status
安全分析 sec.* 前綴
外部服務 <服務 name>.* 前綴(例如 notion.search
通訊出站 channels.* 前綴
技能呼叫 skill.invoke

13.3 錯誤抽屜條目

欄位 說明
時間 觸發時間
工具 工具名
狀態碼 / 錯誤類 HTTP 狀態 / 例外類
摘要 單行簡述
詳情 伺服器端原始傳回(最多 4 KB)
重試次數 自動重試已嘗試次數

後端缺席兜底:某後端一時缺席 / 未就緒時,tools/call 過去會傳回「unknown tool」協議錯誤;現對未知工具做兜底處理按需重新連線自愈,後端就緒後自動復原,不再因此整體不可用。