MCP 返回的网页文件不再存成 bin

Claude Code 2.1.295 修复:MCP 工具返回的 CSS、JavaScript 和 XML 会被存成 .bin,而 Read 工具拒绝 .bin。现在使用对应扩展名。字体和图标文件也会得到自己的扩展名。说明没有写所有未知类型都不再使用 .bin。

MCP 返回的网页文件不再存成 bin

MCP 工具明明返回了样式或脚本,Read 却拒绝打开,原因常常是文件被存成了 .bin。Claude Code 2.1.295 写:MCP 工具返回的 CSS、JavaScript 和 XML 会被保存为 .bin,Read 工具拒绝这种文件。修复后使用对应的扩展名。字体和图标文件也会得到自己的扩展名。mcp 返回文件变成 bin 在这三类文本上不应再出现。说明没有写每一种未知 MIME 都不再用 .bin。

作者:CodePass 技术编辑

Read 拒绝的是扩展名,不是内容坏了

低于 2.1.295 时,内容可以是合法的 CSS 或 JS,路径却以 .bin 结尾,Read 直接拒绝。模型会说读不了,或改用 Bash 去 cat。升级后,这三类应落到 .css、.js、.xml 一类扩展名上,说明没有逐个列出映射表。字体和图标「得到自己的扩展名」,没有列出是 .woff 还是 .png。若升级后仍是 .bin,先看类型是不是这句点名的几类。压缩包、专有二进制,说明没承诺改扩展名。

同一版还写:WebSocket MCP 上超过 16 MiB 的消息不再解析,并关闭连接。这是其他传输已经有的上限。文件被存成 .bin 是小文件的扩展名问题,不是 16 MiB。大消息把连接关掉,对的是 WebSocket 上限。小的 CSS 读不了,对的是扩展名。

和「@ 超过 256KB 被丢掉」分开

2.1.292 起,@ 提及的文本超过 256KB 会告知大小并让模型分段读,见 超过 256KB 的 @。那是用户 @ 的文本文件。这里是 MCP 工具返回后落盘的扩展名。两件都表现为「模型说没读到文件」。一个看 @ 和体积,一个看路径是不是 .bin 以及是不是 MCP 写出来的。

修复之后 Read 能打开,不表示内容被校验过。扩展名改对了,文件仍可能是空的或被截断。说明没有写保存前会检查 MIME 和字节是否一致。模型若仍说拒绝读取,看路径后缀。已是 .css 仍被拒绝,就不是这条扩展名修复能解释的,再看权限和 256KB 那条。字体和图标只承诺「有自己的扩展名」,没有承诺 Read 一定把字体当文本打开。图标若是二进制,Read 仍可能拒绝,那是文件类型,不是误存成 .bin。

参考资料