news 2026/6/10 0:04:54

langchian 使用外部MCP工具创建自己的MCP服务

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
langchian 使用外部MCP工具创建自己的MCP服务

普通智能体接入高德MCP

mcp协议官网:https://modelcontextprotocol.info/zh-cn/
关于什么是mcp建议大家看一下MCP官网就可以,首页的描述就非常贴切
“AI应用的USB-C接口” 接口通用,功能强大

接入流程

官网示例:https://docs.langchain.com/oss/python/langchain/mcp

  1. 添加 langchain-mcp-adapters 包来将 MCP 服务中的工具适配成 agent 使用的工具
  2. getTools 方法是异步的

接入代码实现

""" 【简单创建智能体,并将MCP服务工具,注入给智能体】 可参考官方文档地址:https://docs.langchain.com/oss/python/langchain/mcp """importasyncioimportosfromdotenvimportload_dotenvfromlangchain_core.messagesimportHumanMessagefromlangchain_core.toolsimporttoolfrompydanticimportBaseModel,Fieldfromlangchain_mcp_adapters.clientimportMultiServerMCPClientfromlangchain_openaiimportChatOpenAIfromlangchain.agentsimportcreate_agent load_dotenv()# 1. 创建本地工具classAddInputArgs(BaseModel):a:float=Field(description="第一个数字",example=1)b:float=Field(description="第二个数字",example=2)@tool(description="对输入的两个数字执行加法运算",args_schema=AddInputArgs,return_direct=False)defadd(a,b)->float:returna+b# 2. 获取 MCP 工具asyncdefget_mcp_tools():"""异步获取 MCP 工具,这里get_tools是异步的"""mcp_client=MultiServerMCPClient({"amap-maps-streamableHTTP":{"url":"https://mcp.amap.com/mcp?key="+os.getenv("AMAP_KEY"),"transport":"http"},})returnawaitmcp_client.get_tools()# 3. 主异步函数asyncdefmain():# 获取 MCP 工具print("正在获取 MCP 工具...")mcp_tools=awaitget_mcp_tools()# 汇总工具列表total_tools=[add]+mcp_toolsprint(f"✅ 所有工具列表(共{len(total_tools)}个):")fori,toolinenumerate(total_tools,1):print(f"{i}.{tool.name}")# 4. 初始化大模型llm=ChatOpenAI(model="qwen-max-latest",base_url="https://dashscope.aliyuncs.com/compatible-mode/v1",api_key=os.getenv("DASHSCOPE_API_KEY"),streaming=True,)# 5. 创建智能体agent=create_agent(model=llm,tools=total_tools,system_prompt="你是一个智能助手,可以调用高德 MCP 工具来帮助用户完成日常的一些需求")# 6. 调用智能体(使用异步调用!)print("\n🚀 开始调用智能体...")# ✅ 关键修改:使用 ainvoke() 而不是 invoke()result=awaitagent.ainvoke(input={"messages":[HumanMessage(content="我现在在上海市闵行区正矩科技大厦,我的车牌是‘浙AFQ5247’,我想开车导航去人民广场,请你给我规划下路线和时间。因为有禁行时间段!")]})# 7. 完成调用后打印,如果需要实时流式输出,则需要创建 create_react_agent 这里的普通智能体,只能事后打印消息记录print("\n"+"="*60)print("💬 对话记录:")print("="*60)formsginresult['messages']:t=type(msg).__name__ift=='HumanMessage':print(f"👤{msg.content}")elift=='AIMessage':ifhasattr(msg,'tool_calls')andmsg.tool_calls:fortool_callinmsg.tool_calls:args_str=', '.join(f'{k}={v}'fork,vintool_call['args'].items())print(f"🤖 调用{tool_call['name']}({args_str})")elifmsg.content:print(f"🤖{msg.content}")elift=='ToolMessage':print(f"🔧{msg.name}{msg.content[:100]}...")# 只显示前100字符print("="*60)returnresult# 8. 运行主函数if__name__=="__main__":# 使用 asyncio.run() 启动异步主函数asyncio.run(main())

创建自己的MCP服务

通过 FastMCP 创建

官网链接:https://docs.langchain.com/oss/python/langchain/mcp#custom-servers

""" 【自定义MCP】 官网:https://docs.langchain.com/oss/python/langchain/mcp#custom-servers """fromfastmcpimportFastMCP mcp=FastMCP("Math")@mcp.tool()defadd(a:int,b:int)->int:"""Add two numbers"""returna+b@mcp.tool()defmultiply(a:int,b:int)->int:"""Multiply two numbers"""returna*bif__name__=="__main__":mcp.run(transport="streamable-http")

使用mcp时的配置 JSON

{"mcpServers":{"fastmcp":{"url":"http://127.0.0.1:8000/mcp"}}}

本地AI编辑器TARE中配置MCP工具

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/31 17:51:02

python基于vue的家政服务系统设计与实现django flask pycharm

目录基于Python与Vue的家政服务系统设计与实现开发技术路线相关技术介绍核心代码参考示例结论源码lw获取/同行可拿货,招校园代理 :文章底部获取博主联系方式!基于Python与Vue的家政服务系统设计与实现 该系统采用前后端分离架构,前端基于Vue…

作者头像 李华
网站建设 2026/6/10 6:40:16

建议大家都去油管学AI Agent,真的能打破信息差!!

大家都知道 2026 年AI Agent 赛道必火,我现在坚持每天在油管学习2.5个小时,这几位博主是我反复刷真心推荐的!!DeepLearning.AI (Andrew Ng) : 教程全是Agentic Workflow(智能体工作流)的底层逻…

作者头像 李华
网站建设 2026/5/27 2:20:29

python基于vue的旅游公司汽车租赁系统django flask pycharm

目录技术栈与框架选择系统核心功能模块数据库设计优化安全与性能保障特色创新功能开发技术路线相关技术介绍核心代码参考示例结论源码lw获取/同行可拿货,招校园代理 :文章底部获取博主联系方式!技术栈与框架选择 该系统采用Python作为后端开发语言&…

作者头像 李华
网站建设 2026/6/9 21:58:33

python基于vue的流浪动物收养系统志愿者设计与开发django flask pycharm

目录流浪动物收养系统志愿者模块的设计与开发技术架构与功能设计开发工具与部署流程开发技术路线相关技术介绍核心代码参考示例结论源码lw获取/同行可拿货,招校园代理 :文章底部获取博主联系方式!流浪动物收养系统志愿者模块的设计与开发 该系统基于Pyt…

作者头像 李华
网站建设 2026/6/10 12:53:05

如何运用北斗GNSS位移监测提升变形监测效率?

本文将分析北斗GNSS位移监测技术及其在变形监测中的应用。具体来说,单北斗形变监测一体机作为核心设备,其技术原理和应用前景将是重点讨论的内容。同时,文章将着重探讨北斗GNSS在桥梁安全监测和地质灾害监测中的独特优势,以及如何…

作者头像 李华
网站建设 2026/6/10 12:54:20

基于单片机多功能电子闹钟设计

**单片机设计介绍,基于单片机多功能电子闹钟设计 文章目录一 概要二、功能设计设计思路三、 软件设计原理图五、 程序一 概要 基于单片机多功能电子闹钟设计概要 一、引言 基于单片机多功能电子闹钟设计是一个融合了单片机控制、时间显示、闹钟提醒及其他附加功能…

作者头像 李华