
Streamable_ ttp. py shows warning
快速结论:该报错发生在 MCP Python SDK 的 Streamable HTTP 服务器中,当客户端连接在服务正常运行时断开,并且服务器日志级别为 ERROR 时触发。优先排查是否使用了 json_response=False 作为临时规避方案,或升级到包含修复的 SDK 版本。
问题场景
用户使用 MCP Python SDK (1.13.1 版本) 运行 Streamable HTTP 服务器(基于 examples/servers/simple-streamablehttp-stateless/server.py 示例)时,遇到警告。错误发生在服务器已正常运行后,客户端出现连接断开的情况下。
报错原文
2025-08-22 20:39:59,254 - mcp.server.streamable_http - ERROR - Error in message router
Traceback (most recent call last):
File "xx\.venv\Lib\site-packages\mcp\server\streamable_http.py", line 831, in message_router
async for session_message in write_stream_reader:
File xx\.venv\Lib\site-packages\anyio\abc\_streams.py", line 41, in __anext__
return await self.receive()
^^^^^^^^^^^^^^^^^^^^
File "xx\.venv\Lib\site-packages\anyio\streams\memory.py", line 111, in receive
return self.receive_nowait()
^^^^^^^^^^^^^^^^^^^^^
File "xx\.venv\Lib\site-packages\anyio\streams\memory.py", line 93, in receive_nowait
raise ClosedResourceError
anyio.ClosedResourceError
原因分析
可能是版本 1.12.0 的 mcp/server/streamable_http_manager.py 文件引入了 await http_transport.terminate() 代码(位于行 194),导致在会话已经终止后,消息路由器仍然尝试从已关闭的流中读取数据,从而抛出 ClosedResourceError。该错误在日志中被记录为 ERROR 级别。
环境排查
- 确认 MCP Python SDK 版本(已知受影响的版本包括 1.12.0、1.13.1)。
- 检查
json_response参数的设置值。 - 确认日志级别是否被设置为 ERROR 或更低(如 INFO、DEBUG),影响报错可见性。
解决步骤
- 临时规避方案:如果无法立即升级 SDK,可尝试将服务器的
json_response参数设置为False(json_response=False),这是社区确认可用的workaround。 - 升级修复版本:该问题已在后续版本由 PR #1384 修复。修复方式是将消息路由器对
ClosedResourceError的处理从 ERROR 级别降级为 DEBUG 级别日志。建议升级到包含该修复的最新版本。 - 确认重复 Issue:此问题与 #1363 重复,可参考该 Issue 了解更详细的排查过程。
注意:不要在未确认修复版本内容的情况下,自行删除或注释 await http_transport.terminate() 代码,这可能导致其他副作用。
验证方法
修复后,当客户端正常断开连接时,日志中不再出现 ERROR 级别的 ClosedResourceError 堆栈跟踪信息。可以使用 DEBUG 级别日志来确认相关事件是否被正确记录。

![[程序员] 让 ChatGPT review Claude 写的代码,它挑了 35 条,没一条是错的](https://www.chat-gpts.plus/wp-content/uploads/2026/06/ai_cover_5-783-768x403.jpg)

