MCP 工具结果的 isError 语义:业务失败与协议错误混用为何让 Agent 误判重试
远程 MCP Server 执行查询工具时,把参数校验失败、业务空结果和传输异常都塞进 isError 或 content 文本,会让客户端与模型无法区分可重试与不可重试。本文拆解 CallToolResult 中 isError 的定位、错误分类混用的失效机制,对比结构化错误码方案,并给出校验点与可观测指标。
共 5 篇文章
远程 MCP Server 执行查询工具时,把参数校验失败、业务空结果和传输异常都塞进 isError 或 content 文本,会让客户端与模型无法区分可重试与不可重试。本文拆解 CallToolResult 中 isError 的定位、错误分类混用的失效机制,对比结构化错误码方案,并给出校验点与可观测指标。
Agent 调用带数值与布尔参数的 MCP 工具时,模型常把 5 写成 "5"、把 true 写成 "true",服务端按 inputSchema 严格校验就会直接拒绝。本文用一个库存查询工具贯穿全文,梳理类型声明、序列化路径、隐式转换歧义与枚举大小写问题,并对比客户端预校验与服务端宽松解析的取舍。
Agent 自动调用写操作工具时,客户端常靠 readOnlyHint、destructiveHint 决定是否弹窗确认。本文拆解这些注解的语义与来源,说明它们由服务端自述、客户端无从验证的信任假设,对比服务端强制鉴权与人工审批,并给出校验方法与可观测指标。
接入多个 MCP Server 的 Agent 为什么越接越笨?本文从工具名、描述与 JSON Schema 被序列化进系统提示并随每轮请求重复计费讲起,分析工具数量增长带来的上下文挤占与选择准确率下降,对比全量注入、检索式筛选与动态发现三种加载策略的延迟与可靠性权衡,并给出可观测指标与适用边界。
围绕 Agent、RAG 与多轮对话中反复出现的长 System Prompt、工具定义和历史前缀,解释 Prefix Caching 如何复用已计算的 KV Cache,分析 vLLM Block Hash、SGLang RadixAttention、缓存淘汰、多级存储及命中率对 TTFT 与吞吐的影响。