执行摘要
模型上下文协议(MCP)是一个开放标准,在 AI 模型与外部数据和服务之间架起桥梁,让大语言模型(LLM)能以一致、安全的方式发起结构化的 API 调用。本文会介绍 MCP、解释它为何对连接 AI 系统有价值、把它和 ChatGPT 插件、手写 API 集成等既有做法对比,并深入它近期对基于 OAuth 的认证的支持;同时也会看一点代码,看看 MCP 怎么运转。
MCP 充当 AI 工具与外部服务之间的万能适配器,消除了为每个工具或 API 单独编写集成代码的需要。正如 USB-C 简化了各种设备之间的连接,MCP 为 AI 模型提供了一套统一的方法来调用外部函数、获取数据或使用预定义的提示词。其核心在于:MCP 提供一个接口,即可连接到许多不同的系统。
MCP 之于 AI,就像 USB-C 之于硬件设备。在 USB-C 之前,鼠标、硬盘、显示器各有各的插口,买一个新外设常常还得配一根专用线。USB-C 出现后,一个口子通吃。
MCP 想做的是同一件事:在它之前,让 AI 用上 Google Drive、SQL 数据库、Slack,每接一个都要写一套专属代码;有了 MCP,AI 只需会说这一种"协议语言",任何提供 MCP 接口的服务都能即插即用。
什么是模型上下文协议 MCP?
🧩 MCP:AI 应用与外部世界之间的万能适配器
MCP 本质上是 AI 应用与外部工具或数据源之间的万能适配器。它定义了一套通用协议(构建在 JSON-RPC 2.0 之上),让 AI 助手能以结构化的方式,调用外部服务的函数、获取数据,或使用预定义的提示词。
因为在传统做法里,每个 LLM 应用都要为每个 API 或数据库写一套定制代码;而 MCP 提供了一种标准化的"语言",用同一套规则覆盖所有这些交互,从而把"为每个服务各写一套"压缩成"只对接一种协议"。
不再为 Drive 写一套、为数据库写另一套,而是让 AI 只学会 MCP 这一种统一语言,所有对接都走它。
这个 MCP 层让 AI 应用能够安全地访问外部数据源和工具、并与之交互。它充当大语言模型与各类数据库、应用或 API 之间的桥梁,在不需要大量定制编码的前提下,促成无缝的集成与功能调用。
客户端-服务器架构(Client-Server)
MCP 用一套客户端-服务器架构来实现上述目标。AI 驱动的应用(例如聊天机器人、IDE 助手或智能体 agent)充当宿主 host,并运行一个 MCP 客户端 client组件;而每一个外部集成则作为一个 MCP 服务器 server运行。服务器通过 MCP 协议对外暴露其能力(如函数、数据资源或提示词模板),客户端连接到它,来使用这些能力。
MCP 为何有价值
在传统的搭建方式里,把 AI 模型连到外部数据或动作是件繁琐又零散的事。开发者往往要为每个想让模型用上的 API 或数据库写一次性的集成代码,逐个处理各不相同的认证、数据格式和错误处理。MCP 通过把这些交互标准化,改变了整个局面。它的关键收益包括:
⚡ 快速工具集成(Rapid Tool Integration)
有了 MCP,你无需从零定制每个能力。只要某个服务(比如 Google Drive 或一个 SQL 数据库)已经有了对应的 MCP 服务器,任何兼容 MCP 的 AI 应用都能连上它、立刻获得那项能力。
这对自动化是巨大的胜利——AI 智能体可以按需取文档、查数据库、调 API,只要接上合适的服务器即可。就像有一座现成"插件"库,而它们都讲同一种语言。MCP 服务器是轻量的程序,通过标准协议暴露特定能力,充当(例如)Cursor 与各种外部工具或数据源之间的中介。
🤖 自主智能体(Autonomous Agents)
MCP 赋能更自主的 AI 行为。智能体不再局限于其内置知识,而能主动在多步工作流中检索信息或执行动作。
一个成熟的智能体可能用 MCP 先从 CRM 取数据,再通过一个通讯工具发邮件,接着把一条记录写入数据库——这一切在一条无缝链条里完成。
通过支撑流畅的、有上下文意识的多步交互,MCP 帮助 AI 智能体更接近真正的自主任务执行。正如一位观察者所言,MCP 给了 AI 标准化的"接触真实世界工具与数据"的途径,把它从一个孤立的"大脑"变成一个多才多艺的"行动者"。
🧹 降低摩擦与配置成本(Reduced Friction and Setup)
因为 MCP 充当通用接口,开发者得以避免"维护一堆各自独立的集成"这种碎片化困境。应用一旦支持 MCP,就能通过单一机制连接到任意数量的服务。
这极大减少了每次想让 AI 用上新 API 时所需的手动配置。团队可以专注于更高层的逻辑,而不必第 10 次重新发明连接代码。正如 Anthropic 所说,MCP 用一个更简单、更可靠的单一协议取代了碎片化的集成,来实现数据访问。
🔄 一致性与互操作性(Consistency and Interoperability)
MCP 在各工具之间强制统一的请求/响应格式。这意味着你的 AI 应用不必为服务 A 处理一种 HTTP 响应、又为服务 B 处理另一种 XML——模型的输出(函数调用)和工具的返回结果,统统以统一的 JSON 结构传递。
这种一致性让调试和扩展都更容易。它还为你的集成逻辑面向未来留了余地:即便你换了底层的模型厂商,MCP 对工具的那套接口仍然不变。
↔️ 双向上下文(Two-Way Context)
与简单的 API 调用不同,MCP 支持在模型与工具之间维护上下文和持续对话。一个 MCP 服务器除了工具之外,还能提供提示词 Prompts(针对特定任务的预定义提示模板)和资源 Resources(如文档这类数据上下文)。
这意味着 AI 不仅能"调一个 API",还能摄入参考数据、或在服务器引导下完成复杂工作流。该协议被设计为支持丰富的交互,而非只是一次性查询。
在编码助手这类应用里尤其有用——AI 可能要通过 MCP 与一个开发环境反复迭代;或在需要与多个数据源来回沟通的复杂决策任务里发挥作用。
MCP 架构 —— 它如何运作(速览)
客户端-服务器结构
MCP 遵循清晰的客户端-服务器架构:
- 🖥️MCP 客户端(Client):嵌入在 AI 应用中(聊天机器人、IDE 助手、自动化智能体)。
- 🗄️MCP 服务器(Server):暴露外部能力,如函数(工具 tools)、资源(数据 resources)和提示词(模板 prompts)。
所有交互都通过标准化的 JSON-RPC 消息发生,维持一种安全、结构化的交换。
JSON-RPC 请求示例
例如,要列出可用的工具,一个 MCP 客户端会发出这样一个请求:
▸ 客户端请求:列出工具
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/list",
"params": {}
}
服务器会回复一个结构化的 JSON,列出工具(每个工具带名称、描述和输入 schema)。例如,一个服务器可能对外公布一个 get_weather 工具,并说明它需要哪些输入。
▸ 服务器响应:工具清单
{
"jsonrpc": "2.0",
"id": 1,
"result": [
{ "name": "get_weather", "description": "Retrieves weather data.", "schema": { "location": "string" } }
]
}
之后,当 LLM 决定使用某个工具时,客户端会发起一次调用来执行它。MCP 服务器执行该函数,并以结构化的 JSON 响应返回结果。宿主应用内的 MCP 客户端随后可以把这个结果喂回模型的上下文或回复中。
构建与部署 MCP 服务器
构建和部署 MCP 服务器,是用好模型上下文协议做 AI 集成的关键一步。MCP 服务器充当 AI 模型与外部数据源或工具之间的中介,实现无缝的通信与数据交换。
构建 MCP 服务器时,架构与设计的考量很重要。MCP 遵循客户端-服务器架构,其中一个宿主应用可以连接到多个服务器。这种架构带来可扩展性和灵活性,让开发者能设计出处理各类任务和功能的 MCP 服务器,比如数据处理、工具集成或 AI 模型管理。
部署 MCP 服务器可以在多种环境中进行,包括本地开发环境、云平台或本地自建(on-premises)基础设施。举例来说,Cloudflare 提供了一个稳健的平台,用于构建和部署远程 MCP 服务器,让管理和扩缩 MCP 部署更容易。这种灵活性确保 MCP 服务器能针对不同应用和环境的具体需求量身定制——无论是用于开发的本地搭建,还是面向生产的云端方案。
通过聚焦良好的架构设计、并善用 MCP 的灵活性,开发者可以创建出强大且可扩展的 MCP 服务器,增强 AI 模型的能力,让它们能与外部数据源和工具无缝交互。
MCP 客户端与工具
MCP 客户端和工具是模型上下文协议生态系统的核心组件。
MCP 客户端是连接到 MCP 服务器、以访问外部数据源或工具的应用。这些客户端可以用各种编程语言和框架来构建,如 Python、JavaScript 或 Java,让开发者能为自己的具体需求选用最合适的工具。
另一方面,MCP 工具是为 MCP 客户端提供特定能力或功能的软件组件。这些工具可以与 MCP 服务器集成,以启用数据处理、AI 模型管理或工具集成等功能。MCP 工具的例子包括:Claude Desktop(提供与 AI 模型交互的聊天界面)和 Cursor(提供用于扩展 AI 能力的插件系统)。
开发者可以构建自定义的 MCP 客户端和工具,以满足特定的使用场景或需求。这种灵活性为 MCP 生态系统带来了创新和试验的空间——无论是一个用于数据分析的专门工具,还是一个能与多个 MCP 服务器集成的客户端应用,可能性都非常广阔。
通过善用 MCP 客户端与工具,开发者可以创建出稳健且多用途的应用,充分释放 AI 模型的潜力,让它们能与各种外部数据源和工具无缝交互。
把 MCP 和其他方案对比
| MCP | 定制集成 | ChatGPT 插件 | LangChain 等框架 | |
|---|---|---|---|---|
| 集成速度 | ✅ 快,即插即用 | ❌ 慢,需定制代码 | ⚠️ 中等,专有 | ⚠️ 中等,需定制代码 |
| 认证 | ✅ OAuth 标准 | ❌ 手动 API 密钥 | ⚠️ 插件专属 OAuth | ❌ 依实现而异 |
| 交互类型 | ✅ 持续且上下文丰富 | ❌ 临时性交互 | ❌ 一次性交互 | ⚠️ 上下文受限 |
| 开放标准 | ✅ 是 | ❌ 否 | ❌ 否 | ⚠️ 取决于框架 |
下面逐一对比几种在 MCP 之前或与之并存的做法:
🔑 定制集成与 API 密钥管理
最常见的传统做法,是为每个服务写定制代码,并把凭据(API 密钥或 token)交给 LLM 去用这些集成。比如你写一个 Python 函数去查某个 API,赋予 LLM 调用它的能力,并在后端手动管理 API 密钥。
这种方式费力且难以扩展——每个新数据源都要新代码,每个环境都要安全管理 API 密钥,常导致系统脆弱,因为每个集成都独一无二。相比之下,MCP 把这些交互集中化、标准化:AI 智能体只需处理 MCP 协议,任何服务的任何 MCP 服务器都能即插即用;加新服务器完全不必改客户端代码。此外,MCP 为认证提供了正式结构(后文详述),使得"把密钥交给 AI"不再是临时拼凑,而是走一套安全协议。
🔌 ChatGPT 插件(OpenAI Plugins)
2023 年,OpenAI 为 ChatGPT 推出了插件系统,允许模型调用由 OpenAPI spec 定义的外部 API。这是迈向标准化工具使用的早期一步,但有局限:每个插件本质上是它自己的小型集成(有自己的 API schema 和认证),且要单独构建/托管。只有特定平台(如 ChatGPT 或 Bing Chat)能用这些插件,因为它是专有做法。插件也多为一次性调用——模型调一次 API 拿到信息,没有持久连接或持续交换。
MCP 的不同在于它是开放且通用的(不绑定于任何单一厂商或界面),并支持丰富的双向交互和持续上下文。可以把 ChatGPT 插件想成一个封闭工具箱里的专门工具,而 MCP 是任何开发者或 AI 平台都能用的开放标准工具包。MCP 的标准化认证(尤其是 OAuth)也意味着它能以更统一的方式处理对用户数据的安全访问,胜过 ChatGPT 系统里逐个插件各搞一套的 OAuth 流程。
ChatGPT 插件展示了"为 LLM 标准化 API 访问"的价值,但 MCP 更进一步:把它做成开放协议,并让 AI 与服务之间能进行持久的"对话"。
🧰 LLM 工具框架(LangChain、智能体库)
在 MCP 之前,许多开发者用 LangChain 这类框架给模型赋予工具:你定义一组工具函数(带描述)以及智能体的提示逻辑,让 LLM 自行决定何时使用它们。这能行,但每个工具背后仍需定制实现——LangChain 最终在其库里维护了数百个工具集成。本质上,LangChain 提供的是一个面向开发者的标准(一个 Python 类接口),把工具集成进智能体的代码库,但并没有给模型在运行时动态发现新工具的能力。
MCP 与这些框架是互补的,它把标准化转移到面向模型的一侧。有了 MCP,智能体能够发现并使用任何 MCP 服务器提供的工具,即便其代码事先并未显式包含该工具。事实上,LangChain 已加入支持,可把 MCP 服务器当作又一个工具来源——意味着用 LangChain 构建的智能体能轻松调用 MCP 工具,借力日益增长的 MCP 服务器生态。差别在于,MCP 把接口正式定在一套协议之上(JSON-RPC,带元数据等),更易插入不同环境,而不仅限于 Python 框架。
类似地,OpenAI 原生的函数调用功能,可以看作处理函数调用的格式化(模型输出一个 JSON 函数调用),而 MCP 处理的是该调用的执行(以标准化方式)。二者常常协同工作:LLM 产出一个结构化调用,MCP 客户端/服务器执行它并返回结果,合起来实现无缝的工具使用。
MCP 实战:技术深入
我们一步步走一遍典型的 MCP 交互,把它的运作机制坐实,并看一点代码。设想我们有一个 AI 助手,想使用一个提供了一组工具的 MCP 服务器(比如一个假想的 "Neon" 数据库服务)。高层流程如下:
连接到 MCP 服务器
宿主应用(AI 助手)初始化一个 MCP 客户端,并与服务器建立连接。视服务器位置而定,这可能通过本地进程(stdio)或远程 HTTP 流(SSE)进行。底层上,客户端发送一条 initialize 消息,以握手协商协议版本与能力。
发现可用的工具 / 资源
客户端随后查询服务器都提供些什么。如前所示,它可能发送 {"method": "tools/list"} 并拿回一组工具定义。助手可据此告知 LLM(例如把工具清单放进系统提示,或经由模型的函数 schema,视实现而定)。用 SDK 时,这可能只是一行代码。
LLM 选择一个工具
当用户问的问题需要外部动作时,LLM(常借助提示工程或函数调用能力)判定应使用某个工具。例如用户问:"AAPL 股票最新价是多少?" LLM 判断应调用 get_current_stock_price(company="AAPL", format="USD")。宿主应用捕获这个意图(如 OpenAI 的函数调用 API 会返回 JSON 形式的函数名与参数)。
通过 MCP 调用工具
客户端现在向服务器发送一个 tools/call 请求,带上所选工具名和参数。这会让服务器在其侧执行该工具的处理逻辑——可能是调外部 API、做数据库查询,或该工具封装的任何逻辑。结果(可以是简单值或复杂 JSON 对象)放在 MCP 响应的 result 字段里送回。
把结果返回给 LLM
MCP 客户端收到工具输出,宿主应用随即把它整合回 AI 的回复中。许多智能体设计的模式是:把结果注入对话,再让模型继续。例如助手随后呈现:"AAPL 当前股价为 $173.22(USD)。" 若用自动循环,可把结果(如作为系统消息 "get_current_stock_price 的结果:…" 追加到对话)交给模型,模型便能带着该信息继续回答用户。
看一点代码
用 SDK 发现工具,可能就是一行:它返回一个结构化的工具列表,每个工具条目带名称、描述和输入的 JSON schema,这样 AI 就知道自己能做什么。
▸ 发现工具(一行)
const tools = await mcpClient.request({ method: 'tools/list' }, ListToolsResultSchema);
发起调用(第 4 步)用 SDK 可能长这样:
▸ 调用工具 tools/call
const result = await mcpClient.request({
method: 'tools/call',
params: { name: toolName, arguments: toolArgs }
}, CallToolResultSchema);
下面是一个简化示意:用 Anthropic 的 Claude(原生支持工具使用)调用一个工具并在对话中使用结果。
▸ 用 Claude 把工具调用串进对话循环(伪代码)
// 1. 把用户提示连同可用工具上下文发给 LLM
const response = await anthropicClient.complete({
prompt: "User: Can you list my projects?\nAssistant: ",
model: "claude-3.5",
tools: tools // 来自 MCP 服务器的工具列表
});
for (const msg of response.messages) {
if (msg.type === 'tool_use') {
// 2. LLM 决定使用某个工具
const { name, args } = msg;
// 3. 通过 MCP 调用该工具
const toolRes = await mcpClient.request({ method: 'tools/call', params: { name, arguments: args } });
// 4. 注入工具结果并恢复 LLM
await anthropicClient.send({ role: 'system', content: `Tool result: ${toolRes.result}` });
} else {
// 5. 处理普通 LLM 回复(工具结果很可能已被整合)
console.log("Assistant:", msg.content);
}
}
现实中,框架会替你处理很多这类细节,但上面的伪代码勾勒了 MCP 如何嵌入循环。关键在于:MCP 为工具执行提供了标准化的"调用/响应"层,AI 智能体代码可以挂接进去。无论你用 OpenAI、Anthropic 还是别的 LLM,MCP 都保持不变——它是模型意图与外部动作之间的"胶水"。
mcpClient.request,而非各处的服务专属代码),AI 也更强大(它能接入任何 MCP 连接的服务)。调试也更容易——你可以监控 JSON-RPC 消息,看清到底请求和返回了什么,而不必从模型生成的文本里找线索。
早期局限:没有内置认证
当 MCP 最初出现时(2024 年末),它提供了用于工具与数据交换的核心协议,但缺少一套标准化的认证机制来连接远程服务器。实践中,早期的 MCP 演示和实现往往要求把 MCP 服务器跑在本地或一个可信环境里——在那里认证不是大问题(因为 AI 和服务器跑在同一台机器上)。
举例来说,开发者可以在 localhost 上跑一个用于 Google Drive 的 MCP 服务器,带上一个事先获取好的 token,然后让 AI 应用指向它。但要在互联网上、或与第三方服务一起使用 MCP,在没有正式认证流程时就很棘手。
许多最初的 MCP 服务器假定用户会在启动时手动向服务器提供凭据或 API 密钥。例如,Anthropic 的快速上手指南就建议:运行预构建的服务器时,通过配置或命令行提供你自己的凭据(API 密钥、token)。这意味着服务器本身能拿到你的密钥,而 MCP 客户端只是信任那个服务器。
本质上,早期 MCP 客户端除了通过带外手段(如预先共享一个 token,或干脆无认证运行)外,根本没有办法向 MCP 服务器认证。这是一个显著的局限——MCP 被设计为开放、基于互联网的,但没有认证标准,安全的远程使用就被掣肘了。
缺少认证标准意味着 MCP 客户端无法自行安全地连接到任意服务器。你要么把一个 client ID / API 密钥硬编码进客户端(在分布式应用里并不理想),要么就无认证运行、并假定只有被授权的用户才能触及服务器(常常靠把它保持在本地来实现)。显然,要让 MCP 发挥全部潜力(例如以安全方式把 AI 智能体连到云托管的数据源),需要一个更好的办法。好消息是:社区意识到了这点,并着手把基于 OAuth 的认证内建进 MCP。
OAuth 2.0 认证流程
📎 建议先理解 早期局限:无内置认证,再看 OAuth 如何对症下药。
为解决最初的认证局限、增强安全连接,MCP 采用了 OAuth 2.0——一个被广泛认可且稳健的认证标准。OAuth 2.0 提供了一个安全、可扩展的框架,让 MCP 客户端能与远程服务器、云托管资源以及多用户环境安全交互。把 OAuth 2.0 集成进 MCP 的关键组成与收益包括:
动态客户端注册(DCR)
MCP 支持动态客户端注册,允许客户端自动向 OAuth 服务器注册。这免去了手动配置客户端或硬编码凭据的需要,大幅简化了开发者的部署。
自动端点发现
MCP 利用标准化的元数据 URL(遵循 OAuth 的发现协议),让客户端自动发现 OAuth 端点。这减少了配置开销,使 MCP 部署更简单、更灵活。
安全授权与令牌管理
客户端安全地获取与用户权限和访问范围(scope)精确对应的 OAuth 令牌。这确保客户端只能访问用户明确许可的资源,在多用户和云环境中提升了安全性与合规性。
可扩展且安全的多用户支持
OAuth 2.0 的设计天生支持多个并发用户和服务,正好补上了 MCP 早期的一大局限。应用现在能同时无缝处理众多用户的授权流程,这对大规模云端采用至关重要。
调试与排错
调试与排错是使用 MCP 服务器和客户端时的关键环节。MCP 提供了多种工具和技巧用于调试排错,确保开发者能高效地定位和解决问题。这个过程中的一个关键工具是 MCP Inspector——一个用于 MCP 服务器的交互式调试工具。
MCP Inspector 让开发者能测试和检视 MCP 服务器,识别并解决 MCP 服务器集成中的问题。该工具提供了 MCP 客户端与服务器之间交互的详细视图,使得定位问题、理解其根本原因更容易。此外,MCP 还提供了一份全面的调试指南,列出常见问题与解决方案,帮助开发者快速排查和解决问题。
调试 MCP 服务器时,考虑系统的架构与设计很重要。开发者应识别出导致问题的具体组件或模块,并用 MCP Inspector 这类工具来诊断和解决。通过聚焦系统化的调试方法、并善用现有工具,开发者可以确保其 MCP 集成稳健可靠。
MCP 的真实世界应用
模型上下文协议(MCP)在各行业和领域有多种真实应用。MCP 的一个主要用例是 AI 集成——它在 AI 模型与外部数据源或工具之间实现无缝的通信与数据交换。MCP 可用于的应用包括:
- 💬构建 AI 驱动的聊天机器人:这些机器人可以访问外部数据源或工具,为用户提供准确、最新的信息。
- ⚙️创建 AI 驱动的工作流:MCP 让 AI 模型能与外部系统或数据源集成,自动化复杂工作流、提升效率。
- 🧠开发 AI 模型:这些模型能与外部工具或数据源交互,增强其能力,产出更准确、更相关的结果。
- 🏭实现 AI 驱动的自动化:在金融、医疗或制造等行业,MCP 可以自动化任务和流程,提升生产力、减少错误。
MCP 的灵活性和适应性,让它成为那些希望在应用中运用 AI 与机器学习的开发者和组织眼中颇具吸引力的方案。通过为 AI 模型提供一个与数据源和工具交互的标准化接口,MCP 在 AI 生态中促成了创新与试验。这种标准化方式不仅简化了集成过程,也确保 AI 模型能取用它们所需的数据和工具,以发挥最佳表现。
总而言之,MCP 为 AI 应用打开了无限可能,让开发者能创建更集成、更自主、更可扩展的方案。无论是用 AI 驱动的聊天机器人增强客服,还是在工业场景中自动化复杂工作流,MCP 都提供了把这些创新变为现实所需的工具与框架。
结语
模型上下文协议(MCP)是 AI 开发中一项令人兴奋的进展,因为它让开发者能安全、高效地把我们日益智能的语言模型,连接到此前难以连接的广阔软件与数据世界。通过引入一种通用协议,MCP 让我们能构建出更集成、更自主、更易扩展的 AI 系统。我们不再为每个新工具写一次性插件、或给模型脆弱的逐条指令,而是有了一个连贯的框架,让 AI 智能体能在恰当的监督与安全保障下,即时地发现并使用工具。
虽然该协议仍在演进(认证是近期才加入的,标准化的服务器发现等更多特性也在路上),但很清楚的是:MCP 或类似它的东西,将在下一代 AI 应用中扮演关键角色。对开发者而言,现在正是熟悉 MCP 概念的好时机。无论你是在为聊天机器人注入公司特定知识,还是在构建自动化工作流的 AI 智能体,MCP 都能通过承担工具集成的"管道"工作,替你省下时间和麻烦。而且由于它是一个开放标准、背后有不断壮大的社区(以及 Anthropic 这样的公司),它很可能成为未来 AI 基础设施的奠基性一环。
在 Stytch,我们专注于轻松地为客户解决远程 MCP 服务器的认证问题,让他们能为自己的应用方便地搭起 MCP 服务器,从而允许终端用户向 MCP 客户端授予经许可的访问权限。