什么是 MCP 协议?
在解释 MCP 协议之前,我们需要先理解一个核心问题:
通常在使用 ChatGPT 等大语言模型(LLM)时,LLM 只能回答问题,而无法主动执行某些任务。例如,如果让 LLM 帮忙购买 BTC,它是无法直接完成的。
传统解决方案
Prompt Engineering
通过提示词工程(Prompt Engineering),可以让 LLM 返回一个结构化的指令,供外部系统执行。例如:
const prompt = "你可以去购买BTC,当用户提出购买BTC的时候,你需要返回一个JSON格式的结果。我会执行之后会告诉你结果然后你再回复。"
示例返回:
{
"action": "buyBTC",
"parameters": { ... }
}
执行函数
const buyBTC = () => {};
然而,这种方法存在明显的问题:
输出的结构化数据不准确。
容易产生幻觉(Hallucination)。
缺乏系统化约束,可靠性较低。
当前一些方案(如 Eliza)仍然采用 Prompt Engineering 方式,但存在较大的局限性。例如使用如下模板:
const messageHandlerTemplate = `{{actionExamples}}
...
Instructions: Write the next message for {{agentName}}.`
这种方式在某些场景下仍然有效,但缺乏标准机制来支撑大规模系统级调用。
Function Calling
为了解决 Prompt Engineering 的问题,OpenAI 推出了 Function Calling,允许开发者定义可执行函数,并由 LLM 调用。
示例代码:
import { OpenAI } from "openai";
const openai = new OpenAI();
const tools = [{
type: "function",
function: {
name: "get_weather",
description: "Get current temperature for a given location.",
parameters: {
type: "object",
properties: {
location: {
type: "string",
description: "City and country e.g. Bogotá, Colombia"
}
},
required: ["location"]
},
strict: true
}
}];
const completion = await openai.chat.completions.create({
model: "gpt-4o",
messages: [{ role: "user", content: "What is the weather like in Paris today?" }],
tools,
store: true
});
返回结果:
[{
"id": "call_12345xyz",
"type": "function",
"function": {
"name": "get_weather",
"arguments": "{\"location\":\"Paris, France\"}"
}
}]
Function Calling 的优点:
让 LLM 调用函数变得更简单。
结构化输出,减少幻觉问题。
但也存在缺点:
受限于特定平台(如 OpenAI、Anthropic 等)。
各家 API 接口不同,集成复杂。
例如 Claude 的 Tool Use 格式与 OpenAI 并不相同:Claude 官方文档
MCP(Model Context Protocol)
什么是 MCP?
MCP(Model Context Protocol)是一种开放协议,旨在标准化 Function Calling,使工具和函数可以跨大模型共享与调用。
它基于 JSON-RPC 格式,将工具调用抽象成统一的数据结构和行为接口,消除不同 LLM 提供商之间的差异。
官方文档:MCP Transports
核心架构
MCP 包含以下组件:
MCP 客户端(Client):连接服务器,获取工具列表,并将工具信息传递给 LLM。
MCP 服务器(Server):提供工具定义、上下文(资源)和提示(Prompt)能力。
MCP 主机(Host):包含运行 LLM 的宿主环境,如 Claude Desktop、开发者终端等。
MCP Server 通常负责三大类资源管理:
Resource:提供上下文信息,如当前项目文件、数据库数据等。
Tools:函数和工具列表,定义如何执行某个操作。
Prompts:标准化的提示模板,减少重复提示工程。
工作流程
MCP 的调用流程如下:
MCP Client 启动,与 MCP Server 建立连接(如使用 stdio 或 SSE 传输方式)。
Client 向 Server 请求 tools/resource/prompt。
将这些信息与用户消息一起传递给 LLM。
LLM 决定是否使用工具。
如果调用工具,Client 将请求发送到 Server,Server 执行函数。
将函数返回值传递给 LLM。
LLM 根据上下文+结果生成自然语言响应。
响应展示给用户。
支持的传输协议
MCP 支持多种传输方式,常见的包括:
stdio:适合本地进程通信,如 CLI 工具或桌面程序中嵌入的服务。
SSE (Server-Sent Events):适合远程服务,通过 HTTP 和长连接进行数据推送。
目前Claude, cursor, windsurf都是采用的stdio,目前支持MCP协议的产品主要传输方式都是采用的stdio
MCP 的优势
✅ 统一标准:适配 OpenAI、Claude、Gemini 等多种模型。
✅ 模块解耦:将工具、上下文、提示进行解耦,易于复用。
✅ 低耦合集成:工具可以跨项目共享,模型调用方式不依赖具体厂商。
✅ 安全透明:由宿主方控制调用过程,可审计和调试。
相关资源
结论
MCP 协议是大语言模型工具调用场景的通用解决方案,它推动了 Function Calling 的标准化和生态构建。对开发者而言,它意味着:
更强的跨平台能力;
更高的开发效率;
更低的运维成本。
随着多模型协同成为趋势,MCP 是连接工具、上下文与智能体的关键桥梁,值得每一个构建 AI 系统的开发者深入了解与使用。