快速结论:当 LlamaIndex 的 llama-index-tools-mcp 集成包与 MCP Python SDK 2.x 一起安装时,会因 MCP 2.0 移除了 mcp.shared.session 模块而无法导入,并报出 ModuleNotFoundError: No module named 'mcp.shared.session'。优先排查方向是确认 MCP SDK 版本并保持 mcp<2,或将集成包升级到已适配 2.x 的版本。
适用环境:GitHub Issue 已确认的环境为 python:3.12-slim 容器,LlamaIndex 集成包 llama-index-tools-mcp,MCP Python SDK 2.0.0。
最快修复方案:暂无确认的一步修复方案。在 Issue 合并修复 PR(#22535)之前,最稳妥的做法是保持 MCP SDK 版本在 mcp>=1.24.0,<2 范围内。若必须使用 MCP 2.x,可尝试将代码中的 from mcp.shared.session import ProgressFnT 改为 from mcp.client.session import ProgressFnT,但需注意后续还有其他破坏性更改未处理。
注意事项:MCP 2.0 的迁移涉及多处 API 变更,mcp.server.fastmcp 模块在 2.0 中已不存在,仅修复第一个 ImportError 无法让整个包正常工作。此外,还存在静默行为变化(如 resourceTemplates → resource_templates),不会报错但会导致功能回退。
问题场景
用户在使用 LlamaIndex 的 llama-index-tools-mcp 集成包时,尝试将 MCP Python SDK 升级到 2.0.0(2026-07-28 发布)。由于集成包当前将 MCP SDK 锁定在 1.x 版本线(mcp>=1.24.0,<2),当强制安装 MCP 2.0.0 时,包无法正常导入。
报错原文
File ".../llama_index/tools/mcp/client.py", line 21, in <module>
from mcp.shared.session import ProgressFnT
ModuleNotFoundError: No module named 'mcp.shared.session'
原因分析
MCP Python SDK 2.0 进行了大规模重构,移除了多个旧模块和 API。可能原因:
mcp.shared.session子模块在 2.0 中被移除,ProgressFnT类型改为从mcp.client.session导入(已验证)。- HTTP 客户端库从
httpx迁移到httpx2,影响create_mcp_http_client和streamable_http_client的签名与返回类型。 - 高级服务端 API 从
mcp.server.fastmcp.FastMCP改为mcp.server.mcpserver.MCPServer(已验证),且新 API 的__init__不再接受host/port参数。 - 字段命名从 camelCase 改为 snake_case(如
inputSchema→input_schema、mimeType→mime_type),以及resourceTemplates→resource_templates。其中resourceTemplates的变更不会抛出异常,但会导致静态资源模板功能静默失效。
环境排查
- 确认 MCP SDK 版本:运行环境中应检查
mcp包当前实际安装的版本号(是否为 2.x)。 - 确认
llama-index-tools-mcp集成包是否已更新到包含修复 PR(#22535)的版本。 - 若需使用 MCP 2.x,检查依赖下限:MCP 2.0 要求
pydantic>=2.12、anyio>=4.9、typing-extensions>=4.13,并新增opentelemetry-api和mcp-types依赖。 - 确认 HTTP 客户端库:MCP 2.0 不再传递依赖
httpx,改用httpx2>=2.5.0。
解决步骤
- 首选方案(临时):保持 MCP SDK 版本在
mcp>=1.24.0,<2范围内,等待集成包发布包含修复的版本。 - 次选方案(需注意风险):若必须使用 MCP 2.0,可优先尝试以下修改以解除导入阻塞:将
llama_index/tools/mcp/client.py第 21 行的导入从from mcp.shared.session import ProgressFnT改为from mcp.client.session import ProgressFnT。 - 完整迁移需处理以下变更(参考 PR #22535 的方案):将
utils.py中的from mcp.server.fastmcp import FastMCP, Context替换为mcp.server.mcpserver.MCPServer,并适配其__init__参数;将ClientSession的read_timeout_seconds参数从timedelta改为float(秒);处理streamable_http_client返回 2 元组而非 3 元组的变更;将字段读取从 camelCase 改为 snake_case(input_schema、mime_type、resource_templates);处理Context.log(...)第二个参数名从message改为data的变更。 - 若将上述改动集中到一个内部
_compat兼容模块中,可让同一份代码同时兼容 MCP 1.x 和 2.x(PR #22535 的做法)。
验证方法
在应用修改后,执行以下验证:
- 在 Python 环境中尝试
import llama_index.tools.mcp,确认不再抛出ModuleNotFoundError。 - 运行 LlamaIndex 集成包的测试套件(参考 Issue 中
tests/test_client.py),确认在 MCP 1.x 和 2.x 下均全部通过(PR #22535 验证了 51/51 测试在两种版本下均通过)。 - 重点验证
McpToolSpec.fetch_resources()是否正确返回资源模板(避免遇到resourceTemplates→resource_templates的静默回归问题)。
参考来源
run-llama/llama_index #22515:llama-index-tools-mcp: support mcp 2.x (Python SDK): pin blocks mcp 2.0.0
AI 工具推荐
想把多个 AI 模型放在一个入口?
GamsGo AI 集成 ChatGPT、DeepSeek、Gemini、Claude、Midjourney、Veo 等常用模型,适合写作、绘图、视频和日常 AI 工作流。
推广链接:通过此链接购买,我可能获得佣金,不影响你的价格。
这个方案解决了吗?
可以继续搜索完整报错,或查看同一工具的其他排查指南。

![[SYCL] Misc. bug: test-backend-ops -b SYCL0 assertion: ggml_sycl_op_concat dst: q4_0](https://www.chat-gpts.plus/wp-content/uploads/2026/08/26936-11981dc2-768x403.jpg)
