新闻详情

新闻详情

首页 / 资讯中心 / 详情

SEP-1303 解读:将 MCP 工具输入校验错误作为 Tool Execution Error 返回,让模型自主纠错

发布时间:2026/9/25 8:08:42来源:尧图网络
SEP-1303 解读:将 MCP 工具输入校验错误作为 Tool Execution Error 返回,让模型自主纠错
人工智能AI Agent工具调用【免费下载链接】specificationSpecification and documentation for the Model Context Protocol项目地址https://gitcode.com/gh_mirrors/specification2/specification点击查看免费下载导读本文深度解读 Model Context ProtocolMCP官方提案 SEP-1303当工具的输入参数无法通过业务校验如日期格式错误、值超出范围时服务端应将其作为isError: true的 Tool Execution Error 返回而非 JSON-RPC 协议级错误。这一变更的核心价值在于错误信息会进入大语言模型LLM的上下文窗口使模型能够基于错误反馈自动修正参数并重试从而显著提升任务完成率、降低人工干预。读完本文你将理解两类错误机制的边界划分、SEP-1303 的具体修改内容以及如何在 MCP Server 实现中落地这一行为。背景为什么校验错误必须对模型可见MCP 中tools/call的错误报告存在两种机制Protocol Errors协议错误以标准 JSON-RPC 错误响应返回如-32602 Invalid params由 MCP Client 在应用层捕获。Tool Execution Errors工具执行错误放在tools/call的 result 中以isError: true标记随正常 JSON-RPC 响应一起返回。关键区别在于只有 Tool Execution Errors 会被转发回模型。LLM 依靠上下文窗口中的错误反馈来学习并纠正下一次调用协议错误被 Client 拦截后模型根本看不到错误内容只能盲目重试反复失败。SEP-1303 正是为解决这一信息断层而提出其最终目标Status: Final2025-08-05 创建Issue #1303是把工具参数校验失败统一归入 Tool Execution Errors让错误信息进入模型的上下文窗口。问题场景一个航班订票工具的校验困境提案给出了一个极具代表性的例子航班订票工具使用zod对出发日期做业务校验departureDate: z.string() .regex(/^\d{2}\/\d{2}\/\d{4}$/, date must be in dd/mm/yyyy format) .superRefine((dateStr, ctx) { const date parseDateFr(dateStr); if (date.getTime() Date.now()) { ctx.addIssue({ code: z.ZodIssueCode.custom, message: Dates must be in the future. Current date is formatDateFr(new Date()), }); } return true; }) .describe(Departure date in dd/mm/yyyy format);这里存在一个根本性的表达能力缺口工具的 inputSchemaJSON Schema只能描述正则层面的语法约束无法表达日期必须晚于今天这类运行时业务规则。因此即便模型给出的日期语法完全合法、通过了 JSON Schema 校验仍然可能在语义上不合法例如过去日期。当这种业务校验失败被当作 Protocol Error 返回时会产生连锁问题模型收不到日期被拒的原因模型反复提交同样类型的错误参数提案举例某些客户端在用户只提供日/月或相对日期时会一致地发送 2024 年日期并在毫无反馈的情况下把同一个tools/call重试 3 次本可以自我纠正的任务最终失败用户被迫手动介入体验受损。提案的收益让模型看得见错误将输入校验错误转为 Tool Execution Error 后收益是直接的更高的任务完成率模型能在无需人工干预的情况下自我纠正校验错误更好的用户体验失败减少、任务完成更快充分利用模型能力现代 LLM 擅长理解错误消息并据此调整行为减少 API 调用模型在第一次错误反馈后就自我修正显著降低盲目重试次数。规范变更消除两类错误的边界歧义当前行为SEP 提出时的规范状态SEP-1303 指出当时的 工具错误处理规范 给出的指引存在歧义Invalid arguments 应作为 Protocol ErrorInvalid input data 应作为 Tool Execution Error。从 2025-06-18 版规范docs/specification/2025-06-18/server/tools.mdx可以看到当时 Protocol Errors 明确包含Invalid arguments而 Tool Execution Errors 包含Invalid input data。这两个类别语义重叠、边界模糊导致不同实现各自为政有价值的错误反馈常常丢失。提案的修改SEP-1303 提出两项明确修改从 Protocol Errors 中移除 invalid arguments 类别所有工具参数校验失败统一归入 Tool Execution Errors即将invalid arguments与invalid input data合并为新的input validation errors类别。提案给出的规范文本更新如下## Error Handling Tools use two error reporting mechanisms: 1. **Protocol Errors**: Standard JSON-RPC errors for issues like: - Unknown tools - Server errors 2. **Tool Execution Errors**: Reported in tool results with isError: true: - API failures - Input validation errors - Business logic errors行为对比协议错误 vs 工具执行错误修改前Protocol Error模型不可见// Model submits past date request: { ... method: tools/call, params: { name: book_flight, arguments: { departureDate: 12/12/2024 // Past date } } } // Server returns Protocol Error response: { ... error: { code: -32602, message: Invalid params } } // Model retries blindly with another past date // This cycle repeats until failure修改后Tool Execution Error模型可见// Model submits past date request: { ... method: tools/call, params: { name: book_flight, arguments: { departureDate: 12/12/2024 // Past date } } } // Server returns Tool Execution Error (visible to model) response: { ... result: { content: [ { type: text, text: Dates must be in the future. Current date is 08/08/2025 } ], isError: true } } // Model understands the error and corrects itself request: { method: tools/call, params: { name: book_flight, arguments: { departureDate: 12/12/2025 // Future date } } }前后对比清晰地展示了核心差异修改后模型看到的是Dates must be in the future. Current date is 08/08/2025这条可操作的、语义化的错误消息而非一条冷冰冰的-32602 Invalid params从而能够一步到位地修正为正确日期。规范落地从 2025-06-18 到 2026-07-28 的演进验证SEP-1303 的修改最终被纳入后续正式规范。在 2026-07-28 版工具规范 中错误处理章节已按 SEP 精神重写Protocol Errors被明确限定为模型不太可能自行修复的、请求结构本身的问题未知工具Unknown tool畸形请求不满足 CallToolRequest schema 的请求服务器错误。 其返回形式仍是标准 JSON-RPC 错误例如-32602 Unknown tool: invalid_tool_name。Tool Execution Errors被明确界定为包含模型可用来自我纠正并重试的可操作反馈API 失败输入校验错误如日期格式错误、值超出范围——即 SEP-1303 新增合并的input validation errors类别业务逻辑错误。 返回形式为result中携带isError: true如{ jsonrpc: 2.0, id: 4, result: { resultType: complete, content: [ { type: text, text: Invalid departure date: must be in the future. Current date is 08/08/2025. } ], isError: true } }同时规范明确了客户端义务的强弱梯度客户端MAY将协议错误提供给模型但成功恢复的可能性较低客户端SHOULD将工具执行错误提供给模型以支持自我纠正。Schema 层面的约束从 schema/2026-07-28/schema.ts 中CallToolResult.isError字段的注释可以看到与 SEP-1303 完全一致的表述工具产生的任何错误都应放在 result 对象内并以isError: true标记而不是作为 MCP 协议级错误响应返回——否则 LLM 将无法看到错误发生并自我纠正而找不到工具服务器不支持工具调用等异常情况才应作为 MCP 错误响应返回。向后兼容性澄清而非破坏SEP-1303 明确声明该变更向后兼容不改变协议结构本身只是澄清既有模糊行为保留所有现有错误类型与格式在不破坏现有实现的前提下改善行为。采用澄清后行为的 Server将为模型提供更好的自我恢复能力同时继续兼容所有现有 Client。实现建议Server 端如何落地结合 SEP 与 安全考量章节 的要求Server 实现者在落地时应注意在工具函数内部捕获业务校验失败将其转换为result.content中的文本描述并设置isError: true错误消息要可操作明确说明失败原因与当前有效条件例如日期必须晚于今天当前日期是 08/08/2025让模型无需猜测即可修正仅对真正属于请求结构的问题未知工具、JSON-RPC 参数畸形才返回协议级错误-32602等服务端必须校验所有工具输入Security Considerations 中 Server 的 MUST 项校验失败走 Tool Execution Error 通道正是这一要求的自然延伸在 HTTP 传输场景下畸形请求如缺少协议字段会以400 Bad Request返回并伴随-32602见 basic/index.mdx这与工具业务校验失败属于完全不同的层级不应混淆。总结SEP-1303 是一个小而关键的规范澄清通过把工具输入校验错误从协议错误迁移到 Tool Execution Error它让 LLM 获得了自我纠错所需的上下文反馈直接改善了 MCP 生态中 Agent 任务的完成率与用户体验。该提案现已落地于 2026-07-28 版规范与 schema 注释中是 MCP Server 开发者应当严格遵循的错误处理基线。赞分享人工智能AI Agent工具调用【免费下载链接】specificationSpecification and documentation for the Model Context Protocol项目地址https://gitcode.com/gh_mirrors/specification2/specification点击查看免费下载相关推荐深入解析 Angular 错误 NG01101Wrong Async Validator Return Type异步校验器返回值类型错误深入解析 Angular 错误 NG01101Wrong Async Validator Return Type异步校验器返回值类型错误 导读 NG011前端Web框架CANN opbase 错误码 EZ0007 全解Invalid_Input_Dtype 输入数据类型校验错误CANN opbase 错误码 EZ0007 全解Invalid_Input_Dtype 输入数据类型校验错误 导读 EZ0007Invalid_Input人工智能算子库CANNAscendFay 数字人框架配置完整指南改对两个文件一次跑通Fay 数字人框架配置完整指南改对两个文件一次跑通 你在 system.conf 里填了 API 密钥重启后数字人还是不回话别急着怀疑密钥本身。先弄清上一篇终极黑苹果游戏性能调优指南告别卡顿拥抱流畅下一篇TrueNAS Middleware API完整参考开发者必备手册创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

Humanizer CollectionHumanizeExtensions 完全指南:把 IEnumerable 变成人类可读的自然语言列表 2026/9/25 8:46:38

Humanizer CollectionHumanizeExtensions 完全指南:把 IEnumerable 变成人类可读的自然语言列表

开发工具 【免费下载链接】Humanizer Humanizer meets all your .NET needs for manipulating and displaying strings, enums, dates, times, timespans, numbers and quantities 项目地址: https://gitcode.com/gh_mirrors/hu/Humanizer 点击查看 免费下载 Human…

阅读更多 →
解决适配375像素宽度667像素高度移动端方法:推荐一款非常好用的px转rem单位的VSCode插件px to rem  rpx (cssrem) 2026/9/25 8:46:31

解决适配375像素宽度667像素高度移动端方法:推荐一款非常好用的px转rem单位的VSCode插件px to rem rpx (cssrem)

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →
Windows系统安装时间怎么查?注册表、PowerShell与文件时间戳 2026/9/25 8:46:24

Windows系统安装时间怎么查?注册表、PowerShell与文件时间戳

“怎么查看Windows系统安装时间”这个问题,我在后台和群里被问过太多次了。网上一搜教程一大把,但至少有一半是错的,最典型的就是拿systeminfo一敲,然后把“系统启动时间”当成安装时间,这俩根本不是一回事。这篇文章我…

阅读更多 →
MySQL 8.0 Windows安装配置全指南:从环境变量到服务启动 2026/9/25 8:46:18

MySQL 8.0 Windows安装配置全指南:从环境变量到服务启动

1. 为什么这次MySQL 8.0安装,我宁愿重装三遍也不跳过这一步你是不是也经历过:点开官网下载页面,看到“mysql-installer-community-8.0.xx.msi”这个文件名,心里一松——有图形界面,总比Linux下编译源码强吧&#xff1f…

阅读更多 →
Redis on Windows 3.2 发布说明深度解读:Windows 移植关键修复与集群故障转移演进 2026/9/25 8:46:18

Redis on Windows 3.2 发布说明深度解读:Windows 移植关键修复与集群故障转移演进

缓存KV存储数据库后端 【免费下载链接】redis Native port of Redis for Windows. Redis is an in-memory database that persists on disk. The data model is key-value, but many different kind of values are supported: Strings, Lists, Sets, Sorted Sets, Hashes, Stre…

阅读更多 →
Kubernetes HPA实战:构建视频业务弹性伸缩与资源治理方案 2026/9/25 8:46:18

Kubernetes HPA实战:构建视频业务弹性伸缩与资源治理方案

“video-use”标题看似简短,实则是我们生产环境里一套完整的 Kubernetes 资源治理方案。当时摆在我们面前的局面很现实:业务流量一天内有多个明显波峰波谷,白天人力高峰和晚间活动高峰交错出现,固定规格的节点池要么在高峰期被打满…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞 ✉