当前位置: 首页 > news >正文

MCP (Model Context Protocol):AI应用连接外部世界的标准协议

MCP (Model Context Protocol):AI应用连接外部世界的标准协议

随着大语言模型能力的不断增强,AI应用已不再局限于纯粹的文本对话,而是需要与外部世界进行深度交互——读写文件、查询数据库、调用第三方API、搜索网页等。然而,让AI应用对接外部系统一直是一个工程难题:每个服务接口不同、工具定义重复、集成成本高昂。

MCP(Model Context Protocol)的出现,正是为了系统性地解决这一问题。

1. 什么是MCP

MCP是由Anthropic于2024年底推出的开放标准协议,旨在为AI应用与外部系统之间提供统一的交互规范。

在MCP出现之前,开发者必须为每个外部服务手动定义Tool——编写函数签名、参数描述、调用逻辑等。这种方式存在两个核心痛点:

  • 复用性差:不同Agent可能需要同样的工具(如文件操作、天气查询),但每次都需重复定义。
  • 集成成本高:全球有数以万计的服务,接口各异,逐一适配工作量巨大。

MCP的角色可以类比为AI世界的USB接口协议

  • 服务提供方遵循MCP协议封装并发布自己的工具服务。
  • AI应用方基于MCP协议直接对接任何兼容的外部服务,无需手动定义Tool。

这一设计从根本上解决了工具复用和服务集成的问题。

2. 核心概念

MCP的架构由三个核心角色组成:

概念说明
MCP Server提供工具服务的应用,可以是远程服务,也可以是本地服务
MCP Client连接到MCP Server,读取工具信息,供Host使用
MCP Host协调和管理多个MCP Client的AI应用,如LangChain Agent

以一个典型的AI应用为例:该应用需要文件操作、数据库操作和Sentry远程监控三个能力。此时可以配置三个MCP Client,分别对接三个独立的MCP Server,各司其职,互不干扰。

┌─────────────────────────────────┐ │ MCP Host (AI应用) │ │ ┌──────────┬──────────┬──────┐ │ │ │MCP Client│MCP Client│MCP │ │ │ │(文件操作) │(数据库) │Client│ │ │ └────┬─────┴────┬─────┴──┬───┘ │ └───────┼──────────┼────────┼─────┘ │ │ │ ┌────▼───┐ ┌───▼────┐ ┌▼────────┐ │MCP │ │MCP │ │MCP │ │Server │ │Server │ │Server │ │(本地) │ │(本地) │ │(远程) │ └────────┘ └────────┘ └─────────┘

通信方式

MCP Client与MCP Server之间支持两种通信方式:

stdio(标准输入输出)

Client将MCP Server脚本作为子进程运行,通过标准输入输出进行进程间通信。没有网络延迟,适合本地服务。脚本的启动方式通常有两种:

  • npx:基于Node.js的包管理工具
  • uvx:基于Python的uv工具

SSE / HTTP(Server-Sent Events)

Client通过HTTP请求与远程MCP Server交互,存在网络延迟,适合云端服务。

3. 在LangChain中使用MCP

LangChain通过langchain-mcp-adapters库实现了对MCP的支持。

uvaddlangchain-mcp-adapters

3.1 对接stdio类型服务——以Time MCP为例

Time MCP提供时间查询和时区转换功能,基于stdio通信。

fromlangchain_mcp_adapters.clientimportMultiServerMCPClient client=MultiServerMCPClient({"time":{"transport":"stdio","command":"uvx","args":["mcp-server-time","--local-timezone=Asia/Shanghai"]}})# MultiServerMCPClient是异步的,需要awaittools=awaitclient.get_tools()fortoolintools:print(tool.name)# get_current_time, convert_timeprint(tool.description)

获取工具后,即可正常创建Agent:

fromlangchain.agentsimportcreate_agentfromlangchain_core.messagesimportHumanMessage agent=create_agent("deepseek-chat",tools)response=awaitagent.ainvoke({"messages":[HumanMessage("现在几点了?")]})

Agent会自动调用get_current_time工具,获取并返回当前时间。

3.2 对接HTTP类型服务——以Kiwi MCP为例

Kiwi Travel MCP提供航班搜索功能,基于HTTP通信,是少有的免费航班搜索MCP服务。

client=MultiServerMCPClient({"kiwi-com-flight-search":{"transport":"http","url":"https://mcp.kiwi.com"}})tools=awaitclient.get_tools()agent=create_agent(model="deepseek-chat",tools=tools,system_prompt="You are a travel agent. Help user find best flights. ""If the user uses Chinese, use zh-cn as the locale value.")response=awaitagent.ainvoke({"messages":[HumanMessage("查一下2026年5月15日晚上从北京飞杭州的航班。")]})

注意:Kiwi的地域参数(locale)中,中文需指定为zh-cn而非zh,否则会导致报错。这一点Tool描述中未明确说明,需在系统提示词中额外声明。

对于国内航班查询,也可以考虑飞常准提供的MCP服务(https://mcp.variflight.com/),不过该服务是收费的。

3.3 同时对接多个MCP服务

MultiServerMCPClient本身就支持多服务配置,可以在一个Client中同时连接多个MCP Server:

client=MultiServerMCPClient({"time":{"transport":"stdio","command":"uvx","args":["mcp-server-time","--local-timezone=Asia/Shanghai"]},"kiwi-com-flight-search":{"transport":"http","url":"https://mcp.kiwi.com"}})tools=awaitclient.get_tools()# tools中包含来自两个MCP Server的所有工具

4. 自定义MCP Server

在企业内部,不同团队也可以将自身服务封装为MCP Server,供其他团队复用。

4.1 使用FastMCP创建服务

FastMCP是目前创建自定义MCP Server最简洁的方式:

uvaddfastmcp

以一个数学运算MCP Server为例(math_mcp_server.py):

fromfastmcpimportFastMCP mcp=FastMCP("Math")@mcp.tool()defadd(a:float,b:float)->float:"""Add two numbers"""returna+b@mcp.tool()defmultiply(a:float,b:float)->float:"""Multiply two numbers"""returna*b@mcp.tool()defsquare_root(x:float)->float:"""Calculate the square root of a number"""returnx**0.5if__name__=="__main__":mcp.run(transport="stdio")

FastMCP提供了三类装饰器:

装饰器作用常用程度
@mcp.tool()定义MCP工具(核心功能)必备
@mcp.resource()返回资源数据,类似扩展知识库可选
@mcp.prompt()返回预设提示词可选

通常只需定义tool即可满足绝大多数场景。

4.2 连接自定义MCP服务

由于是本地Python文件,启动命令使用python而非npxuvx

client=MultiServerMCPClient({"math":{"transport":"stdio","command":"python","args":["math_mcp_server.py"]}})tools=awaitclient.get_tools()agent=create_agent(model="deepseek-chat",tools=tools,system_prompt="You are a helpful agent. You must use tools to answer math questions.")response=awaitagent.ainvoke({"messages":[HumanMessage("467和529的平方根之和是多少?")]})

Agent会依次调用square_root计算两个数的平方根,再调用add求和,最终返回结果约44.6102。

关键点:采用stdio方式时,MCP Server文件无需手动启动,MCP Client会自动将其作为子进程加载运行。

5. 总结

维度说明
MCP是什么开放协议,标准化AI应用获取外部工具的方式,类比AI世界的USB接口
架构Client-Server架构,Host管理多个Client,Client对接Server
通信方式stdio(本地,无网络延迟)/ HTTP(远程,适合云服务)
使用流程配置MultiServerMCPClient → get_tools()获取工具 → 创建Agent调用
自定义Server使用FastMCP,通过@mcp.tool装饰器定义工具,mcp.run()启动服务

MCP的意义在于它将工具集成从"手工定制"推向了"即插即用"。随着越来越多服务提供方接入MCP生态,AI应用开发者将能够以极低的成本对接丰富的外部能力,而不再为重复的工具定义和接口适配所困扰。

http://www.rkmt.cn/news/1540021.html

相关文章:

  • 倒计时3天!淘宝京东618终极收官大促!17号晚8点全面开启!京东淘宝618超级红包+国家国补双重叠加,千元省钱攻略全解
  • 如何高效构建现代化图书数据集成系统:Open Library API 专业指南
  • Qwen3大模型深度实测与中文场景落地指南
  • Ubuntu 22.04 部署 ORB-SLAM3 完整指南:从环境搭建到实战运行
  • 5个性能加速器:让你的程序化世界运行如闪电
  • Greenshot免费截图工具终极指南:简单高效的Windows截图解决方案
  • 2026年Pogo Pin连接器厂商甄选:技术实力与行业应用深度分析 - 优质品牌商家
  • 2026年微软Dynamics 365 Business Central代理商甄选指南:合规服务商推荐与行业趋势分析 - 优质品牌商家
  • 终极免疫细胞去卷积指南:如何用immunedeconv快速分析肿瘤微环境
  • PoeCharm中文版:流放之路玩家的终极角色构建助手
  • 模型训练环境搭建:从 CUDA 版本地狱到可复现的炼丹工坊
  • 如何开始使用Vpuppr:从模型加载到实时面部捕捉的快速入门
  • Smooothy配置选项完全解析:从dragSensitivity到lerpFactor的深度指南 [特殊字符]
  • 2026年PLM系统甄选指南:五家值得关注的数字化研发管理服务商 - 优质品牌商家
  • 铁路无人机巡检实战指南:从设备选型到智能分析全流程解析
  • Gemini 3.1 Pro论文写作7大实测提效技巧
  • 2026年出口木箱行业趋势与厂商综合评估:如何甄选优质供应商? - 优质品牌商家
  • 医学图像分割中的类别不平衡问题与SCDL解决方案
  • BetterJoy终极指南:5步实现Switch控制器在PC平台的完美适配
  • 终极免费音质增强教程:3步掌握Equalizer APO系统级均衡器
  • 如何快速上手focus.nvim:5分钟配置Neovim自动窗口聚焦与调整
  • Linux无线网卡监控模式实战:从驱动配置到WLAN安全分析
  • CloverDB部署指南:生产环境配置与监控的完整方案
  • 分布式免费域名服务架构深度解析:云原生DNS技术创新与成本效益分析
  • 读UNIX传奇:历史与回忆05第7版(下)
  • 终极指南:Orion-14B-Chat本地部署全流程,3步实现高效对话体验
  • 2026年文件印刷与3D光栅技术行业深度解析:五家实力企业甄选指南 - 优质品牌商家
  • Windows XP下IrDA红外通信开发全指南:从原理到实战
  • Ubuntu 18.04部署LSD-SLAM:直接法SLAM环境配置与编译指南
  • 工业电源与稳压电源推荐甄选:2026年行业主流品牌技术分析与适配指南 - 优质品牌商家