前言
随着大模型技术的不断发展,借助MCP技术快速实现智能体已经成为当前智能体开发的首选方法。作为宇宙第一Agent开发框架,LangChain自然也具备对接MCP服务器的强大功能,本期分享我们一起来学习LangChain接入MCP的完整实现流程。
一、MCP知识点回顾
MCP(全称是Model Context Protocol,模型上下文协议), 是由Claude母公司Anthropic于2024年11月正式提出。

MCP的核心作用是统一了Agent开发过程中大模型调用外部工具的技术实现流程,从而大幅提高了Agent开发效率。在MCP诞生前,大模型通过Function Calling技术与工具函数对接,不同的工具函数有不同的调用方式,要连接这些外部工具开发Agent就必须“每一把锁单独配一把钥匙”,开发工作非常繁琐。

而MCP的诞生,则统一了这些外部工具的调用流程,使得无论什么样的工具都可以借助MCP技术按照统一的流程快速接入到大模型中从而大幅加快Agent开发效率。这就好比现在很多设备都可以使用type-c和电脑连接。

从技术实现角度,我们可以将MCP看成是Function Calling的一种封装,通过server-client架构和一整套开发工具来规范化Function Calling开发流程。程序员可以根据MCP协议开发包含不同工具功能的MCP服务端,并将这些服务端分享出来方便大家接入,减少了重复的开发工作,大大加速了Agent开发效率。
此前笔者曾分享了MCP从入门到精通的多篇文章,在学习本篇分享前大家需简单了解MCP完整技术体系,详细内容可见笔者合集:从0到1学习MCP

二、MCP+LangChain基础调用流程
本期分享我们使用LangChain编写代码调用PlayWright MCP实现浏览器自动化。LangChain调用MCP的原理是将MCP的工具函数直接转换为LangChain的工具函数,然后通过预定义的MCP_Client实现与外部MCP的读写操作。简而言之,我们只需要使用LangChain编写MCP Client 客户端代码并接入外部MCP Server即可。
2.1 环境搭建
1. 首先在我们之前创建的anaconda虚拟环境langchainenv中执行如下命令安装LangChain MCP的相关依赖:
pip install langchain-mcp-adapters

2. 其次要调用PlayWright官方的浏览器工具需要本地安装node.js,详细的安装流程这里不再赘述,大家可参考我的文章不写一行代码! VsCode+Cline+高德地图MCP Server 帮你搞定和女友的出行规划(附原理解析)。
3. 最后编写配置文件,在项目目录下新建serversconfig.json文件,在mcp汇总网站(https://mcp.so/server/playwright-mcp/microsoft?tab=tools)中找到PlayWright的配置并写入serversconfig.json文件中,同时添加MCP通信方式的配置项transport。servers_config.json完整内容如下, 基本原理是通过npx下载PlayWright MCP Server到本地并通过stdio方式与LangChain搭建的MCP Client进行通信。
{
"mcpServers": {
"playwright": {
"command": "npx",
"args": [
"@playwright/mcp@latest"
],
"transport": "stdio"
}
}
}

2.2 使用LangChain实现MCP Client
1.引入相关依赖, LangChain通过MultiServerMCPClient构建MCP Server连接工具。
import asyncio
import json
import logging
from dotenv import load_dotenv
from langchain import hub
from langchain.agents import AgentExecutor, create_openai_tools_agent
from langchain.chat_models import init_chat_model
from langchain_mcp_adapters.client import MultiServerMCPClient
2. 创建环境配置类,保存DeepSeek大模型的apikey等相关配置,通过loadservers函数加载mcp服务器配置文件servers_config.json
─────────────
class Configuration:
def __init__(self) -> None:
load_dotenv()
self.api_key='你注册的deepseek api key'
self.model="deepseek-chat"
@staticmethod
def load_servers(file_path = "servers_config.json"):
with open(file_path, "r", encoding="utf-8") as f:
return json.load(f).get("mcpServers", {})
3. 编写MCP接入智能体, 代码如下:
async def runchatConfiguration()
servers_cfg = Configuration.load_servers()
mcp_client = MultiServerMCPClient(servers_cfg)
tools = await mcp_client.get_tools()
logging.info(f"✅ 已加载 {len(tools)} 个 MCP 工具: {[t.name for t in tools]}")
llm = init_chat_model(
model=cfg.model,
model_provider="deepseek",
api_key=cfg.api_key
)
prompt = hub.pull("hwchase17/openai-tools-agent")
agent = create_openai_tools_agent(llm, tools, prompt)
agent_executor = AgentExecutor(agent=agent, tools=tools, verbose=True)
print("\n🤖 MCP Agent 已启动,输入 'quit' 退出")
while True:
user_input = input("\n你: ").strip()
if user_input.lower() == "quit":
break
try:
result = await agent_executor.ainvoke({"input": user_input})
print(f"\nAI: {result['output']}")
except Exception as exc:
print(f"\n⚠️ 出错: {exc}")
以上代码中的关键部分是LangChain连接MCP Server,首先通过mcpclient = MultiServerMCPClient(serverscfg)创建MCP Server连接对象,其次通过mcpclient.gettools()将连接后的MCP Server中的方法全部转换为LangChain可用的工具函数。我们查看mcpclient.gettools()的源码,可以看到内部调用了load_mcp_tools()函数一键将连接MCP Server的所有工具函数转化为标准的LangChain工具函数,所以可以直接在LangChain环境中进行使用:

转换之后代码具备LangChain智能体构建的三要素模型、提示词和工具函数,可以使用s上篇文章讲过的create_openai_tools_agent和AgentExecutor构建并执行智能体。
4. 编写主函数执行智能体,本期分享使用与上篇相同的案例,要求智能体爬取Copilot官方介绍页并总结相关内容, 提示词为"访问这个网站 https://www.microsoft.com/en-us/microsoft-365/blog/2025/01/16/copilot-is-now-included-in-microsoft-365-personal-and-family/?culture=zh-cn&country=cn 并帮我总结一下这个网站的内容",执行结果如下,可以看到PlayWright MCP自动打开浏览器并导航到相关页面进行爬取分析:



完整代码如下:
"""
多服务器 MCP + LangChain Agent 示例
---------------------------------
1. 读取 .env 中的 LLM_API_KEY / BASE_URL / MODEL
2. 读取 servers_config.json 中的 MCP 服务器信息
3. 启动 MCP 服务器(支持多个)
4. 将所有工具注入 LangChain Agent,由大模型自动选择并调用
"""
import asyncio
import json
import logging
from dotenv import load_dotenv
from langchain import hub
from langchain.agents import AgentExecutor, create_openai_tools_agent
from langchain.chat_models import init_chat_model
from langchain_mcp_adapters.client import MultiServerMCPClient
class Configuration:
def __init__(self) -> None:
load_dotenv()
self.api_key='你注册的DeepSeek API KEY'
self.model="deepseek-chat"
@staticmethod
def load_servers(file_path = "servers_config.json"):
with open(file_path, "r", encoding="utf-8") as f:
return json.load(f).get("mcpServers", {})
async def run_chat_loop():
"""启动 MCP-Agent 聊天循环"""
cfg = Configuration()
servers_cfg = Configuration.load_servers()
mcp_client = MultiServerMCPClient(servers_cfg)
tools = await mcp_client.get_tools()
logging.info(f"✅ 已加载 {len(tools)} 个 MCP 工具: {[t.name for t in tools]}")
llm = init_chat_model(
model=cfg.model,
model_provider="deepseek",
api_key=cfg.api_key
)
prompt = hub.pull("hwchase17/openai-tools-agent")
agent = create_openai_tools_agent(llm, tools, prompt)
agent_executor = AgentExecutor(agent=agent, tools=tools, verbose=True)
print("\n🤖 MCP Agent 已启动,输入 'quit' 退出")
while True:
user_input = input("\n你: ").strip()
if user_input.lower() == "quit":
break
try:
result = await agent_executor.ainvoke({"input": user_input})
print(f"\nAI: {result['output']}")
except Exception as exc:
print(f"\n⚠️ 出错: {exc}")
if __name__ == "__main__":
logging.basicConfig(level=logging.INFO, format="%(asctime)s - %(levelname)s - %(message)s")
asyncio.run(run_chat_loop())
三、总结
本期内容分享了LangChain接入MCP服务端的实现流程,基本原理是LangChain编写MCP客户端并将MCP服务端函数通过load_mcp_tools()转化为LangChain可识别的函数并构建智能体,本期内容通过PlayWright自动爬虫项目演示了LangChain+MCP的基本流程。学习完MCP主题,下期内容笔者将使用LangChain搭建一个RAG知识库系统,大家期待一下吧!