MCP 官方Tier 1 SDK下载量正逼近每月 5 亿次,downloads a month,而且使用量还在加速攀升:来自 ChatGPT 用户的 MCP 工具调用在2026 年全年增长了 98 倍,仅 8 月就翻了一倍多。

Model Context Protocol(MCP)是将智能体连接到工具的最流行方式。今年 7 月,该协议迎来了自发布以来最大的一次重写。我们改造了 LangChain 中的 MCP 支持,以匹配新规范和其背后日益增长的需求。
有三件事发生了变化:
- MCP 支持移入主包。它现在位于
langchain.mcp,而不再需要单独langchain-mcp-adapters安装。 - 它构建在FastMCP之上。传输、认证、连接管理和协议协商都由底层的客户端提供,因此旧规范和新规范上的服务器都能正常工作。
- 现在支持通过中断进行 elicitation 以及客户端缓存。新规范将服务器在调用中途的 elicitation 变成了可重试的一轮,我们将其呈现为 LangGraph 中断。它还让工具列表可缓存,因此工具目录不再需要在每次运行时重新获取。
新的无状态规范
历史上(在旧规范下),每次 MCP 调用都要经过一个围绕会话构建的协议。通过 MCP 调用工具过去意味着先打开一个会话。客户端和服务器握手,服务器返回一个会话 ID,之后每个请求都必须携带它,这就把该客户端固定在了发放该 ID 的那一个服务器实例上。

以任何规模运行远程服务器都意味着粘性路由和共享会话存储。
这一切在新 MCP 规范中都改变了,它启用了无状态核心。MCP 团队将无状态核心描述为开发者呼声最高的功能之一,他们希望服务器有更好的可靠性和可扩展性。在新规范中,没有任何东西需要固定。重新部署不再会杀死活跃会话,因为根本不存在会话。

这开启了两件事,而两者现在都已进入langchain.mcp:
- 缓存:服务器可以声明其工具列表保持新鲜多长时间,这样客户端就不再每次运行都重新获取它。
- Elicitation:工具可以暂停下来向调用方询问一些事情,比如确认删除或提供模型遗漏的参数,而无需在等待时保持连接打开。
阅读 MCP 团队的公告以了解更多关于此次修订的信息
一等 MCP 支持
我们将 MCP 支持移入langchain因此它对智能体而言是一等公民。它随以下mcp额外项一起安装:
pip install"langchain[mcp]"从旧包迁移过来,MultiServerMCPClient会合并为单个MCPAdapter类。阅读迁移指南以获取关于如何采用的更详细说明。基本用法如下所示:
fromdeepagentsimportcreate_deep_agentfromlangchain.mcpimportMCPAdapterasyncdefmain():asyncwithMCPAdapter("https://example.com/mcp")asadapter:agent = create_deep_agent(model="google_genai:gemini-3.8-flash",tools=awaitadapter.list_tools())returnawaitagent.ainvoke({"messages": [{"role":"user","content":"..."}]})这些工具是普通的 LangChain 工具,因此它们可以去任何工具能去的地方:create_deep_agent,create_agent,或你自己接线的图。
基于 FastMCP 构建
FastMCP在传输层之上提供了清晰的抽象:连接,认证,缓存,以及协议协商。它的客户端接口可直接供你使用。
MCP 现在有两个截然不同的协议"时代",这意味着客户端需要能够与两种截然不同的协议进行协商。FastMCP 会按连接执行此操作:它尝试新协议,并对尚未升级的服务器回退到握手。无论哪种方式,你的代码都无需更改。FastMCP 4 中的新特性有详细信息。
用以下方式为每个服务器提供其自己的连接ClientGroup,每个服务器都保留其支持的最佳时代,以及其自己的凭据:
fromlangchain.mcpimportMCPAdapterfromdeepagentsimportcreate_deep_agentfromfastmcpimportClientGroupgroup = ClientGroup({# 尚未升级,因此固定握手时代。认证为 OAuth 2.1。"billing": Client("https://billing.internal/mcp",mode="legacy",auth="oauth"),# 协商其理解的最新时代,使用 bearer token。"docs": Client("https://docs.internal/mcp",mode="auto",auth=docs_token),})asyncwithMCPAdapter(group)asadapter:# billing_search 和 docs_search,因此两者保持区分。tools =awaitadapter.list_tools()agent = create_deep_agent(model="google_genai:gemini-3.8-flash",tools=tools)工具名称会以其来源服务器为前缀,因此每个服务器上的一个search工具会分别以billing_search和docs_search的形式到达。如果你的服务器不需要彼此区分,一个普通的配置字典就足够了;连接指南涵盖了何时使用哪一种。
客户端的其余部分可直接使用:
- 认证:bearer token、完整的 OAuth 2.1 流程、机器对机器凭证、CIMD,或任何
httpx2.Auth - 传输方式:可流式 HTTP、stdio 和内存内,从目标推断,或为 headers、SSL 以及共享
httpx2连接池 - 缓存:列表结果在服务器的 TTL 允许范围内保持有效
- 进度与日志:来自长时间运行调用的通知
FastMCP 还让你可以轻松构建和测试你自己的服务器。一个FastMCP实例就是有效的适配器目标,无需子进程、无需套接字,因此智能体可以在进程内针对真实的 MCP 服务器运行。
通过中断实现 Elicitation
Elicitation 是 MCP 的人在回路支持:一个工具在未先向调用方询问某些信息的情况下无法完成。无状态规范将其转变为客户端附带答案重试的普通请求,这让我们可以用你已经在使用的中断原语来支持它。运行暂停,审查智能体工作的任何人给出答案,然后运行恢复:
paused =awaitagent.ainvoke({"messages":[ {"role":"user","content":"Book a table for 4."}]}, config)question = paused["__interrupt__"][0].value.requests[0]answer = {"action":"accept","content": {"date":"2026-09-14"}}result =awaitagent.ainvoke(Command(resume={"responses": {question["key"]: answer}}), config)除了一个 checkpointer 之外无需任何设置,这样暂停的运行就有地方等待。elicitation 文档涵盖了拒绝问题,以及将破坏性工具置于同一审批流程之后。
客户端侧缓存
每次智能体运行都从发现存在哪些工具开始,这意味着在模型看到任何内容之前,需要一次往返请求来发现工具。服务器现在可以说明其工具列表保持新鲜的时间,因此目录可以从缓存中提供。cache=True为你提供一个遵循这些提示的内存缓存:
fromfastmcpimportClientfromlangchain.mcpimportMCPAdapterclient = Client("https://billing.internal/mcp",cache=True)asyncwithMCPAdapter(client)asadapter:# 一旦配置了缓存,"use" 就是默认值:在服务器的 TTL 有效期内提供缓存目录,# 并存储它实际获取的内容。tools =awaitadapter.list_tools(cache_mode="use")agent = create_deep_agent(model="google_genai:gemini-3.8-flash",tools=tools)缓存属于客户端,因此每个调用方一个客户端可以避免目录交叉。参见响应缓存了解 TTL、共享存储以及其他缓存模式。
快速开始
uv pip install"langchain[mcp]"该命名空间需要langchain[mcp]>=1.4.0且处于 beta 阶段,因此 API 仍可能变化。我们今天发布 Python 支持,TypeScript 支持即将推出。
- LangChain 中的 MCP:快速开始、连接、认证、elicitation 和工具结果
- 从以下版本迁移
langchain-mcp-adapters:每个公开功能都映射到其替代方案 - FastMCP 客户端文档:底层的客户端
- MCP
2026-07-28规范