MCP 是由 Anthropic(Claude 的创造者) 推出的开源协议,旨在标准化大型语言模型(LLM)与外部数据源和工具的交互方式。
什么是 Model Context Protocol (MCP)?
MCP(模型上下文协议)是一个 开源协议,旨在为 AI 模型(尤其是大型语言模型)提供一种 标准化的接口,以便与外部系统(如数据库、API、文件系统或应用程序)进行交互。它的核心目标是解决 AI 模型与外部工具连接时的复杂性和碎片化问题,使开发者能够以一致、安全且高效的方式构建 AI 驱动的应用程序。
为什么需要 MCP?
大型语言模型(如 Claude、GPT-4 或 Llama)虽然在生成文本、推理和处理自然语言方面表现出色,但它们有以下局限性:
- 孤立性:LLM 的知识基于训练数据,无法直接访问实时数据(如你的电子邮件、公司数据库或当前天气)。
- 自定义集成的复杂性:要让 LLM 与外部工具(如 GitHub、Slack 或 Google Drive)交互,开发者需要为每个工具和模型编写 定制代码,这不仅耗时,还容易出错。
- M×N 集成问题:如果有 M 个 AI 模型和 N 个外部工具,传统方法需要 M×N 个集成。例如,5 个模型连接 10 个工具需要 50 个定制连接,效率低下且难以维护。
MCP 通过提供一个 统一的协议,将 M×N 问题简化为 M+N,类似于 USB 或 HTTP 如何标准化了设备连接和网络通信。它允许任何支持 MCP 的 AI 模型与任何支持 MCP 的工具交互,而无需为每种组合编写特定代码。
类比:MCP 就像一个智能插座
将 MCP 想象成一个 智能插座:不同的电器(AI 模型)可以通过同一个插座(MCP 协议)连接到各种电源(外部工具或数据源)。无论电器是电风扇还是咖啡机,插座都能以标准化的方式提供电力,而无需为每种电器定制插头。
MCP 的技术架构
MCP 基于 客户端-服务器架构,使用 JSON-RPC 2.0 作为通信基础,辅以多种传输协议(如 stdio 和 SSE)。以下是其核心组件和详细工作原理。
1. 核心组件
-
MCP 主机 (Host):
- 这是运行 AI 模型的应用程序或环境,例如 Claude Desktop、AI 驱动的 IDE(如 Cursor)或聊天机器人界面。
- 主机负责接收用户输入、与 MCP 客户端通信,并将外部数据整合到 AI 模型的响应中。
- 主机通常包含一个或多个 MCP 客户端,以连接不同的 MCP 服务器。
-
MCP 客户端 (Client):
- 客户端是主机中的一个软件组件,负责与特定的 MCP 服务器建立 一对一连接。
- 客户端使用 MCP 协议发送请求(如调用工具或获取数据)并接收响应。
- 每个客户端独立运行,确保不同服务器之间的隔离性和安全性。
-
MCP 服务器 (Server):
- 服务器是一个独立的程序,负责暴露特定工具、数据源或功能给 AI 模型。
- 服务器可以连接到 本地数据源(如文件系统、SQLite 数据库)或 远程服务(如 GitHub API、Google Drive)。
- 服务器通过 JSON-RPC 2.0 响应客户端请求,并执行所需操作。
-
数据源 (Data Sources):
- 这些是 MCP 服务器连接的外部系统,可能包括:
- 本地资源:文件、文件夹、数据库(如 PostgreSQL)。
- 远程服务:云端 API(如 Notion、Slack)、Web 服务或企业系统。
- 数据源提供 AI 模型所需的上下文数据或执行操作的能力。
- 这些是 MCP 服务器连接的外部系统,可能包括:
-
MCP 协议:
- MCP 协议基于 JSON-RPC 2.0,定义了客户端和服务器之间的通信格式。
- 它支持三种主要交互原语:
- 工具 (Tools):可执行的功能,如 API 调用、数据库查询或脚本(例如“发送邮件”或“创建 Git 提交”)。
- 资源 (Resources):结构化数据流,如文件内容、API 响应或日志。
- 提示 (Prompts):可重用的指令模板,用于指导 AI 处理常见任务(例如“总结此文件”)。
2. 工作流程
以下是 MCP 的详细工作流程,展示如何从用户查询到最终响应的完整过程:
-
连接初始化:
- MCP 主机启动并通过 MCP 客户端连接到一个或多个 MCP 服务器。例如,Claude Desktop 可能连接到 GitHub、Google Drive 和本地文件系统的 MCP 服务器。
- 连接通常通过 stdio(本地服务器)或 SSE(远程服务器)建立。
-
能力发现 (Capability Discovery):
- 客户端向服务器发送请求,查询其支持的 工具、资源 和 提示。
- 服务器返回一个清单,描述可用功能。例如,GitHub 服务器可能声明它支持“获取拉取请求”、“创建提交”和“评论议题”等工具。
-
上下文增强 (Context Augmentation):
- 用户输入查询(例如“总结我最新的 GitHub 拉取请求”)。
- 主机将查询分解为需要外部数据的部分,并通过客户端向相关服务器发送请求。
- 服务器从数据源(例如 GitHub API)检索数据并返回结果。
-
工具选择与执行 (Tool Selection and Execution):
- AI 模型根据查询和服务器能力选择合适的工具。
- 客户端发送标准化请求(JSON-RPC 格式)到服务器,服务器执行操作(如获取数据或发送消息)。
- 服务器返回结果,客户端将其传递给 AI 模型。
-
响应生成 (Response Generation):
- AI 模型将外部数据整合到其上下文窗口中,生成最终响应。
- 响应可能包括直接答案、操作结果,或进一步的交互建议。
3. 通信协议与传输方式
MCP 支持多种传输方式,以适应不同场景:
-
stdio:
- 使用标准输入/输出,适合本地服务器,易于测试和调试。
- 例如,运行在本地的 Python 脚本可以通过 stdio 与主机通信。
- 优点:简单、轻量;缺点:仅限本地使用。
-
SSE (Server-Sent Events):
- 基于 HTTP 的单向事件流,适合远程服务器,支持实时通信。
- 例如,连接到云端 GitHub MCP 服务器时使用 SSE。
- 优点:支持远程访问;缺点:需要稳定的网络连接。
-
Streamable HTTP(开发中,2025 年预期支持):
- 一种更灵活的 HTTP 传输方式,支持双向流式通信。
- 优点:适用于大规模分布式系统;缺点:实现复杂。
4. JSON-RPC 2.0 的技术细节
MCP 使用 JSON-RPC 2.0 作为通信协议,其请求和响应遵循以下格式:
-
请求格式:
{ "jsonrpc": "2.0", "id": 1, "method": "tool.execute",

最低0.47元/天 解锁文章
2116

被折叠的 条评论
为什么被折叠?



