MCP全方位扫盲

简介: MCP(Model Context Protocol)是由Anthropic提出的协议,旨在标准化大模型与外部数据源和工具的通信方式。其核心架构包括MCP Client(客户端)和MCP Server(服务端),通过标准化接口实现解耦,支持不同LLM无缝调用工具。相比传统方法,MCP简化了Prompt工程,减少定制代码,提升复用性。实际场景中,如天气查询或支付处理,MCP可智能调用对应工具,优化用户体验。MCP的核心价值在于标准化通信、统一工具描述及动态兼容性,成为大模型与外部服务的智能桥梁。

了解MCP之前,我们先来回顾一下AI Agent,需要具备什么样的能力,达到什么样的智能程度,才可以称为一个Agent。

AI Agent概念

AI Agent 是能主动解决问题的智能程序,核心在于 感知→决策→行动→学习 的闭环。未来它会像水电一样渗透到所有数字场景中,成为每个人的“智能伙伴”。

image.png

上图可简单划分为 Agent = LLM + 规划技能 + 记忆 + 工具使用,其中 LLM 扮演了 Agent 的“大脑”,在这个 系统中提供推理、规划等能力。过多关于AI Agent概念就不过多介绍,读者可以关注公众号之前的文章。

MCP详细介绍

MCP来源

2024年11月底 Anthropic(Claude提供商)提出了MCP协议,并在Claude 客户端支持了MCP。

MCP协议,全称为“Model Context Protocol”,提供了一种将LLM连接到不同数据源(resource)和工具(tool)的标准化方法,旨在统一大模型与外部数据源和工具之间的沟通通信协议。

image.png

MCP 大概的工作方式:MCP Host,比如 Claude Desktop、Cursor 这些工具,在内部实现了 MCP Client,然后MCP Client 通过标准的 MCP 协议和 MCP Server 进行交互,由各种三方开发者提供的 MCP Server 负责实现各种和三方资源交互的逻辑,比如访问数据库、浏览器、本地文件,最终再通过 标准的 MCP 协议返回给 MCP Client,最终在 MCP Host 上展示。

MCP 的核心架构

MCP 采用客户端-服务端架构,以下是 MCP 官方展示的架构:

image.png

  • MCP Client(客户端):作为调用方,是用户与 MCP 生态的交互入口。例如,聊天应用类,提供自然语言交互服务,让用户通过对话调用 AI 能力;编码工具类,在 IDE 里调用外部应用和系统的能力;任务自动化类,帮用户自动化执行重复性任务,如数据处理、流程调度,以提升效率。
  • MCP Server(服务端):作为被调用方,提供后端服务支撑,包含各类核心功能模块。例如,数据库类(如 ClickHouse、Supabase)负责数据存储、查询与管理;设计类(如 Figma、Blender)支撑设计创作、文件协作等功能;生产力工具类(如 Notion、Obsidian)提供笔记管理、知识整理等办公协作服务;支付类(如 Stripe),处理在线支付交易,支持商业场景的资金流转。
  • Local MCP Server(本地数据源):MCP 服务器可以安全访问本地计算机上的文件、数据库和服务。
  • Remote MCP Server(远程服务源):MCP 服务器可以通过互联网(例如通过 API)连接到外部系统。

MCP的Server一般由各大厂商按照规范提供,这样不同的MCP Client可以进行调用,这里列举一些MCP服务:

  • GitHub MCP Server:该server能够深度整合 GitHub API,实现文件操作、仓库管理、搜索等功能,从而支持代码仓库的自动化管理。
  • Google Drive MCP Server:允许用户浏览、读取和搜索 Google Drive 上的文件,并支持自动转换多种文件格式。
  • Fetch MCP Server:支持抓取网页内容,并能将 HTML 自动转换为易读的 Markdown 格式,便于内容整理与分享。
  • @amap/amap-maps :高德地图是一个支持任何MCP协议客户端的服务器,允许用户轻松利用高德地图MCP服务器获取各种基于位置的服务。

由于MCP Server比较多,国内国外的都有,这里就不一一列举,可以访问如下链接自行查看:

image.png

MCP的工作机制

image.png

如上图所示,一次基于MCP的调用,一共有6个核心的步骤,假设我们的需求是:

  • 我要开发一个获取时间的AI Agent,用户在使用这个AI Agent时,只需要问类似“现在几点了?”这种问题即可。
  • 我已经有了一个关于处理时间的MCP Server,这个MCP Server里有2个MCP Tool,一个负责获取当前时区,一个负责获取当前时间。

调用步骤解析:

  • 第一步:用户向AI Agent提问“现在几点了?”,此时AI Agent就是MCP Client,它会把用户的问题和处理时间的MCP Server以及MCP Tool的信息一起发送给LLM。
  • 第二步:LLM拿到信息后开始推理,基于用户的问题和MCP Server的信息,选出解决用户问题最合适的MCP Server和MCP Tool,然后返回给AI Agent(MCP Client)。
  • LLM返回给AI Agent的信息是:“你可以使用time这个MCP Server里的get_current_time这个MCP Tool,它可以解决用户的问题”。
  • 第三步:AI Agent(MCP Client)现在知道应该使用哪个MCP Server里的哪个MCP Tool了,直接调用该MCP Tool,获取结果。

  • 调用名称为time的MCP Server里的get_current_time MCP Tool。

  • 第四步:Time MCP Server返回结果(当前的时间)给AI Agent(MCP Client)。
  • 第五步:AI Agent(MCP Client)把用户的问题和从Time MCP Server处拿到的结果再一次给了LLM,目的是让LLM结合问题和答案再规整一下内容。
  • 第六步:LLM把整理后的内容返回给AI Agent(MCP Client),最后AI Agent(MCP Client)再原封不动地返回给用户。

在MCP的整个调用过程中有一个非常关键之处就是MCP Server 以及 MCP Tool 的信息。从第一步、第二步可以看出,这个信息非常关键,是它让LLM知道了该如何解决用户的问题,这个信息就是MCP中最重要的System Prompt,本质上就是优化提示词。

MCP主要解决什么问题

在MCP出现之前,如果要让大模型调用外部服务,需要获取各个外部服务的API的描述信息,如入参说明, 使用场景等,把用户的原始问题和工具的描述信息拼接成Prompt,发送给大模型。举个例子:

没有MCP的场景

用户想查询北京飞往上海的航班信息和天气情况,传统做法需要以下步骤:

  1. 开发者需要先获取两个外部API的文档:
    航班查询API:
    {
         
    "name": "flight_search",
    "description": "查询航班信息",
    "parameters": {
         
     "departure_city": "出发城市",
     "arrival_city": "到达城市", 
     "date": "出发日期(YYYY-MM-DD)"
    }
    }
    
    天气查询API:
    {
         
    "name": "weather_query",
    "description": "查询城市天气",
    "parameters": {
         
     "city": "城市名称",
     "date": "查询日期(YYYY-MM-DD)"
    }
    }
    
  2. 拼接Prompt,需要把用户问题和API文档信息一起发送给大模型:
用户问题:帮我查下明天北京飞上海的航班,还有上海的天气

可用工具:
1. flight_search:查询航班信息
   参数:
   - departure_city:出发城市
   - arrival_city:到达城市
   - date:出发日期(YYYY-MM-DD)

2. weather_query:查询城市天气
   参数:
   - city:城市名称
   - date:查询日期(YYYY-MM-DD)

请分析用户需求,选择需要调用的工具,并输出符合工具要求的参数JSON。

3.大模型输出大模型输出,模型会返回类似这样的结构化请求:

{
  "flight_search": {
    "departure_city": "北京",
    "arrival_city": "上海",
    "date": "2023-11-20"
  },
  "weather_query": {
    "city": "上海",
    "date": "2023-11-20"
  }
}

4.开发者处理,需要写代码将这个JSON分别发送给对应的API,然后再把结果整合后返回给用户。

这种方式的痛点:

  • 每个新工具接入都要手动编写描述文档。
  • 需要处理复杂的prompt工程。
  • 参数转换和结果整合需要大量定制代码,无法复用。
  • 不同模型的prompt格式可能不兼容。

image.png

有了MCP后:

  • AI Agent与工具(Tools)解耦,工具有了标准化的实现,解决了工具无法复用的问题。
  • 统一的function call标准,不同AI模型之间的无缝切换和无缝协作,减少对LLM平台的依赖。

image.png

MCP工作流程,实际场景

解决天气查询问题

为了解决上面查询航班和天气的问题,我们直接搜索对对应的使用MCP工具,如下:

image.png
image.png

将MCP服务集成到自己的大模型应用开发平台,或者是自己的AI Agent应用中,只需将一些配置参数,大模型即可自行调用对应的MCP工具来获取结果,就不需要自行拼接prompt,组装数据,如下是集成对应的MCP服务:

{
    "mcpServers": {
        "variflight": {
            "command": "npx",
            "args": [
                "-y",
                "@variflight-ai/variflight-mcp"
            ],
            "env": {
                "VARIFLIGHT_API_KEY": "your_api_key_here"
            }
        }
    }
}

然后再自己的大模型应用或者Agent中配置调用即可,大模型会根据你的输入和工具的描述,智能调用工具,如下图所示:

image.png

如图所示,左边的提示词并没有指定调用天气查询的接口,或者是指定调用的具体方法和参数,根据天气MCP的配置,大模型会自动调用对应的MCP工具,返回正确的结果,这就是MCP比function calling的优势之处。

支付场景

image.png

以下是一个虚构的简化使用场景,用于方便理解工具能力:

  1. 一位插画师希望通过提供定制的原创插画服务谋取收入。传统方式下,他/她需要和每位客户反复沟通需求、确定价格,并发送支付链接,然后再人工确认支付情况,这个过程繁琐且费时。
  2. 现在,插画师利用支付宝 MCP Server 与智能 Agent 工具,通过 Agent 搭建平台,开发了一个智能聊天应用(网页或小程序)。客户只需在应用中描述自己的绘画需求(如风格偏好、插画用途、交付时间等),AI 就会自动分析需求,快速生成准确且合理的定制报价,并通过工具即时创建出专用的支付宝支付链接。
  3. 客户点击并支付后,创作者立即收到通知,进入创作环节。无需人工往返对话确认交易状态或支付情况,整个流程不仅便捷顺畅,还能显著提高交易效率和客户满意度,让插画师更专注于自己的创作本身,实现更轻松的个性化服务商业模式。

例如,在Agent中引入对应的支付MCP,即可实现定制需求,提供报价,快速交易变现的场景。

image.png

结语

让我们在回顾一下MCP的整个概念和流程:
image.png

用户提问 → LLM通过MCP Client生成工具调用请求 → MCP Server路由到目标工具 → 工具返回结果 → LLM整合结果并回复用户

MCP宗旨:统一大模型与外部服务的智能桥梁

  1. MCP协议的核心价值:标准化通信
    MCP(Model Control Protocol)协议本质上是一种标准化接口规范,它统一了大模型(LLM)与外部数据源、工具服务之间的通信方式。通过MCP:解耦LLM与工具:不同厂商的大模型(如GPT-4、Claude、文心一言)可通过同一套MCP协议调用外部工具,无需为每个模型单独适配。
  2. 统一工具描述:所有外部服务(如航班查询、天气API、数据库)以标准化的MCP格式注册其功能、参数和权限,避免手动拼接Prompt的繁琐操作。
  3. 动态兼容性:当新增工具时,只需将其注册到MCP Server,所有接入MCP的LLM均可立即调用,无需重新训练或调整模型。
相关文章
|
1月前
|
人工智能 Java 开发工具
MCP Java 开发指南
MCP Java 开发指南
861 42
MCP Java 开发指南
|
3月前
|
人工智能 JavaScript 开发工具
MCP详解:背景、架构与应用
模型上下文协议(MCP)是由Anthropic提出的开源标准,旨在解决大语言模型与外部数据源和工具集成的难题。作为AI领域的“USB-C接口”,MCP通过标准化、双向通信通道连接模型与外部服务,支持资源访问、工具调用及提示模板交互。其架构基于客户端-服务器模型,提供Python、TypeScript等多语言SDK,方便开发者快速构建服务。MCP已广泛应用于文件系统、数据库、网页浏览等领域,并被阿里云百炼平台引入,助力快速搭建智能助手。未来,MCP有望成为连接大模型与现实世界的通用标准,推动AI生态繁荣发展。
2788 66
|
2月前
|
人工智能 弹性计算 JSON
MCP进阶:一键批量搞定MCP工具部署
本文介绍了一种基于阿里云计算巢的一站式MCP工具解决方案,解决了传统MCP工具集成中的效率低下、调用方式割裂和动态管理困难等问题。方案通过标准化协议实现多MCP工具批量部署,提高云资源利用率,并支持OpenAPI与MCP双通道调用,使主流AI助手如Dify、Cherry Studio等无缝接入。内容涵盖背景、原理剖析、部署使用实战及问题排查,最后强调MCP协议作为“通用语言”连接数字与物理世界的重要性。
548 62
MCP进阶:一键批量搞定MCP工具部署
|
16天前
|
机器学习/深度学习 人工智能 自然语言处理
当无人机遇上Agentic AI:新的应用场景及挑战
本文简介了Agentic AI与AI Agents的不同、Agentic无人机的概念、应用场景、以及所面临的挑战
99 5
当无人机遇上Agentic AI:新的应用场景及挑战
|
13天前
|
人工智能 自然语言处理 算法
编程简单了,部署依旧很难|Karpathy 演讲的 5 点解读
本文总结了 Andrej Karpathy 在 YC AI Startup School 的分享核心观点,涵盖软件发展的三个阶段、LLM 的定位与挑战、Agent 的产品工程思路以及编程与部署的未来趋势。内容适合 AI 领域从业者参考,强调通过提升工程能力实现 AI 应用的稳定性与可控性。完整视频链接附于文末,便于深入学习。
154 15
|
18天前
|
人工智能 安全 Java
AI Agent 的工程化被低估了
本文探讨了AI应用工程化的关键作用与实现路径,将其分为产品工程和技术工程两大部分。产品工程关注用户体验与交互设计,包括需求建模、UI/UX设计、系统提示词优化及反馈闭环构建,确保AI“能用、好用”。技术工程则聚焦系统稳定性与扩展性,涵盖架构模块化、工具调用机制、流量控制、数据管理及可观测性建设,保障AI应用“快、稳、强”。两者协同决定了AI Agent的实用性与规模化潜力,为行业提供了落地参考。
370 30
AI Agent 的工程化被低估了
|
2月前
|
人工智能 自然语言处理 机器人
MCP、A2A、ACP、ANP、.... :AI智能体协议的演进展望
多家机构各自推出的MCP、A2A、ACP、ANP等AI智能体协议将会彼此竞争、互补还是趋同?前景有多种可能
476 3
MCP、A2A、ACP、ANP、.... :AI智能体协议的演进展望
|
28天前
|
人工智能 Nacos 开发者
Nacos 开源 MCP Router,加速 MCP 私有化部署
Nacos MCP Router 发布全新版本。带来了多项重要更新,包括对 SSE 和 StreamableHTTP 协议的全面支持、Docker 容器化部署方案以及革命性的 MCP Server 协议一键转换功能。文章中详细的介绍更新内容并简单演示了使用过程。Nacos MCP Router 新版本的发布,不仅提升了开发者的使用体验,也为 MCP 服务的广泛应用和生态繁荣奠定了基础,欢迎关注。
699 63
|
15天前
|
机器学习/深度学习 安全 数据挖掘
基于YOLOv8的疲劳状态识别项目|完整源码数据集+PyQt5界面+完整训练流程+开箱即用!
这是一套基于YOLOv8的疲劳状态识别项目,包含完整源码、数据集、PyQt5界面及训练流程。系统可实时检测打哈欠、闭眼等疲劳行为,支持图片、视频、文件夹和摄像头多种输入方式,并自动保存检测结果。项目开箱即用,配有详细教程,适合快速部署。模型高效精准,界面友好易用,为疲劳驾驶预警提供技术保障。
112 57
基于YOLOv8的疲劳状态识别项目|完整源码数据集+PyQt5界面+完整训练流程+开箱即用!
|
2月前
|
人工智能 监控 安全
管理和调度Dify工作流
Dify是一款开源的大模型应用开发平台,支持通过可视化界面快速构建AI Agent和工作流。然而,Dify本身缺乏定时调度与监控报警功能,且执行记录过多可能影响性能。为解决这些问题,可采用Dify Schedule或XXL-JOB集成Dify工作流。Dify Schedule基于GitHub Actions实现定时调度,但仅支持公网部署、调度延时较大且配置复杂。相比之下,XXL-JOB提供秒级调度、内网安全防护、限流控制及企业级报警等优势,更适合大规模、高精度的调度需求。两者对比显示,XXL-JOB在功能性和易用性上更具竞争力。
671 63
管理和调度Dify工作流