Langchain 0.3 是否能直接调用 MCP Server
·
简单来说:不能。 Langchain 0.3 不能直接调用 MCP Server,中间的 MCP Client 是必不可少的。
这背后的原因是关注点分离 (Separation of Concerns) 和 协议抽象 (Protocol Abstraction),这是构建健壮软件的关键设计原则。
让我为你详细解释这个架构:
📐 项目架构图
为了更清晰地理解,我们可以把它们的角色看作一次国际商务会谈:
+---------------------+ +---------------------+ +---------------------+
| Langchain Agent |----->| MCP Client |----->| MCP Server |
| (项目经理 - 不懂外语) | | (你的专属翻译 - 懂外语) | | (外国技术专家 - 只说外语) |
+---------------------+ +---------------------+ +---------------------+
| | |
"我需要当前时间" "好的,我来帮你问" "收到请求,执行..."
(下达业务指令) (将指令翻译成协议语言) (执行具体技术操作)
(JSON-RPC)
角色分工和必要性
1. Langchain Agent (项目经理)
- 它的职责:理解用户的意图,并决定做什么 (What)。例如,当用户说“把报告存起来”,Agent 决定需要调用一个名为
write_file的工具。 - 它的局限:它只关心业务逻辑,不关心技术细节。它不知道什么是 JSON-RPC,不知道如何建立网络连接,也不知道如何格式化协议请求。它只会说:“嘿,工具,干活!”
2. MCP Server (外国技术专家)
- 它的职责:提供具体的技术能力 (How)。它拥有
read_file,calculate等实际干活的函数。 - 它的局限:它是一个独立的服务,只通过一种特定的语言——MCP 协议 (基于 JSON-RPC 2.0)——进行交流。你必须按照它的规则(协议)来跟它说话,否则它听不懂。
3. MCP Client (你的专属翻译) - 关键的中间层
现在,关键问题来了:项目经理 (Langchain) 不懂外语 (MCP 协议),而技术专家 (MCP Server) 只说外语。这时,你就需要一个翻译,这就是 MCP Client 的角色。
- 它的职责:
- 协议封装:将 Langchain 的简单函数调用(例如
wrapper(path="a.txt"))转换成符合 MCP 规范的、复杂的 JSON-RPC 请求。 - 通信处理:负责与 MCP Server 建立连接、发送请求、接收响应、处理网络错误等所有通信细节。
- 结果解析:将从 Server 返回的、符合 MCP 协议的 JSON-RPC 响应,解析成 Langchain 能理解的简单字符串或 Python 对象。
- 协议封装:将 Langchain 的简单函数调用(例如
为什么不能直接调用?
如果 Langchain 直接调用 MCP Server,会发生什么?
这意味着 Langchain 的每一个 Tool 都需要内置一个完整的网络客户端。write_file 工具需要自己写 requests.post,read_file 工具也需要自己写。这会导致:
- 代码大量重复:每个工具都需要重复编写网络通信和协议处理的代码。
- 职责混乱:工具本身应该只关心自己的业务逻辑(如读写文件),现在却被迫要处理网络问题,违反了单一职责原则。
- 极难维护:如果 MCP 协议未来有微小的更新,你需要修改所有的工具,而不是只更新
MCP Client这一个地方。 - 无法扩展:如果将来你想换成另一个协议(比如 gRPC),你将不得不重写整个项目。而现在,你只需要换掉
MCP Client即可。
总结
在你的项目中:
MCP Server是能力的提供者。Langchain是需求的决策者。MCP Client是连接两者的桥梁和翻译官。
这个三层架构是现代软件工程的最佳实践,它确保了每一层都只做自己最擅长的事,使得整个系统清晰、健壮、易于维护和扩展。所以,MCP Client 不仅是必要的,更是整个架构设计的精髓所在。
更多推荐


所有评论(0)