MCP協議2025年重大更新:結構化數據驗證與Elicitation機制保障AI Agent工具調用安全

MCP 協議 2025-06-18 核心更新深度解析:讓 AI Agent 調用工具終于能“上保險”了
想讓你的 AI Agent 安全地調用外部工具、自動處理復雜工作流?MCP(Model Context Protocol)協議剛發布的 2025-06-18 版本,直接解決了兩個長期困擾開發者的核心痛點:工具調用的數據安全和交互流程的智能靈活性。
這次更新不是小修小補,而是兩個足以改變 Agent 開發范式的重磅特性:結構化數據驗證(Structured Data Validation) 和 Elicitation 機制。前者為 Agent 調用工具提供了首個商用級的安全與可靠性保障,后者則讓工具調用不再是“單向指令”,而變成了能主動詢問、動態調整的智能對話。
本文將結合實際開發場景,拆解這兩個特性如何落地,以及它們對構建更安全、更智能的 AI Agent 應用意味著什么。
一、結構化數據驗證:給 Agent 的“手”套上安全手套
痛點回顧
在舊版 MCP 協議中,Agent 調用工具時,傳入的參數本質上是一段自由格式的 JSON。這意味著什么?意味著工具的實現方需要自己做大量的參數校驗、類型檢查、邊界條件處理。一旦 Agent 因為模型幻覺或上下文理解偏差,傳入了一個格式錯誤的參數(比如把字符串傳給了期望整數的字段),輕則工具報錯,重則可能觸發意外操作(比如刪除了不該刪的數據)。
對于企業級應用或涉及敏感操作(如金融交易、數據刪除)的場景,這種不確定性是致命的。
2025-06-18 的解決方案:JSON Schema 強校驗
新版本在工具定義(Tool Definition)中,正式引入了基于 JSON Schema 的結構化數據驗證層。這意味著,工具的輸入參數現在有了一個明確的、可機器驗證的“合同”。
核心變化:
工具的 inputSchema 字段現在必須遵循標準的 JSON Schema 規范。MCP 協議層(Server 端)會在工具實際執行前,對 Agent 傳入的參數進行嚴格校驗。校驗不通過,直接拒絕執行并返回明確的錯誤信息,而不是讓錯誤數據流入業務邏輯。
實際代碼示例:
假設你正在開發一個“數據庫查詢”工具。在舊版協議中,你可能這樣定義:
{
"name": "query_database",
"description": "查詢指定表的數據",
"parameters": {
"table_name": "string",
"limit": "integer"
}
}Agent 可能傳入 { "table_name": "users", "limit": "abc" },你需要在代碼里額外判斷 limit 是不是數字。
在新版 MCP 中,你可以(也應該)這樣定義:
{
"name": "query_database",
"description": "查詢指定表的數據",
"inputSchema": {
"type": "object",
"properties": {
"table_name": {
"type": "string",
"enum": ["users", "orders", "products"],
"description": "要查詢的表名,僅限白名單"
},
"limit": {
"type": "integer",
"minimum": 1,
"maximum": 1000,
"default": 100
}
},
"required": ["table_name"]
}
}現在,如果 Agent 傳入 { "table_name": "sys_config", "limit": -5 },MCP Server 會直接攔截并返回:
{
"error": "validation_failed",
"details": [
"table_name: 'sys_config' is not one of ['users', 'orders', 'products']",
"limit: -5 is less than the minimum of 1"

]
}商業價值與開發意義:
- 安全性躍升:對于涉及資金、權限、數據刪除的操作,你可以通過 Schema 定義嚴格的枚舉、范圍、格式(如郵箱、UUID),從協議層杜絕非法輸入。
- 開發效率提升:工具開發者無需再寫冗長的參數校驗代碼,可以將精力集中在核心業務邏輯上。
- 調試更友好:結構化的錯誤信息讓 Agent 和開發者都能快速定位問題,而不是面對一個模糊的“參數錯誤”。
下一步行動:檢查你現有的 MCP 工具定義,將 parameters 遷移為符合 JSON Schema 規范的 inputSchema,特別是那些涉及外部 API 調用或敏感操作的工具。
二、Elicitation 機制:讓工具從“被動執行”變為“主動詢問”
痛點回顧
傳統的工具調用是“一次性”的:Agent 發出請求,工具執行,返回結果。但如果工具在執行過程中發現信息不足呢?例如,一個“預訂會議室”工具,Agent 只傳了時間,但沒傳會議室容量和設備要求。在舊模式下,工具只能返回一個錯誤,然后 Agent 需要重新發起一次完整的調用,用戶體驗割裂,且多輪對話的上下文管理非常復雜。
2025-06-18 的解決方案:Elicitation(啟發/引出)
Elicitation 是一個全新的交互范式。它允許工具在執行過程中,主動向 Agent 或用戶發起詢問,請求補充信息或確認,然后基于用戶的回復繼續執行。這本質上是將工具從一個無狀態的函數,升級為了一個可以參與多輪對話的智能體。
核心流程:
- Agent 調用工具,傳入初始參數。
- 工具在執行中發現需要更多信息,返回一個
elicitation類型的響應,其中包含一個結構化的“問題”(例如,一個表單或選項列表)。 - Agent 將這個問題呈現給用戶(或根據上下文自動決策)。
- 用戶的回答被包裝成一個
elicitation_response發送給工具。 - 工具收到回答后,繼續執行剩余邏輯,返回最終結果。
實際場景示例:
一個“智能文件處理”工具,Agent 請求:“幫我整理這個PDF文件。” 工具在解析后,發現文件包含敏感信息,它可以通過 Elicitation 詢問:
{
"type": "elicitation",
"id": "elicit_123",
"prompt": "檢測到文件包含身份證號碼和銀行卡號。請選擇處理方式:",
"options": [
{ "id": "redact", "label": "自動脫敏后保存" },
{ "id": "encrypt", "label": "加密保存原文件" },
{ "id": "delete", "label": "直接刪除,不保存" }
]
}用戶選擇“自動脫敏后保存”,工具執行脫敏操作并返回結果。整個過程在一次工具調用中完成,體驗流暢。
商業價值與開發意義:
- 用戶體驗革命:工具調用從“命令-執行”變成了“對話-協作”,特別適合需要人工確認、多條件選擇的復雜場景(如客服工單處理、審批流、數據清洗)。
- 降低開發復雜度:開發者無需在 Agent 端編排復雜的多輪對話邏輯,工具自身就能引導用戶完成信息收集。
- 提升 Agent 智能:Agent 可以更專注于高層意圖理解,將需要細化和確認的細節“委托”給工具通過 Elicitation 處理,分工更清晰。
下一步行動:在你的下一個 Agent 項目中,嘗試為一個需要用戶確認或選擇的工具(如“發送郵件”、“提交表單”)設計 Elicitation 流程。使用新版 MCP SDK 中的 elicitation 響應類型,測試完整的交互閉環。
總結與行動指南
MCP 2025-06-18 更新的這兩個特性,一個解決了“安全底線”,一個打開了“智能上限”。
- 結構化數據驗證 是 Agent 應用走向生產環境、企業級部署的基石。沒有它,你的 Agent 就像在裸奔。
- Elicitation 機制 則是提升 Agent 應用復雜度和用戶體驗的杠桿。它讓工具不再是黑盒,而是可以參與智能交互的伙伴。
你的下一步行動:
- 立即升級:將你的 MCP SDK 或 Server 實現更新到支持 2025-06-18 規范的版本。
- 審計現有工具:為所有工具添加嚴格的
inputSchema,尤其是涉及 I/O 和敏感數據的工具。 - 重構一個場景:選擇一個你現有的、需要多輪交互的 Agent 流程(如“報告生成”、“數據查詢”),嘗試用 Elicitation 機制將其重構為單次工具調用,體驗交互流暢度的提升。
協議的進化,就是為了讓開發者能構建更強大、更可靠的應用。現在,工具已經就位,就看你怎么用了。