一个MCP工具如果只有{"type": "string"}而没有描述字段,模型只能凭空猜测一个不存在的契约。前两篇文章已经论证过:schema描述是承重结构,工具描述是运行时策略而非文档。这篇回答一个更底层的工程问题——缺描述时,具体会发生什么机械性故障?不是抽象推演,而是我在真实MCP服务器上用mcp-probe追踪到的四种失效模式。
关键发现:缺描述不会只产生一种故障,而是产生一个四级故障层级,每一级都离表面症状更远。
![]()
失效模式一:选择失效(工具隐形)
![]()
最便宜的故障,也是没人注意的那种:工具根本不会被调用。
Claude审视工具列表时,把name + description + inputSchema.properties[].description当作一个决策包来读。单靠名字几乎不够。fetch_data可能是"从数据库取"、"从API取"、"从缓存取"或"读文件"。没有描述来消歧,智能体就把这个工具当成噪声候选,选了别的。
我现在面前就有一个服务器,其中一个工具叫lookup。工具没描述,schema的单个字符串参数也没描述。大概一周里让Claude尝试了30次用它,模型只调了两次,两次都错了。另外28次,模型去了别处——通常是选了个描述更清晰的工具,即使那个工具匹配度更差。
你想要的信号——"模型本来会用我的工具但不知道它是干嘛的"——是完全隐形的。工具不报error,不慢,只是不出现在trace里,因为trace只记录实际发生的调用。
失效模式二:参数形态失效(模型选了,schema拒了)
如果模型确实选了这个工具,下一步是填参数。没有参数描述,它只能从参数名和类型编造参数形态。
![]()
来自@modelcontextprotocol/server-filesystem的真实案例。服务器有个read_file工具,schema声明一个必填属性:path: { type: "string" }——这是文档化的行为,参数确实没描述。看实际使用时发生什么:
模型必须决定:绝对路径还是相对路径?相对于什么——工作区、服务器当前目录、用户主目录?
必须决定:路径要在允许的根目录内,还是磁盘任意位置?
必须决定:~/foo.txt是否允许,还是需要展开?
必须决定:正斜杠和反斜杠在它认为的运行平台上是否重要。
特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.