GitHub Repo
Dify 社群提出 MCP 型別修補,處理巢狀結構描述將陣列轉成字串
10 月 19 日的 Dify 社群回報指出,特定巢狀 MCP 工具結構描述可能讓合法陣列被轉成字串,導致遠端工具收到錯誤型別。同日已有修補提案與回歸測試,但尚未合併,也未確認正式版本影響範圍。

Dify 社群於 10 月 19 日回報,MCP 工具參數的型別判斷存在巢狀結構處理缺口:當允許字串或陣列的 anyOf 外面再包一層 allOf,合法陣列可能在呼叫前被轉成字串。回報針對自行部署的原始碼版本,明確列出主分支提交 96202aa,並提供結構描述與輸入值,尚不能據此推定所有正式版本都受影響。問題回報
重現案例的 domain 欄位允許單一字串或字串陣列;輸入 ["light", "cover"] 後,轉換器卻將參數判定為 string,且未保留 input_schema。後續呼叫流程因此送出 Python 串列的字串表示,而非 JSON 陣列。這表示即使上游產生符合原始結構描述的參數,中介轉換仍可能改變工具實際收到的資料型別。重現細節
這個案例涉及組合條件的語意。JSON Schema 官方文件指出,anyOf 代表符合至少一個子條件,allOf 則要求全部成立。因此,修正不能只搜尋深層是否出現多種型別,也必須處理條件交集;否則遇到原本接受多種型別、再被其他條件限縮的描述,仍可能誤判。JSON Schema 組合規則
同日提出的修補 PR #44322 改為遍歷巢狀組合結構,並對 allOf 約束計算交集,在結構允許多種 JSON 型別時保留原值。作者表示,回歸測試涵蓋兩種分支順序、純量與陣列,以及交集限縮成單一型別的情況,相關單元測試共 72 項通過;這些是提案作者提供的驗證結果,尚非正式發布保證。修補提案
對整合 MCP 工具的工程師而言,此案提示驗證應延伸到遠端收到的參數。可依自身工具結構檢查巢狀組合與陣列輸入,並比對傳送前後的 JSON 型別。截至查核時,提案仍待程式碼擁有者審查;後續應追蹤合併狀態、發布版本及更多結構組合的測試,不能將現有修補視為完整支援所有 JSON Schema 情況。