MCP 是什么:协议原理与工具调用模型
High Contrast
Dark Mode
Light Mode
Sepia
Forest
4 min read871 words

MCP 是什么:协议原理与工具调用模型

MCP(Model Context Protocol)是 Anthropic 于 2024 年底开源的标准化工具调用协议。它解决了一个长期存在的痛点:AI 模型如何以统一的方式调用外部工具,而不是每个平台各自实现一套私有接口。

为什么需要 MCP

在 MCP 出现之前,AI 工具调用的生态极度碎片化:

MCP 的核心目标是一次实现,处处可用:工具开发者只需写一个符合 MCP 规范的 Server,所有兼容 MCP 的客户端(Claude Desktop、Cursor、Cline 等)都能直接调用。

graph LR A[Claude Desktop] --> P[MCP 协议层] B[Cursor] --> P C[Cline / Continue] --> P P --> S1[文件系统 MCP Server] P --> S2[浏览器控制 MCP Server] P --> S3[数据库 MCP Server] P --> S4[自定义 MCP Server] style P fill:#4A90D9,color:#fff style S1 fill:#27AE60,color:#fff style S2 fill:#27AE60,color:#fff style S3 fill:#27AE60,color:#fff style S4 fill:#E67E22,color:#fff

MCP 的三层架构

MCP 把工具调用拆分为三个角色:

角色 英文 职责
Host(宿主) MCP Host 运行 LLM 的应用,如 Claude Desktop、Cursor
Client(客户端) MCP Client 协议连接层,嵌入在 Host 内部,负责与 Server 通信
Server(服务器) MCP Server 暴露具体工具的进程,可以是本地进程或远程服务
sequenceDiagram participant U as 用户 participant H as Host (Claude Desktop) participant C as MCP Client participant S as MCP Server (文件系统) U->>H: "帮我总结 ~/reports 目录下所有 PDF" H->>C: 判断需要工具调用,发送工具请求 C->>S: list_directory(path="~/reports") S-->>C: ["report_q1.pdf", "report_q2.pdf"] C->>S: read_file(path="~/reports/report_q1.pdf") S-->>C: 文件内容(文本) C-->>H: 工具调用结果 H-->>U: 基于文件内容的总结

MCP 的通信协议

MCP 使用 JSON-RPC 2.0 作为消息格式,通过以下两种传输方式通信:

方式一:stdio(标准输入输出)

适合本地 MCP Server:Host 启动一个子进程,通过 stdin/stdout 交换 JSON 消息。

// 客户端 → 服务端:列出可用工具
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/list",
"params": {}
}
// 服务端 → 客户端:返回工具列表
{
"jsonrpc": "2.0",
"id": 1,
"result": {
"tools": [
{
"name": "read_file",
"description": "读取指定路径的文件内容",
"inputSchema": {
"type": "object",
"properties": {
"path": { "type": "string", "description": "文件的绝对路径" }
},
"required": ["path"]
}
}
]
}
}

方式二:SSE(Server-Sent Events)

适合远程 MCP Server:通过 HTTP + SSE 实现双向通信,支持多客户端连接同一 Server。

MCP 的四类能力

MCP Server 可以向 Client 暴露四类能力,理解这四类是选型的基础:

能力类型 说明 典型场景
Tools(工具) 可执行的函数,有副作用 读文件、写数据库、发 API 请求
Resources(资源) 只读数据源,类似文件系统 暴露配置文件、知识库文档
Prompts(提示模板) 预定义的提示词模板 标准化的任务指令格式
Sampling(采样) Server 可以请求 LLM 生成内容 复杂的嵌套 Agent 场景

日常使用最重要的是 Tools——本书 90% 的内容围绕如何配置和构建 Tools 展开。

一个完整的工具调用流程

graph TD A[用户发送消息] --> B[Host 将消息发给 LLM] B --> C{LLM 决策:
是否需要工具?} C -- 否 --> D[直接生成回复] C -- 是 --> E[生成工具调用请求
tool_name + arguments] E --> F[MCP Client 路由到对应 Server] F --> G[Server 执行工具逻辑] G --> H[返回 tool_result] H --> B D --> I[展示给用户] style C fill:#F39C12,color:#fff style E fill:#4A90D9,color:#fff style G fill:#27AE60,color:#fff

关键点:工具调用结果会重新送入 LLM,LLM 再根据结果决定是否继续调用工具或生成最终回复。这就是为什么复杂任务会出现多轮工具调用。

常见误区

本节执行清单


下一节:MCP vs Function Calling vs Plugins:三者定位对比