MCP(模型上下文协议)最近比较火, 正在逐渐成为智能体(agent)与外部交互的标准协议。MCP 最初是由 Anthropic 公司发起的一个项目,旨在让像 Claude 这样的 AI 模型更轻松地与工具和数据源进行交互。如今,MCP 已经不再仅仅是 Anthropic 的项目。MCP 是一个开放的协议,一种 AI 应用开发的新范式,越来越多的公司和开发者正在加入其中。
本文为 MCP 系列的第一篇文章,介绍 MCP 协议的相关概念、架构、优缺点、应用场景。
什么是 MCP
MCP(Model Context Protocol,模型上下文协议)是一种开放协议,旨在实现大型语言模型(LLM) 应用与外部数据源、工具和服务之间的无缝集成,类似于网络中的 HTTP 协议或邮件中的 SMTP 协议。
可以将 MCP 想象成智能体应用程序的 USB-C 接口,它为连接 AI 模型与不同的数据源和工具提供了标准化的方法。
为什么需要 MCP
传统的做法,将 AI 系统连接到外部工具需要集成多个 API。每个 API 的集成意味着单独的代码、文档、身份验证方法、错误处理和维护工作。
传统 API 像每扇门各自的钥匙
从比喻的角度来说:APIs 就像一扇扇独立的门——每扇门都有自己的钥匙和规则:
传统 API 要求开发者为每个服务或数据源进行集成开发。
MCP VS 传统 API
| 特性 | MCP | 传统 API |
|---|---|---|
| 集成开发工作量 | 单一、标准化的集成 | 每个 API 都需要单独集成 |
| 实时通信 | ✅ 是 | ❌ 否 |
| 动态发现 | ✅ 是 | ❌ 否 |
| 可扩展性 | 容易(即插即用) | 需要额外的集成开发 |
| 安全性和控制 | 在工具间保持一致 | 因 API 而异 |
MCP 和传统 API 的主要区别:
- 单一协议:MCP 作为一种标准化的“连接器”,意味着集成一个 MCP 就有可能访问多个工具和服务,而不仅仅是一个。
- 动态发现:MCP 允许 AI 模型动态地发现可用的工具并与之交互,无需对每个集成进行硬编码。
- 双向通信:MCP 支持持久化的、实时的双向通信——类似于 WebSockets。AI 模型可以动态地检索信息和触发动作。
总体架构
MCP 的核心遵循客户端-服务器架构,其中 host 应用程序可以连接到多个服务器:
- MCP 主机:像 Claude 桌面、IDE 或 AI 工具等应用程序,这些应用程序需要通过 MCP 访问外部数据。
- MCP 客户端:保持与服务端 1:1 连接的协议客户端 。
- MCP 服务端:通过标准化的 MCP(模型上下文协议)暴露特定功能的轻量级程序 。
- 本地数据源:MCP 服务端可以安全访问的计算机文件、数据库和服务 。
- 远程服务:通过互联网(例如,通过 API)可访问的外部系统,MCP 服务端可以连接到这些系统。
将 MCP 视作一座桥梁,可以清晰地看到:MCP 本身并不处理繁重的逻辑。MCP 只是简单地协调 AI 模型与工具之间的数据和指令流动。
MCP 服务端可以提供三种主要类型的功能:
- 资源:可以被客户端读取的类似文件的数据(如 API 响应或文件内容)
- 工具:LLM 可以调用的外部功能。
- 提示:帮助用户完成特定任务的预写模板。
何时使用 MCP
以下三个应用场景示例,比较了使用 MCP 和使用传统 API 的区别:
- 旅行规划助手
-
- 使用 API:需要为日历、电子邮件、航空公司预订 API 编写单独的代码,每个 API 都有自定义的身份验证、上下文传递和错误处理逻辑。
- 使用 MCP:AI 助手可以顺畅地检查日程安排以确认空档时间,预订机票,并通过电子邮件发送确认信息。全部通过 MCP 服务器实现,无需为每个工具进行自定义集成。
- 高级 IDE(智能代码编辑器)
-
- 使用 API:需要手动将 IDE 与文件系统、版本控制、包管理器和文档集成。
- 使用 MCP:IDE 通过单一的 MCP 协议连接到外部系统,实现更丰富的上下文感知和更强大的建议功能。
- 复杂数据分析
-
- 使用 API:需要手动管理与每个数据库和数据可视化工具的连接。
- 使用 MCP:智能分析平台通过统一的 MCP 层自主发现并与多个数据库、可视化工具和模拟工具进行交互。
使用 MCP 的好处:
- 简化开发:一次编写,多次集成,无需为每次集成重写自定义代码。
- 灵活性:切换 AI 模型或工具无需复杂重新配置。
- 实时响应能力:MCP 连接保持活跃,实现实时上下文更新和交互。
- 安全性和合规性:内置访问控制和标准化安全实践。
- 可扩展性:随着 AI 应用系统的迭代,轻松添加新功能 。只需新增连接到另一个 MCP 服务器。
何时传统 API 更合适
如果使用场景需要精确、可预测的交互,并且有严格的限制,那么传统 API 可能更合适。MCP 提供广泛、动态的功能,适用于需要灵活性和上下文感知的场景,但对于高度受控、确定性的应用场景,可能不太适合。
当需要以下情况时,使用传统 API 会更合适:
- 需要细粒度控制和高度特定、受限的功能。
- 希望通过紧密耦合来优化性能。
- 希望在最小化上下文自主性的情况下获得最大可预测性。
使用 MCP 的步骤
- 定义功能:明确 MCP 服务器将提供什么功能。
- 实现 MCP 层:遵循标准化的 MCP 协议规范。
- 选择传输方式:决定使用本地(标准输入输出)还是远程(服务器发送事件 / WebSocket)方式。
- 创建资源 / 工具:开发或连接到具体的数据源和服务,并将其暴露给 MCP 服务。
- 设置客户端:建立 MCP 服务器和客户端之间的安全稳定连接。
参考文档
- MCP 官方文档:modelcontextprotocol.io/introductio…
- MCP python SDK:github.com/modelcontex…
- 支持 MCP 协议的 server:github.com/modelcontex…
- norahsakal.com/blog/mcp-vs…