1 现存问题
在 MCP 协议出现之前,AI 应用若要连接外部数据源或工具时面临诸多挑战:
- 开发成本高昂:每接入一个新系统都需要单独开发集成方案,导致开发和维护成本居高不下
- 扩展性差:每对接一个新工具,都要适配不同的接口和返回格式,系统耦合度高,互操作性弱
- 安全性不统一:缺乏统一的权限管理标准,数据容易泄露且难以进行合规管控
- 重复劳动多:不同模型与工具的集成存在大量重复性工作,数据和能力难以共享
2 什么是 MCP
下面是 MCP 官方的介绍:
MCP is an open protocol that standardizes how applications provide context to LLMs. Think of MCP like a USB-C port for AI applications. Just as USB-C provides a standardized way to connect your devices to various peripherals and accessories, MCP provides a standardized way to connect AI models to different data sources and tools.
正如官方描述,MCP 协议就像是为大模型准备的 USB-C 接口。就像 USB-C 为各种设备提供了标准化的连接方式一样,MCP 也为 AI 模型连接不同的数据源和工具提供了标准化的解决方案。其他组件只需适配 MCP 协议,就能像插入 USB-C 设备一样轻松接入 AI 系统。
modelcontextprotocol/modelcontextprotocol
Specification and documentation for the Model Context Protocol
如上图所示,通过 MCP 协议,我们可以将各种现有系统无缝接入到 AI 应用程序中。
3 MCP 的基本原理和架构
从上图可以看出,MCP 主要由三个核心组件构成:Host、Client 和 Server。下面将详细介绍这三个组件的作用。
3.1 MCP Host
Host 指的是各种 AI 应用程序,例如上图中的 Claude Desktop、Cursor,以及国内表现优异的 Cherry Studio 等。需要注意的是,这里特指的是应用程序本身。
3.2 MCP Client
Client 是 AI 应用程序中负责与 MCP Server 建立连接的客户端组件。它的主要职责是:
- 维持与 MCP Server 的稳定连接
- 将 LLM 的消息转换为 MCP Server 能够理解的标准格式
3.3 MCP Server
Server 是提供各种功能的第三方组件,包括:
- Web 服务:如高德地图 API、Gmail 服务等
- 本地服务:如文件管理操作、系统工具等
- 数据库组件:各类数据存储和查询服务
MCP Server 向 Client 暴露三种核心资源类型:Tools(工具)、Resources(资源)和 Prompts(提示)。
4 MCP 传输方式
4.1 Stdio
标准输入/输出流(Standard Input/Output)传输方式,适用于在同一台机器上运行的客户端和服务器之间的通信。这种方式简单高效,适合本地部署场景。
Stdio 主要通过两种方式运行,一种是 npx,这个需要 Nodejs 的运行环境,一个是 uv,这个需要 python 的运行环境。
4.2 SSE
MCP SSE(Server-Sent Events)服务端推送方式,具有以下特点:
- 支持远程部署:适用于跨机器、云函数等场景,客户端和服务端只需通过公网连通即可
- 支持分布式架构:利用 sessionId 保证请求与连接的亲和性,实现"同用户同连接"调度,确保上下文连续性
- 支持流式传输:能够以流式方式返回大型数据或进度事件,显著提升用户体验
5 MCP 使用流程
在正式使用 MCP Server 功能之前,需要先进行能力交换阶段:
- 客户端发送初始请求,探询服务器的功能能力
- 服务器返回详细的功能信息和接口描述
完成连接初始化后,标准的使用流程如下:
- 获取工具列表:MCP Client 从 MCP Server 获取所有可用的工具清单
- 发送用户请求:将用户的查询内容连同工具描述一起通过 Function Calling 发送给 LLM
- 工具选择决策:LLM 分析请求内容,决定是否需要使用工具以及具体使用哪些工具
- 执行工具调用:如需使用工具,MCP Client 通过 MCP Server 执行相应的工具调用操作
- 返回执行结果:工具调用的结果被发送回 LLM 进行处理
- 生成最终响应:LLM 基于所有收集到的信息生成自然语言响应
- 展示给用户:将最终的响应结果呈现给用户
评论