简介
MCP(Model Context Protocol)是一款标准化工具调用协议,解决大模型Agent工具接入碎片化问题。不再需要为每个搜索工具单独写工具定义、参数解析、返回值格式化逻辑,通过MCP客户端直接对接远端MCP服务,一键获取工具描述并交由Agent调用。
本文基于 langchain-mcp-adapters,实现Agent接入 Tavily MCP联网搜索,代码可直接运行,适合RAG、智能Agent项目集成联网实时信息。
环境:Python3.10+,LangChain生态,异步架构
一、依赖安装
pip install langchain-mcp-adapters
二、完整源码
import asyncio
from langchain_mcp_adapters.client import MultiServerMCPClient
def tools(func):
ts = asyncio.run(func())
return ts
@tools
async def get_tools():
client = MultiServerMCPClient(
{
"tavily_search": {
"url": f"https://mcp.tavily.com/mcp/?tavilyApiKey={'你的TAVILY_SEARCH_KEY'}",
"transport": "streamable_http",
}
},
)
return await client.get_tools()
if __name__ == "__main__":
# 测试Tavily联网搜索工具
from deepagents import create_deep_agent
from langchain_openai import ChatOpenAI
model = ChatOpenAI(
api_key = "你的api_key"
model="你的模型",
base_url="你的模型地址",
temperature=0.1,
agent = create_deep_agent(
tools=get_tools,
model=model,
debug=False
)
import asyncio
result = asyncio.run(agent.ainvoke({
"messages": [{"role": "user", "content": "今天是2026年10月13日,深圳天气怎么样"}]
}))
print(result["messages"][-1].content)
三、代码核心解析
1. MultiServerMCPClient
MultiServerMCPClient 是langchain-mcp-adapters提供的多MCP服务客户端,支持同时挂载多个MCP服务(搜索、文件读写、数据库等)。
tavily_search:自定义服务名称,用于区分多个MCP服务url:Tavily官方MCP HTTP端点,携带API Key鉴权transport="streamable_http":传输协议,Tavily MCP使用streamable http
await client.get_tools():自动从远端MCP服务拉取工具schema、名称、描述、入参定义 ,无需手动写StructuredTool,这是MCP最大优势。
2. Agent构造逻辑
create_deep_agent 为自定义Agent工厂函数:
tools=get_tools:传入异步函数,Agent内部会异步加载MCP工具model=get_llm():注入大模型实例(OpenAI/通义千问/DeepSeek等均可)debug=False:关闭调试日志,生产环境使用
3. 异步调用
agent.ainvoke 异步执行Agent推理;asyncio.run 启动异步事件循环,提交用户提问。 示例问题带有时间,用来验证Agent调用联网搜索获取实时数据,而不是依赖模型静态知识库。
四、关键知识点
- MCP协议价值 传统LangChain工具开发:编写工具函数 + 手写工具描述 + 定义Pydantic参数模型。 MCP模式:远端MCP服务自描述工具,客户端自动同步工具定义,新增工具只需要新增MCP服务配置,Agent代码无需改动。
- transport传输方式
streamable_http:远端HTTP MCP服务(Tavily官方MCP)stdio:本地进程MCP服务(本地脚本、本地工具)
- 鉴权 Tavily MCP直接在URL参数携带
tavilyApiKey,服务端校验密钥后提供搜索能力。生产环境建议把密钥放在环境变量,不要硬编码到URL字符串。
五、常见踩坑
- 异步坑:get_tools是async函数 不能直接
tools=get_tools()传入,部分Agent框架支持传入callable,内部自动await加载工具。如果你的Agent不支持,需要提前await获取工具列表。 - 网络问题 访问
mcp.tavily.com网络不通会导致拉取工具超时,需要检查网络连通性。 - API Key额度耗尽 Tavily免费额度有限,调用报错401/403优先检查密钥正确性和剩余搜索次数。
- 大模型不触发工具调用 提示词、Agent的prompt模板需要支持工具调用,确保模型具备Function Calling能力。
六、扩展方向
- 同时挂载多个MCP服务:例如Tavily搜索 + 文件MCP + 数据库查询MCP,全部交给同一个Agent。
- 替换transport为stdio,对接本地自建MCP服务。
- 增加缓存层,相同搜索query减少Tavily调用,节约API费用。
- 增加工具调用回调,记录搜索日志、耗时统计。
七、总结
通过 langchain-mcp-adapters + Tavily MCP,可以极简方式给LangChain Agent接入联网搜索能力。MCP标准化工具协议极大降低Agent多工具集成成本,是当前大模型Agent工程落地的主流方案之一。Agent不再绑定固定工具,工具能力由MCP服务动态提供,架构更加灵活。
八、写在最后
平台内已上线**《大模型入门精品课》+ 简历和面试指导** (对于小白和想转行小伙伴而已,如果没有简历和面试辅导是很难通过面试的),课程内容包括:
-
纯干货一个月学完,没有冗余的理论,项目都是大型企业项目,非demo。
-
覆盖 RAG、智能体、Lora微调实战项目、模型压缩(剪枝、量化、蒸馏)。
-
感兴趣的小伙伴可以前往主页了解!课程地址: https://edu.csdn.net/course/detail/41422