3.7 MCP
介绍模型上下文协议(MCP)的定义、核心组件、能力范围以及实际演示。
3.7 MCP
定义:MCP(Model Context Protocol,模型上下文协议)是由 Entropy 提出的一个标准,旨在为大型语言模型(LLM)提供一种标准化的方式来访问外部工具和数据源。 目的:解决开发者在构建智能体式应用时,需要为每个应用重复编写代码来集成不同工具(如 Slack, GitHub, Google Drive 等)的痛点。 现状:该协议已被许多公司和开发者广泛采用,形成了一个活跃的生态系统。
一、问题与解决方案
传统开发模式的问题
重复造轮子:
- 开发者 A 构建 App 1,需要集成 Slack、Google Drive、GitHub 和 PostgreSQL。
- 开发者 B 构建 App 2,同样需要集成这些工具。
- 每个应用都必须独立编写封装代码来调用各个工具的 API。
- 如果有
m个应用和n个工具,整个社区的工作量是m × n,效率低下且浪费资源。
MCP 的解决方案
- 引入共享服务器:MCP 提出了一种标准,允许应用程序通过一个共享的 MCP 服务器来访问工具和数据源。
- 工作量优化:
- 不再是每个应用都创建自己的工具封装。
- 只需要开发
n个 MCP 服务器(每个对应一个工具),然后让m个应用去连接这些服务器。 - 整个社区的工作量从
m × n降低到m + n,实现了巨大的效率提升。
二、MCP 的核心组件
1. 客户端 (Clients)
- 角色:希望访问外部工具或数据的应用程序。
- 示例:Cursor, Claude Desktop, Windsurf。
- 功能:向 MCP 服务器发送请求,获取数据或执行操作。
2. 服务器 (Servers)
- 角色:提供工具和数据源的软件服务。
- 示例:Slack, Google Drive, GitHub, PostgreSQL。
- 功能:作为“包装器”,接收来自客户端的请求,并将其转换为对原始工具 API 的调用,然后将结果返回给客户端。
- 来源:部分服务器由服务提供商开发,但也有大量第三方开发者贡献。
三、MCP 的能力范围
- 初始设计:侧重于为 LLM 提供更多上下文,最初的工具主要是用于“获取数据”(fetch data)。
- 当前发展:MCP 的能力已扩展,不仅能访问数据,还能调用更通用的功能和执行操作。在 MCP 文档中,这些统称为“资源”(resources)。
实际演示:Claude Desktop 使用 GitHub MCP 服务器
- 场景:用户在 Claude Desktop 中输入查询:“总结该 GitHub 仓库的 README 文件内容”,并附上 URL。
- 流程:
- Claude Desktop 作为 MCP 客户端,识别到这是一个需要访问 GitHub 的请求。
- 它向已连接的 GitHub MCP 服务器发送一个请求,参数包含文件路径 (
README.md)、仓库名 (aisuite) 和所有者 (andrewng)。 - GitHub MCP 服务器执行请求,从仓库下载文件内容。
- 服务器将长文本响应返回给 Claude Desktop。
- Claude Desktop 将接收到的内容反馈给 LLM,LLM 生成一份简洁、格式良好的摘要。
- 第二次查询:用户询问“有哪些最新的 Pull Request?”。
- 同样,客户端向服务器发送“List pull requests”的请求。
- 服务器返回 JSON 格式的拉取请求列表。
- LLM 将其整理成清晰易读的列表,包括标题、状态、作者和描述等信息。