MCP協(xié)議2025年6月更新解讀:結(jié)構(gòu)化數(shù)據(jù)驗(yàn)證與動(dòng)態(tài)協(xié)商,Server插件開(kāi)發(fā)邁入生產(chǎn)級(jí)時(shí)代

MCP 2025-06-18更新解讀:結(jié)構(gòu)化數(shù)據(jù)驗(yàn)證+動(dòng)態(tài)協(xié)商,Server插件開(kāi)發(fā)進(jìn)入"生產(chǎn)級(jí)"時(shí)代
想用MCP搭一個(gè)能跑在生產(chǎn)環(huán)境的AI Agent工具?以前總踩坑:Server返回個(gè)字段名拼錯(cuò),Agent直接報(bào)錯(cuò)崩了;想讓Agent在調(diào)用工具前確認(rèn)下用戶意圖,協(xié)議層根本沒(méi)這機(jī)制;多個(gè)插件版本混用,兼容性問(wèn)題能把人逼瘋。
6月18日MCP協(xié)議正式更新,版本號(hào)跳到一個(gè)關(guān)鍵節(jié)點(diǎn)——首個(gè)支持動(dòng)態(tài)上下文協(xié)商的生產(chǎn)級(jí)版本。這次更新解決了三個(gè)核心痛點(diǎn):數(shù)據(jù)格式不可靠、Agent行為不可控、版本兼容性混亂。
下面拆解這三個(gè)特性,結(jié)合實(shí)戰(zhàn)場(chǎng)景講清楚怎么用、能帶來(lái)什么價(jià)值。
一、結(jié)構(gòu)化數(shù)據(jù)驗(yàn)證:Server返回什么,協(xié)議說(shuō)了算
痛點(diǎn)
以前MCP Server調(diào)用工具后返回?cái)?shù)據(jù),格式全靠"君子協(xié)定"。比如你寫(xiě)一個(gè)查詢訂單狀態(tài)的Tool,返回JSON:
{
"order_id": "12345",
"status": "shipped",
"tracking_no": "SF9876543210"
}結(jié)果Server開(kāi)發(fā)者手滑寫(xiě)成了tracking_number,Client端解析直接掛掉。生產(chǎn)環(huán)境里這種錯(cuò)誤排查起來(lái)極其痛苦。
新方案
本次更新引入了JSON Schema級(jí)別的結(jié)構(gòu)化數(shù)據(jù)驗(yàn)證。Server在注冊(cè)Tool時(shí),必須聲明返回值的schema:
{
"name": "get_order_status",
"description": "查詢訂單物流狀態(tài)",
"inputSchema": {
"type": "object",
"properties": {
"order_id": { "type": "string", "pattern": "^[0-9]+$" }
},
"required": ["order_id"]
},
"outputSchema": {
"type": "object",
"properties": {
"order_id": { "type": "string" },
"status": { "type": "string", "enum": ["pending", "shipped", "delivered", "returned"] },
"tracking_no": { "type": "string", "pattern": "^[A-Z]{2}[0-9]{10}$" }
},
"required": ["order_id", "status"]
}
}Client收到Server響應(yīng)后,會(huì)自動(dòng)校驗(yàn)返回?cái)?shù)據(jù)是否符合outputSchema。不符合直接拋出結(jié)構(gòu)化錯(cuò)誤,而不是讓Agent拿到臟數(shù)據(jù)繼續(xù)推理。
實(shí)戰(zhàn)價(jià)值
- 開(kāi)發(fā)階段:寫(xiě)完Server立刻能驗(yàn)證返回格式,不用等聯(lián)調(diào)才發(fā)現(xiàn)問(wèn)題
- 運(yùn)行階段:生產(chǎn)環(huán)境異常數(shù)據(jù)被攔截,Agent不會(huì)基于錯(cuò)誤信息做出錯(cuò)誤決策
- 協(xié)作階段:多人開(kāi)發(fā)不同Server時(shí),schema就是活文檔,減少溝通成本
二、Elicitation機(jī)制:Agent終于能"問(wèn)人"了
痛點(diǎn)
傳統(tǒng)MCP工具調(diào)用是單向的:Agent決定調(diào)什么Tool,Server執(zhí)行并返回。但很多場(chǎng)景需要人機(jī)交互確認(rèn)。比如Agent要?jiǎng)h除用戶文件、發(fā)起支付、修改數(shù)據(jù)庫(kù)——這些操作風(fēng)險(xiǎn)高,應(yīng)該讓用戶確認(rèn)。
以前的做法是Client端自己加邏輯攔截,但不同Client實(shí)現(xiàn)不一致,有的根本不攔截。
新方案
Elicitation(引導(dǎo)式交互)機(jī)制讓Server可以在工具執(zhí)行過(guò)程中主動(dòng)發(fā)起交互請(qǐng)求。協(xié)議流程變成:
Agent → 調(diào)用Tool → Server判斷需要確認(rèn) → 返回elicitation請(qǐng)求 → Client展示給用戶 → 用戶響應(yīng) → Server繼續(xù)執(zhí)行Server返回的elicitation結(jié)構(gòu):
{
"type": "elicitation",
"message": "即將刪除3個(gè)文件,確認(rèn)繼續(xù)?",
"options": [
{ "label": "確認(rèn)刪除", "value": "confirm" },
{ "label": "取消", "value": "cancel" }
],
"context": {
"files": ["report.pdf", "data.csv", "temp.log"]
}
}實(shí)戰(zhàn)場(chǎng)景
場(chǎng)景1:數(shù)據(jù)庫(kù)寫(xiě)操作Server

# Server端偽代碼
@mcp.tool()
async def delete_records(table: str, condition: str):
count = await db.count(table, condition)
if count > 10:
# 觸發(fā)elicitation
return Elicitation(
message=f"將刪除 {count} 條記錄,是否繼續(xù)?",
options=["確認(rèn)", "取消"],
context={"table": table, "condition": condition, "count": count}
)
await db.delete(table, condition)
return {"deleted": count}場(chǎng)景2:支付類Agent
用戶說(shuō)"幫我把這個(gè)月所有訂閱都取消",Agent調(diào)用取消訂閱工具時(shí),Server可以逐個(gè)發(fā)起elicitation確認(rèn),避免誤操作。
核心價(jià)值
- 安全性:高風(fēng)險(xiǎn)操作必須經(jīng)過(guò)用戶確認(rèn),協(xié)議層保障而非Client自行實(shí)現(xiàn)
- 靈活性:Server可以根據(jù)業(yè)務(wù)邏輯動(dòng)態(tài)決定是否需要確認(rèn)(比如金額>1000才確認(rèn))
- 用戶體驗(yàn):統(tǒng)一的交互協(xié)議,不同Client展示風(fēng)格可以不同,但交互邏輯一致
三、版本協(xié)商策略:多插件共存不再打架
痛點(diǎn)
MCP生態(tài)快速發(fā)展,不同Server可能基于不同協(xié)議版本開(kāi)發(fā)。Client同時(shí)連接多個(gè)Server時(shí),版本不兼容問(wèn)題頻發(fā)。比如Server A用的是舊版資源引用方式,Server B用了新版,Client不知道該用哪種方式解析。
新方案
本次更新引入了嚴(yán)格的版本協(xié)商機(jī)制:
- 握手階段聲明能力:Client和Server在連接建立時(shí)交換支持的協(xié)議版本和特性列表
- 特性級(jí)協(xié)商:不是簡(jiǎn)單的版本號(hào)匹配,而是按特性粒度協(xié)商(比如"我支持elicitation但不支持streaming")
- 降級(jí)策略:高版本Client連接低版本Server時(shí),自動(dòng)降級(jí)到Server支持的特性集合
// Client發(fā)起握手
{
"protocolVersion": "2025-06-18",
"capabilities": {
"elicitation": true,
"structuredOutput": true,
"streaming": false
}
}
// Server響應(yīng)
{
"protocolVersion": "2025-06-18",
"capabilities": {
"elicitation": true,
"structuredOutput": true,
"streaming": true
},
"negotiated": {
"elicitation": true,
"structuredOutput": true,
"streaming": false // 取交集
}
}實(shí)戰(zhàn)價(jià)值
- 生態(tài)兼容:老Server不用立刻升級(jí),新Client可以兼容老版本
- 漸進(jìn)式升級(jí):開(kāi)發(fā)者可以逐步為Server添加新特性,不需要一次性重構(gòu)
- 生產(chǎn)穩(wěn)定性:避免因?yàn)槟硞€(gè)插件升級(jí)導(dǎo)致整個(gè)Agent系統(tǒng)崩潰
這次更新對(duì)MCP/A2A生態(tài)意味著什么?
短期看:Server/插件開(kāi)發(fā)者有了更清晰的開(kāi)發(fā)規(guī)范,生產(chǎn)級(jí)應(yīng)用的門檻降低了。結(jié)構(gòu)化數(shù)據(jù)驗(yàn)證讓工具調(diào)用更可靠,elicitation讓高風(fēng)險(xiǎn)操作有了協(xié)議級(jí)的安全保障。
中期看:版本協(xié)商機(jī)制為MCP生態(tài)的快速增長(zhǎng)鋪平了道路。更多Server上線后,兼容性問(wèn)題會(huì)成為最大障礙,這次更新提前解決了這個(gè)問(wèn)題。
長(zhǎng)期看:MCP正在從"能用"走向"好用"。當(dāng)協(xié)議層面解決了數(shù)據(jù)驗(yàn)證、人機(jī)交互、版本兼容這三個(gè)問(wèn)題,開(kāi)發(fā)者可以把精力集中在業(yè)務(wù)邏輯上,而不是反復(fù)處理協(xié)議層的邊界情況。
對(duì)A2A(Agent-to-Agent)協(xié)議也有借鑒意義——Agent之間通信同樣需要結(jié)構(gòu)化數(shù)據(jù)校驗(yàn)和交互協(xié)商機(jī)制,MCP這次更新可能成為A2A協(xié)議演進(jìn)的參考。
下一步行動(dòng)
- 如果你是Server開(kāi)發(fā)者:現(xiàn)在就給你的Tool加上
outputSchema,用MCP Inspector測(cè)試驗(yàn)證邏輯是否生效 - 如果你是Client開(kāi)發(fā)者:升級(jí)SDK到最新版本,測(cè)試elicitation交互流程,確保UI層能正確渲染Server的交互請(qǐng)求
- 如果你在做AI自動(dòng)化產(chǎn)品:評(píng)估哪些業(yè)務(wù)場(chǎng)景需要elicitation機(jī)制,優(yōu)先在高風(fēng)險(xiǎn)操作(支付、刪除、修改)中接入
想看具體代碼實(shí)現(xiàn)?www.nhjb.com.cn(www.nhjb.com.cn)的MCP開(kāi)發(fā)文檔已經(jīng)同步更新,里面有完整的Server端和Client端示例,直接跑起來(lái)試試。