快速结论:此报错发生在 MCP Python SDK 服务器收到包含原始无效 UTF-8 字节的请求时。优先排查服务端版本是否已升级到 v1.27 或更高版本,该版本已修复此问题。
问题场景
当 MCP Python SDK 服务器(如 mcp_server_fetch)通过 stdio 接收来自客户端的 JSON-RPC 请求时,如果请求参数中包含原始的无效 UTF-8 字节(如 b"http://x\xff\xfe"),服务器会崩溃并抛出 anyio.ClosedResourceError。攻击者可以利用此漏洞通过单个恶意请求对任何使用该 SDK 的 MCP 服务器进行拒绝服务攻击。
报错原文
File "...\mcp\server\lowlevel\server.py", line 781, in _handle_request
await message.respond(response)
File "...\mcp\shared\session.py", line 349, in _send_response
await self._write_stream.send(session_message)
File "...\anyio\streams\memory.py", line 218, in send_nowait
raise ClosedResourceError
anyio.ClosedResourceError
原因分析
服务器在处理无效 UTF-8 字节的请求时,json.loads 解析原始字节会失败。但问题并非解析失败本身,而是后续响应写入时,客户端连接已因解析异常而关闭,导致 _write_stream.send() 在写入已关闭的流时抛出 ClosedResourceError。服务器未捕获此异常,进而崩溃。
注意:字符串形式的无效 UTF-8(如 "http://x[0xff][0xfe]")会被正常处理并返回验证错误,不会触发此崩溃。
环境排查
- MCP Python SDK 版本:确认是否低于 v1.27(受影响版本包括 v1.26.0 等)
- Python 版本:已确认在 Python 3.13 上复现
- 操作系统:已在 Windows 11 上复现
解决步骤
- 升级 MCP Python SDK 至 v1.27 或更高版本。该版本已通过 PR #2334 合并了修复,服务器在响应时捕获
ClosedResourceError/BrokenResourceError,并在传输关闭时取消正在处理的操作,而不是直接崩溃。 - 或者使用包含修复的
main分支版本(PR #2306)。该版本还解决了 stdio 非 UTF-8 输入的优雅处理问题。 - 作为临时缓解措施,可考虑在服务器外层添加异常捕获逻辑,捕获
ClosedResourceError后优雅关闭连接。
验证方法
升级后,使用 PoC 脚本重新测试:
python crash_poc.py | python -m mcp_server_fetch
如果服务器不再崩溃,且返回 JSON-RPC 错误响应(如无效参数错误),则修复生效。
参考来源
modelcontextprotocol/python-sdk #2328
AI 工具推荐
想把多个 AI 模型放在一个入口?
GamsGo AI 集成 ChatGPT、DeepSeek、Gemini、Claude、Midjourney、Veo 等常用模型,适合写作、绘图、视频和日常 AI 工作流。
推广链接:通过此链接购买,我可能获得佣金,不影响你的价格。
这个方案解决了吗?
可以继续搜索完整报错,或查看同一工具的其他排查指南。

![组织如何使用AI:来自ChatGPT的证据 [pdf]](https://www.chat-gpts.plus/wp-content/uploads/2026/08/ai_cover_3-382-768x403.jpg)
