---
title: 万字拆解 MCP,附带工程实践
description: 深入解析 MCP 协议核心概念,涵盖 MCP 四大核心能力、四层分层架构、JSON-RPC 2.0 通信机制及生产级 MCP Server 开发最佳实践。
category: AI 应用开发
icon: “plug”
head:
- - meta
- name: keywords
content: MCP,Model Context Protocol,JSON-RPC,Function Calling,AI Agent,工具接入,Anthropic
---
在 LLM 应用开发从”单体调用”向”复杂 Agent”演进的当下,开发者最头疼的其实不是换模型——框架早把不同模型的 API 差异给封装好了。**真正让人抓狂的是工具接入的碎片化**:每次想让 AI 用上 GitHub、本地文件或者 MySQL,就得为 Claude、GPT、DeepSeek 分别写一套适配代码。改一个工具接口,得同步维护好几套代码,又烦又容易出错。
**MCP (Model Context Protocol)** 的出现,就是要终结这种混乱。它被形象地称为 **“AI 领域的 USB-C 接口”**,通过统一的通信协议,让工具开发者**一次开发 MCP Server**,之后所有支持 MCP 的 AI 应用都能直接复用,真正实现模型与外部数据源、工具的高效解耦。
今天 Guide 就来分享几道 MCP 基础概念相关的问题,希望对大家有帮助。本文接近 1.6w 字,建议收藏,通过本文你讲搞懂:
1. ⭐ 什么是 MCP?它解决了什么核心问题?
2. ⭐ MCP、Function Calling 和 Agent 有什么区别与联系?
3. MCP v1.0 的四大核心能力是什么?
4. ⭐ MCP 的四层分层架构是如何运行的?
5. 为什么 MCP 选择了 JSON-RPC 2.0 而非 RESTful?
6. ⭐️ MCP 支持哪些传输方式?
7. ⭐ 生产环境下开发 MCP Server 有哪些必知的最佳实践?
## MCP 基础概念
### ⭐️ 什么是 MCP?它解决了什么问题?
**MCP (Model Context Protocol)** 是 Anthropic 于 2024 年提出的开放协议,被誉为 **"AI 领域的 USB-C 接口标准"**。它通过 JSON-RPC 2.0 统一了 LLM 与外部数据源/工具的通信规范,解决了 AI 应用开发中的**复杂性和碎片化**问题。
它允许 AI 接入数据源(如本地文件、数据库)、工具(如搜索引擎、计算器)以及工作流(如特定提示词),使其能够获取关键信息并执行具体任务。

在 MCP 出现之前,开发者为不同 LLM(OpenAI GPT、Claude、文心一言等)和不同后端系统集成工具时,需要编写大量**定制化的适配代码**。这导致了:
- **重复工作**:同一功能需要为每个 LLM 重新实现。
- **高昂维护成本**:API 变更需要多处同步修改。
- **生态碎片化**:缺乏统一的工具接口标准。
MCP 通过定义**统一的通信协议**,让一次开发的工具可以跨多个 LLM 平台使用,就像 USB-C 接口让不同设备可以通用充电线一样。
> 🌈 **拓展一下**:
>
> MCP 的核心价值在于**解耦和标准化**。就像 HTTP 统一了网页传输、RESTful API 统一了服务接口一样,MCP 统一了 AI 与外部世界的交互方式。这种标准化对于 AI 应用的规模化落地至关重要。
### MCP 的四大核心能力是什么?
MCP v1.0 定义了四种核心能力类型,覆盖了 LLM 与外部交互的主要场景:
| **能力** | **核心作用** | **实际场景举例** | **失败路径与边界** |
| ---------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | --------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------- |
| **Resources (资源)** | **只读数据流**。让模型能像读取本地文件一样读取外部数据。 | 自动读取 GitHub Repo 里的文档、数据库中的历史记录 | 文件不存在返回 JSON-RPC 错误码 `-32004`;大文件需实现 **Chunking** 分块加载(建议单块 < 100KB) |
| **Tools (工具)** | **可执行动作**。模型可以主动触发的代码或 API。 | 自动运行一段 Python 脚本、在 Slack 发送一条消息、执行 SQL | **必须幂等设计**:防重试风暴;超时需配置退避策略(Backoff),建议 **P99 延迟 < 200ms** |
| **Prompts (提示模板)** | **预设指令集**。服务器提供给模型的"标准化操作指南"。 | "重构这段代码"、"生成周报"等特定业务场景的 Prompt 模板 | 模板渲染失败需返回清晰错误信息 |
| **Sampling (采样)** | **让 MCP Server 能够请求 Host 端的 LLM 进行推理生成**。这打破了单向数据流,允许 Server 在获取数据后,利用 Host 强大的 LLM 能力进行总结、理解或生成,再将结果返回给用户。 | 日志分析:Server 读取几万行日志后,请求 Host 的 LLM 总结错误模式和根因。代码审查:代码分析工具提取代码片段,请求 Host 的 LLM 进行语义分析和生成优化建议。 | 超时需退避重试;**P99 协议握手延迟 < 500ms**(注:不包含 LLM 生成耗时);用户拒绝时需优雅降级 |
> **工程提示**:Tools 的幂等性设计至关重要。由于网络抖动或 LLM 推理不确定性,同一 Tool 可能被重复调用。建议通过唯一请求 ID(idempotency-key)或业务层面的去重机制(如数据库唯一索引)保证幂等。
### 为什么需要 MCP?
#### 1. 弥补 LLM 天然短板
LLM 在以下方面存在局限:
| 短板 | 说明 | MCP 的解决方案 |
| -------------- | --------------------------- | ----------------------------- |
| **精确计算** | LLM 不擅长数值计算 | 通过 Tools 调用计算器或 Excel |
| **实时信息** | 训练数据有截止日期 | 通过 Resources 获取最新数据 |
| **系统交互** | 无法直接操作本地文件/数据库 | 通过 Tools 桥接系统 API |
| **定制化操作** | 难以执行特定业务逻辑 | 通过 Tools 封装业务能力 |
#### 2. 简化集成复杂度
**传统方式**:
```
每个 LLM → 各自的 Function Calling 格式 → 定制化适配代码 → 外部系统
```
**使用 MCP 后**:
```
多个 LLM → 统一的 MCP 协议 → 一次开发的 MCP Server → 外部系统
```
#### 3. 扩展 AI 应用边界
MCP 让 LLM 能够:
- 📁 访问本地文件系统,构建个人知识库
- 🗄️ 查询和操作数据库(MySQL、ES、Redis)
- 🌐 调用外部 API(天气、地图、GitHub)
- 🤖 控制浏览器和自动化工具
- 📊 执行数据分析和可视化
### ⭐️ MCP、Function Calling 和 Agent 有什么区别?
这是面试中的高频问题,需要从**定位、层次、关系**三个维度回答:
| 对比维度 | **MCP v1.0** | **Function Calling** | **Agent** |
| ------------ | ------------------------------------- | --------------------------------------------------------------------- | -------------- |
| **定位** | **协议标准** | **调用机制** | **系统概念** |
| **本质** | 应用层网络协议(JSON-RPC 2.0) | LLM推理层能力(NL→JSON映射) | 任务执行系统 |
| **状态模型** | 有状态(持久连接,支持能力发现+执行) | 隐状态(多轮对话中保持上下文,如 OpenAI GPT-4o 的 tool_call_id 跟踪) | 可松可紧 |
| **提出方** | Anthropic (2024) | 各模型厂商(OpenAI、Anthropic等) | 学术界/工业界 |
| **耦合度** | 松耦合(跨平台) | 紧耦合(依赖特定模型) | 可松可紧 |
| **实现方式** | 统一的 JSON-RPC | 各厂商私有格式 | 多种技术组合 |
| **应用场景** | 工具集成标准化 | 单次/多次函数调用 | 复杂任务自动化 |
**关系图解:**

**典型场景举例:**
| 场景 | 使用方案 | 说明 |
| --------------------------- | -------------------- | ---------------------------- |
| 让 Claude 读取本地文件 | **MCP** | 需要标准化接口,可跨平台复用 |
| 调用 OpenAI 的 weather_tool | **Function Calling** | 模型原生能力,简单直接 |
| 自动化分析代码并修复 Bug | **Agent** | 需要多步规划和决策 |
| 构建团队共享的知识库工具 | **MCP** | 一次开发,多处使用 |
> 🐛 **常见误区**:
>
> 误区:"MCP 会取代 Function Calling"
>
> 纠正:**Function Calling 属于 LLM 的推理层能力**(将自然语言映射为结构化 JSON)。在 OpenAI GPT-4o 等模型中,它通过 `tool_call_id` 在多轮对话中保持**隐状态**,并非严格无状态;而 **MCP 是应用层的网络通信协议**(基于 JSON-RPC 2.0),提供**标准化的跨平台能力发现(Discovery)和执行(Execution)**。两者是不同层次、不同维度的协作关系:MCP 解决"如何跨平台标准化接入工具",Function Calling 解决"模型如何将自然语言转化为结构化调用"。
## MCP 架构
### ⭐️ MCP 的架构包含哪些核心组件?
MCP 采用**分层架构设计**,包含四个核心组件:
```mermaid
flowchart TB
%% 定义全局样式(2026 规范)
classDef client fill:#00838F,color:#FFFFFF,stroke:none,rx:10,ry:10
classDef infra fill:#9B59B6,color:#FFFFFF,stroke:none,rx:10,ry:10
classDef business fill:#E99151,color:#FFFFFF,stroke:none,rx:10,ry:10
classDef storage fill:#E4C189,color:#333333,stroke:none,rx:10,ry:10
subgraph Host["MCP Host (AI 应用)"]
direction TB
style Host fill:#F5F7FA,color:#333333,stroke:#005D7B,stroke-width:2px
App["Claude Desktop
VS Code / Cursor"]:::client
end
subgraph Layer["MCP 层"]
direction LR
style Layer fill:#F5F7FA,color:#333333,stroke:#005D7B,stroke-width:2px
MCPClient["MCP Client
(连接管理)"]:::infra --> MCPServer["MCP Server
(功能接口)"]:::business
end
subgraph Data["数据源层"]
direction LR
style Data fill:#F5F7FA,color:#333333,stroke:#005D7B,stroke-width:2px
LocalFiles["本地文件
Git 仓库"]:::storage
ExternalAPI["外部 API
GitHub / 天气"]:::storage
end
App --> MCPClient
MCPServer --> LocalFiles
MCPServer --> ExternalAPI
linkStyle default stroke-width:2px,stroke:#333333,opacity:0.8
```
**组件详解:**
| 组件 | 定位 | 职责 | 代表产品 | 失败路径与性能指标 |
| --------------- | ----------- | ----------------------------------------------- | -------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------- |
| **MCP Host** | 用户交互层 | 运行 AI 应用,托管 LLM,管理 MCP Client | Claude Desktop v1.0、VS Code (Cline)、Cursor | Server 崩溃时需自动重连;建议支持 50+ 并发 Server 连接 |
| **MCP Client** | 连接管理层 | 与 MCP Server 建立 1:1 连接,转发 JSON-RPC 请求 | 集成在 Host 内部 | **失败路径**:断连时需指数退避重连(初始 1s,最大 60s);**性能指标**:连接建立 P99 < 100ms |
| **MCP Server** | 能力暴露层 | 实现 MCP 协议,暴露 Resources/Tools 等能力 | 开发者使用 SDK 开发 | **失败路径**:资源不存在返回 `-32004`,权限不足返回 `-32003`;**性能指标**:Tool 调用 P99 < 200ms,Resources 加载 P99 < 500ms |
| **Data Source** | 数据/服务层 | 提供实际数据或执行操作 | 文件系统、数据库、外部 API | 需实现连接池和熔断,防止级联故障 |
**重要特性:**
1. **一对多关系**:一个 Host 可以管理多个 Client,每个 Client 对应一个 Server
2. **解耦设计**:Client 和 Server 通过 JSON-RPC 通信,不依赖具体实现
3. **多实例支持**:可以同时连接多个不同功能的 MCP Server
> 🐛 **常见误区**:
>
> 很多开发者认为 Host 直接连接 Server。实际上,Host 内部会为每个配置的 Server 创建独立的 Client 实例。这种设计使得不同 Server 之间的连接互不影响。
### ⭐️ 请描述 MCP 的完整工作流程
MCP 的工作流程可以分为 **7 个步骤**:
```mermaid
sequenceDiagram
participant U as User
participant H as Host (LLM)
participant C as MCP Client
participant S as MCP Server
participant D as Data Source
U->>H: 提问: "分析这个仓库的最新提交"
H->>H: 思考 (Chain of Thought)
H->>C: Call Tool: list_commits()
C->>S: JSON-RPC Request
{method: "tools/call", params: ...}
S->>D: Fetch Git Logs
D-->>S: Return Logs
S-->>C: JSON-RPC Response
{result: ...}
C-->>H: Tool Output
H->>H: 思考与总结
H-->>U: 返回分析结果
```
**步骤详解:**
| 步骤 | 描述 | 关键点 |
| ------------------ | ------------------------------------ | ------------------------------ |
| **1. 用户请求** | 用户通过 Host 发送问题 | Host 首先接收用户输入 |
| **2. LLM 推理** | Host 内部的 LLM 判断是否需要外部能力 | 使用 Chain of Thought 进行思考 |
| **3. 工具调用** | LLM 决定调用哪个 Tool | 通过 Client 发起调用 |
| **4. 协议转换** | Client 将调用转换为 JSON-RPC 请求 | 标准化的消息格式 |
| **5. Server 处理** | MCP Server 解析请求并访问数据源 | 业务逻辑的真正执行者 |
| **6. 数据返回** | 结果沿原路返回给 LLM | JSON-RPC Response |
| **7. 最终生成** | LLM 结合工具结果生成最终回复 | 用户体验的核心环节 |
### MCP 使用什么通信协议?
#### JSON-RPC 2.0
MCP 采用 **JSON-RPC 2.0** 作为应用层通信协议,原因如下:
| 优势 | 说明 |
| ------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **轻量级** | 相比 gRPC,JSON-RPC 无需通过 Protobuf 进行额外的跨语言编译和桩代码生成,降低了接入阻力。但作为 Trade-off,JSON-RPC 缺乏原生的强类型约束,MCP 必须在应用层强依赖 JSON Schema 对 Tool 的入参进行严格的结构化声明与运行时校验。 |
| **传输无关** | 可以运行在 stdio、HTTP、WebSocket 等多种传输层之上 |
| **易调试** | 纯文本格式,便于人工阅读和调试 |
| **广泛支持** | 几乎所有编程语言都有成熟的 JSON-RPC 库 |
**JSON-RPC 消息格式:**
```json
// 请求
{
"jsonrpc": "2.0",
"method": "tools/call",
"params": {
"name": "read_file",
"arguments": { "path": "/path/to/file.txt" }
},
"id": 1
}
// 响应
{
"jsonrpc": "2.0",
"id": 1,
"result": {
"content": [
{
"type": "text",
"text": "文件内容..."
}
]
},
"error": null // error 和 result 互斥
}
```
#### JSON-RPC vs HTTP
| 对比维度 | HTTP (RESTful) | JSON-RPC |
| ------------ | ---------------------------- | -------------------------- |
| **语义模型** | 面向资源 (Resource-Oriented) | 面向操作 (Action-Oriented) |
| **调用方式** | GET/POST/PUT/DELETE + URI | method 名 + 参数 |
| **数据格式** | 灵活 (JSON/XML/HTML) | 严格 JSON |
| **功能特性** | 丰富 (状态码/缓存/重定向) | 极简 (仅 RPC 规范) |
| **适用场景** | 公开 API、Web 服务 | 内部通信、工具调用 |
> 🌈 **拓展阅读**:
>
> - [JSON-RPC 2.0 官方规范](https://www.jsonrpc.org/specification)
> - [A gRPC transport for the Model Context Protocol](https://cloud.google.com/blog/products/networking/grpc-as-a-native-transport-for-mcp)
### ⭐️ MCP 支持哪些传输方式?
#### stdio(标准输入/输出)
| 特性 | 说明 |
| ------------ | ------------------------------------------------------- |
| **适用场景** | 本地进程间通信 (IPC) |
| **实现方式** | Host 启动 MCP Server 作为子进程,通过 stdin/stdout 通信 |
| **优势** | 极度轻量,无网络开销,启动快 |
| **典型应用** | Claude Desktop、本地 IDE 插件 |
**安全提示**:stdio 模式下 MCP Server 与 Host 同权限,恶意 Server 可读取任意文件。生产环境必须采用以下防护措施:
- **系统级隔离**:引入基于 **cgroups** 与 **namespace** 的沙箱(如 Docker/gVisor),建议限制 **CPU < 10%** 配额、内存 < 512MB,防止资源耗尽。
- **进程管理**:配置子进程的 **SIGTERM/SIGKILL** 优雅退出钩子,防止僵尸进程和文件描述符泄漏。
- **源码审计**:审阅社区 Server 的源代码,只使用可信来源的 Server;建议建立沙箱突破审计日志。
- **网络限制**:沙箱内禁止出站网络连接,防范数据外泄。
**HTTP/SSE 模式增强安全**:
- **认证机制**:添加 OAuth 2.0 或 API Key 认证。
- **传输加密**:强制 TLS 1.3,防止中间人攻击。
- **访问控制**:基于 RBAC 限制 Resources 和 Tools 的访问权限。
#### HTTP/SSE(Server-Sent Events)
| 特性 | 说明 |
| ------------ | -------------------------------- |
| **适用场景** | 远程部署、独立服务 |
| **实现方式** | HTTP POST 发送请求,SSE 推送响应 |
| **优势** | 易穿透防火墙,支持流式推送 |
| **典型应用** | Web 应用、团队共享的 MCP 服务 |
**选型决策**:

#### 传输层异常与背压分析(生产级考量)
| 风险类型 | stdio 模式 | HTTP/SSE 模式 | 工程防御手段 |
| ------------------------ | --------------------------------------------------------------------- | ------------------------ | ---------------------------------------------------------- |
| **子进程僵死** | 高:Server 异常退出时,Host 可能未正确回收子进程,产生 Zombie Process | 低:无子进程概念 | 配置 `SIGCHLD` 信号处理器 + `waitpid` 兜底回收 |
| **文件描述符泄漏** | 高:stdin/stdout 管道未关闭会导致 FD Leak,最终耗尽系统资源 | 中:长连接未及时释放 | 设置 FD 上限(`ulimit -n`),实现连接池健康检查 |
| **长连接中断** | 中:Server 崩溃导致管道断裂 | 高:网络抖动触发重连风暴 | 指数退避重试 + 熔断机制(Circuit Breaker) |
| **背压(Backpressure)** | 缺失:stdio 无流量控制机制 | 部分:SSE 可控制推送速率 | 实现滑动窗口限流,超出缓冲区时返回 `429 Too Many Requests` |
## 工程实践
### 开发 MCP Server 时有哪些最佳实践?
#### 1. 工具粒度设计 (Tool Granularity)
**原则:单一职责,语义明确**
| 反面示例 | 正面示例 |
| -------------------------------- | ---------------------------------------------------------- |
| `execute_sql(sql)` | `get_user_by_id(id)` / `list_active_orders()` |
| `file_operation(op, path, data)` | `read_file(path)` / `write_file(path, content)` |
| `database(action, params)` | `query_userByEmail(email)` / `updateUserProfile(id, data)` |
**设计建议**:
- 工具名称使用**动词+名词**形式:`get_`、`list_`、`create_`、`update_`、`delete_`。
- 参数类型要**明确且可验证**:使用 JSON Schema 定义`。
- 避免过度抽象:不要把多个操作塞进一个工具`。
#### 2. Context Window 管理
MCP 的 Resources 能力可能一次性加载大量文本,导致:
| 问题 | 后果 | 解决方案 |
| -------------- | ---------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| 上下文溢出 | LLM 无法处理完整内容 | 实现**分块 (Chunking)** 逻辑 |
| 中间丢失 | LLM 忽略上下文中间的内容 | 提供**摘要 (Summarization)** |
| 成本过高 | Token 消耗过大 | 实现**按需加载**和**增量同步** |
| **OOM 风险** | **内存溢出导致 Server 被 Kill** | **严格限制单条资源大小(如 < 10MB),超出时返回元数据而非全文** |
| **Token 爆炸** | **超出上下文窗口触发截断,丢失关键信息** | **限制绝对字符长度(如 < 1MB)、返回分页元数据,或依赖 Host 端的 Context Window 截断机制**。**注意:** 由于 MCP Server 是模型无感知的,严禁硬编码特定模型的 Tokenizer(如 `tiktoken`)进行预计算,否则接入其他 LLM 平台时会失效。 |
#### 3. 错误处理与用户体验
| 错误类型 | 处理方式 |
| ------------------ | -------------------------- |
| **参数验证失败** | 返回清晰的错误提示和建议 |
| **权限不足** | 说明所需权限和申请方式 |
| **服务暂时不可用** | 提供重试机制和预计恢复时间 |
| **部分失败** | 明确哪些操作成功、哪些失败 |
#### 4. 安全防护
| 风险 | 防护措施 |
| ---------------- | ---------------------------- |
| **路径遍历攻击** | 验证文件路径,限制访问目录 |
| **SQL 注入** | 使用参数化查询,禁止拼接 SQL |
| **敏感信息泄露** | 脱敏处理,避免返回完整凭证 |
| **资源滥用** | 实现速率限制和配额管理 |
#### 5. 调试与监控
**推荐工具**:
- [**MCP Inspector**](https://modelcontextprotocol.io/docs/tools/inspector):官方调试工具,可模拟 Host 发送请求
```bash
npx @modelcontextprotocol/inspector node my-server.js
```
- **日志记录**:记录所有 JSON-RPC 请求和响应
- **性能监控**:跟踪响应时间、错误率、Token 消耗
- **健康检查**:实现 `/health` 端点用于监控
### 如何开发一个自定义的 MCP 服务器?
**开发流程:**
```
1. 选择 SDK
├─ TypeScript (官方首选)
├─ Python
└─ Java (Spring AI)
2. 定义能力
├─ Resources: 暴露哪些数据?
├─ Tools: 提供哪些功能?
└─ Prompts: 有哪些常用操作模板?
3. 实现业务逻辑
└─ 连接数据源/服务,实现具体功能
4. 本地测试
└─ 使用 MCP Inspector 验证
5. 部署配置
└─ 在 Host 中配置 Server 启动命令
```
**快速示例 (Python SDK):**
```python
from mcp.server import Server
from mcp.types import Tool, TextContent
# 创建 Server 实例
server = Server("my-mcp-server")
# 定义 Tool
@server.tool()
async def get_weather(city: str) -> str:
"""获取指定城市的天气信息"""
# 实际业务逻辑
return f"{city} 今天晴天,温度 25°C"
# 定义 Resource
@server.resource("weather://forecast")
async def weather_forecast() -> str:
"""返回未来一周天气预报"""
return "未来七天天气预报..."
# 启动 Server
if __name__ == "__main__":
server.run()
```
**配置示例 (Claude Desktop):**
```json
{
"mcpServers": {
"my-server": {
"command": "python",
"args": ["/path/to/my_server.py"],
"env": {
"API_KEY": "your-api-key"
}
}
}
}
```
> ⚠️ **工程提示**:在生产环境中,Python MCP Server 依赖 `mcp` SDK,直接使用全局 `python` 命令会因依赖缺失而启动失败。请使用虚拟环境中的 Python 解释器路径(如 `/path/to/venv/bin/python`),或推荐使用现代化包管理器(如 `uvx` 或 `npx`),例如:
>
> ```json
> {
> "command": "uvx",
> "args": ["--from", "mcp", "python", "/path/to/my_server.py"]
> }
> ```
>
> 启动失败时,可查看 Claude Desktop 的 `mcp.log` 排查问题。
## 拓展阅读
### 官方资源
- [MCP 官方文档](https://modelcontextprotocol.io/)
- [MCP GitHub 仓库](https://github.com/modelcontextprotocol)
- [MCP Inspector 调试工具](https://github.com/modelcontextprotocol/inspector)
### 社区资源
- [Awesome MCP Servers](https://github.com/punkpeye/awesome-mcp-servers)
- [MCP 官方 SDK](https://github.com/modelcontextprotocol/servers)
### 推荐文章
1. [从原理到示例:Java开发玩转MCP - 阿里云开发者](https://mp.weixin.qq.com/s/TYoJ9mQL8tgT7HjTQiSdlw)
2. [MCP 实践:基于 MCP 架构实现知识库答疑系统 - 阿里云开发者](https://mp.weixin.qq.com/s/ETmbEAE7lNligcM_A_GF8A)
3. [从零开始教你打造一个MCP客户端](https://mp.weixin.qq.com/s/zYgQEpdUC5C6WSpMXY8cxw)
## 总结
MCP 协议的出现,标志着 AI 应用开发从"各自为战"走向"标准化协作"的时代。通过本文,我们系统梳理了 MCP 的核心知识:
**核心要点回顾**:
1. **MCP 是什么**:AI 领域的"USB-C 接口",通过 JSON-RPC 2.0 统一了 LLM 与外部工具的通信规范
2. **四大核心能力**:Resources(只读数据)、Tools(可执行动作)、Prompts(预设指令)、Sampling(请求 LLM 推理)
3. **四层架构**:Host → Client → Server → Data Source,一对多连接,模型无感知
4. **传输方式**:stdio(本地)、HTTP/SSE(远程),各有适用场景
5. **生产级实践**:工具粒度设计、Context Window 管理、安全防护、失败路径处理
**与其他概念的区别**:
- MCP vs Function Calling:MCP 是协议标准,Function Calling 是 LLM 能力
- MCP vs Agent:MCP 是基础设施,Agent 是应用层系统
**学习建议**:
1. **动手实践**:写一个简单的 MCP Server,理解 Host-Client-Server 的交互流程
2. **阅读官方文档**:MCP 规范还在快速演进,保持对官方文档的关注
3. **关注生态**:Awesome MCP Servers 收集了大量开源实现,是学习的好素材
MCP 为 AI 应用的规模化落地提供了标准化的基础设施,掌握它将让你在 AI 应用开发中如虎添翼。