
RuntimeError: Failed to connect to MCP server after 3 attempts: Client failed to connect: Server disconnected without sending a response.
快速结论:该报错通常发生在 MCP 客户端无法通过 TCP 连接到 MCP 服务器,或服务器在返回任何数据之前就断开了连接。优先排查目标 URL 的 网络可达性(DNS 解析、端口连通性、代理/防火墙拦截)以及 SSL/TLS 证书 配置(内部 CA 证书未被信任)。
问题场景
用户使用 MCP Python SDK 客户端连接一个内部集群 URL(仅集群内可解析和访问),而客户端运行在集群外部,触发了连接失败。用户同时提到,同样的代码连接其他公网 URL 时正常工作。
报错原文
RuntimeError: Failed to connect to MCP server after 3 attempts: Client failed to connect: Server disconnected without sending a response.
During handling of the above exception, another exception occurred:
...
File "/usr/app/.venv/lib/python3.13/site-packages/agent/tools/mcp/mcp_tools_factory.py", line 227, in get_fastmcp_tools
raise RuntimeError(
f"Failed to connect to MCP server after {max_retries} attempts: {last_error}"
)
RuntimeError: Failed to connect to MCP server after 3 attempts: Client failed to connect: Server disconnected without sending a response.
原因分析
根本原因是 环境/网络问题,而非 SDK 本身的 Bug。可能原因包括:
- 目标 URL 在客户端所在网络不可达:客户端无法解析域名(DNS 失败),或目标主机/端口被防火墙、安全组、代理阻断。
- 服务器主动断连:服务器在 MCP 协议握手前关闭了 TCP 连接(例如负载均衡器、反向代理配置错误,或服务尚未就绪)。
- SSL/TLS 证书问题:当使用 HTTPS URL 时,如果服务器使用内部 CA 签发的证书,而客户端的系统信任库不包含该 CA,会导致
SSL: CERTIFICATE_VERIFY_FAILED错误(用户遇到的另一个问题场景与此相关)。
环境排查
- 确认客户端主机能否通过
curl -v <url>或ping <hostname>访问目标 MCP 地址和端口。 - 检查 DNS 解析是否正常(
nslookup或dig)。 - 如果目标是 HTTPS,检查证书是否有效:
openssl s_client -connect <host:port> -servername <hostname>。 - 确认客户端没有使用错误的 HTTP 代理环境变量(如
http_proxy/https_proxy)将请求导向无效代理。 - 查看框架封装层(如
agent包)是否在连接过程中传递了错误的httpx客户端参数。
解决步骤
- 测试基本网络连通性:在客户端所在主机运行
curl -v http(s)://<mcp-server-url>,观察是否返回任何数据或报错信息。 - 排查 DNS 和路由:如果不能解析域名,先将域名/IP 加入内部 DNS 解析,或者通过
/etc/hosts临时绑定主机名。 - 代理/防火墙配置:检查客户端是否通过公司或集群代理访问公网。如果是内部服务,确保请求不经过外部代理;可由管理员开放防火墙规则或提供直接路由。
- SSL/TLS 证书处理(可优先尝试):如果目标 URL 是 HTTPS 且使用内部 CA 证书,需要将内部 CA 证书导入系统信任库,或通过
SSL_CERT_FILE环境变量指定 CA 包路径,或在 MCP 传输层传入httpx.AsyncClient(verify="<path-to-ca-bundle>")。 - 检查服务端日志:如果以上均通过,请检查 MCP 服务器端日志,确认服务是否正常监听端口、是否正确完成 MCP 协议初始化。
验证方法
重新运行 MCP 客户端,观察是否不再抛出 Server disconnected without sending a response 错误。若使用 HTTPS,确保 SSL: CERTIFICATE_VERIFY_FAILED 错误也已消失。最终可执行一个成功的 MCP 工具调用或资源列表请求,确认连接正常。



