四十七:MCP¶
来源:http://mp.weixin.qq.com/s?__biz=MzYyNTk3Njg1NA==&mid=2247484632&idx=1&sn=397ef596645067b26375fae0eb93f6a6&chksm=f01eb7a1c7693eb72bab19537f5979b5cb071527baae46b7297ca2b5da1738a149b332d5db93#rd
1. 学习范围¶
本日主题是 MCP, Model Context Protocol。
本日覆盖: - MCP 的定义、目标和出现背景。
-
MCP 与 Tool Calling、Function Calling、Plugin、RAG、Agent Framework 的区别。
-
MCP 的 Host、Client、Server 架构。
-
MCP Server 暴露的 Tools、Resources、Prompts。
-
MCP Client 提供的 Roots、Sampling、Elicitation 等能力。
-
JSON-RPC 2.0 消息模型、初始化生命周期和能力协商。
-
stdio 与 Streamable HTTP 传输。
-
权限、安全、OAuth、prompt injection 与 tool poisoning 风险。
-
MCP Server 的实现流程、调试方法、评估指标和生产化原则。
截至 2026-07-06,官方 MCP 规范页显示 2025-11-25 为 latest 版本。学习时应以官方最新规范和 SDK 文档为准。
2. MCP 的基本定义¶
MCP 是 Model Context Protocol,即模型上下文协议。它是一套开放协议,用于标准化 AI 应用与外部工具、数据源和上下文服务之间的连接方式。 可以把 MCP 理解为 AI 应用的统一扩展协议:
AI application / host
<-> MCP client
<-> MCP server
<-> local tools / remote services / data sources
3. MCP 解决的问题¶
在没有 MCP 之前,每个 AI 应用接入外部工具都可能使用自己的插件格式、API wrapper、函数调用格式和鉴权方式。
典型问题: - 每个工具需要为不同客户端重复适配。
-
工具能力、参数、返回格式缺乏统一发现机制。
-
本地文件、数据库、浏览器、云服务接入方式不统一。
-
工具权限和用户确认难以标准化。
-
Agent Framework 和具体工具之间耦合严重。
MCP 的价值在于让工具提供方实现一次 MCP Server,就可以被多个支持 MCP 的 Host 使用。
4. MCP 与 Function Calling¶
Function Calling 是模型或平台提供的结构化工具调用能力。MCP 是外部上下文和工具服务的协议。 对比:
二者可以组合:Host 从 MCP Server 发现 tools,再把这些 tools 转成模型可用的 function/tool schema,让模型选择调用。5. MCP 与 Tool Calling¶
Tool Calling 是更宽泛的模型调用工具能力。MCP 是 Tool Calling 的标准化后端协议之一。 Tool Calling 关注: - 模型是否选择工具。
-
参数是否正确。
-
工具结果如何进入上下文。
MCP 关注: - 工具如何被发现。
-
工具如何描述参数。
-
客户端和服务端如何通信。
-
权限、传输、生命周期和能力协商如何标准化。
6. MCP 与 Plugin / OpenAPI¶
Plugin 或 OpenAPI 通常描述 HTTP API 的调用方式。MCP 更面向 AI 上下文交互,除了工具调用,还支持资源、提示模板、客户端 roots、sampling 和 elicitation 等交互能力。 OpenAPI 可以描述一个 REST API;MCP 可以把本地文件系统、数据库、命令行工具、远程 SaaS、知识库和 prompt 模板统一暴露给 AI Host。 MCP Server 内部可以调用 OpenAPI,但 MCP 本身不是 OpenAPI 的简单替代。
7. MCP 与 RAG¶
RAG 主要解决外部知识检索增强生成。MCP 可以作为 RAG 数据源或检索工具的标准化接入方式。 示例:
RAG 更关注检索和生成质量,MCP 更关注 AI 应用如何以统一协议接入检索服务、文档资源和工具。8. MCP 与 Agent Framework¶
Agent Framework 负责规划、状态、记忆、工具选择、多步执行和任务闭环。MCP 负责外部能力的协议化接入。 关系:
例如 LangGraph、Claude Desktop、Cursor、Codex、ChatGPT 等 Host 可以通过 MCP 接入文件系统、GitHub、数据库或内部服务。9. MCP 架构角色¶
MCP 架构有三个核心角色:
-
Host:用户直接交互的 AI 应用,例如 IDE、桌面助手、聊天应用。
-
Client:Host 内部为每个 Server 建立的协议客户端,负责连接、能力协商和消息传递。
-
Server:暴露 tools、resources、prompts 等能力的外部服务。
一个 Host 可以连接多个 MCP Server。每个 Server 通常由一个 Client 管理。
10. Host¶
Host 是用户看到的 AI 应用。它负责: - 管理用户界面和会话。
-
连接一个或多个 MCP Server。
-
决定哪些能力暴露给模型。
-
执行用户确认和权限策略。
-
把工具结果整合进模型上下文。
-
处理安全边界和审计。
Host 不应无条件把所有 MCP Server 能力交给模型使用。它需要根据用户授权、任务上下文和风险等级控制能力暴露。
11. Client¶
MCP Client 是 Host 内部与某个 MCP Server 通信的组件。它负责: - 建立连接。
-
初始化协议。
-
能力协商。
-
发送 JSON-RPC 请求。
-
接收响应和通知。
-
管理 server session。
Client 通常不是用户直接感知的产品层,而是 Host 的协议适配层。
12. Server¶
MCP Server 是提供能力的一端。它可以连接本地资源、远程服务、数据库、文件系统、业务系统或专用模型。 Server 可以暴露: - Tools:模型可调用的动作。
-
Resources:可读取的上下文资源。
-
Prompts:可复用的提示模板。
Server 应尽量小而专注。例如一个 GitHub Server 负责仓库相关能力,一个 Filesystem Server 负责本地文件,一个 Database Server 负责数据库查询。
13. Tools¶
Tools 是 MCP Server 暴露给模型可执行的动作。每个 tool 通常包含名称、描述、输入 schema 和执行逻辑。
示例能力:
- search_issues
- create_pull_request
- query_database
- read_file
- run_test
Tools 可能产生副作用,因此需要权限控制、参数校验、用户确认和审计日志。
14. Resources¶
Resources 是 MCP Server 暴露的可读取上下文。它们类似文件、文档、数据库记录、网页、日志或配置。 Resources 的特点: - 通常通过 URI 标识。
-
主要用于读取上下文。
-
可以被 Host 展示给用户或注入模型上下文。
-
可支持订阅或变更通知。
资源不应被等同于工具。Tool 是动作,Resource 是上下文数据。
15. Prompts¶
Prompts 是 MCP Server 提供的可复用提示模板。它们帮助用户或 Host 以标准方式触发某类工作流。 示例:
review_pull_request(repo, pr_number)
summarize_logs(service, time_range)
generate_sql_report(table, metric)
16. Roots¶
Roots 是 Client 向 Server 提供的边界信息,常用于说明 Server 可以访问的文件系统根目录或工作区范围。 Roots 的安全价值很高。Server 不应默认访问整个机器,而应只在 Host 授权的 root 范围内工作。 示例:
17. Sampling¶
Sampling 是 Server 请求 Client/Host 调用模型的能力。它允许 MCP Server 在需要语言模型能力时,由 Host 控制模型调用,而不是 Server 自带模型密钥。 Sampling 的意义: - Server 可以利用模型生成或判断。
-
Host 保持模型选择、权限和费用控制。
-
用户可在关键模型调用前确认。
Sampling 也带来风险:Server 可能诱导模型处理敏感信息,因此 Host 需要控制上下文和权限。
18. Elicitation¶
Elicitation 是 Server 向用户请求额外信息的机制。Server 在执行工具或资源操作时,如果缺少必要字段,可以通过 Client/Host 向用户提问。 例子:
Elicitation 可以减少模型猜参数的问题,但要由 Host 负责 UI 和用户确认。19. JSON-RPC 消息模型¶
MCP 使用 JSON-RPC 2.0 风格的消息模型。主要消息包括: - Request:需要响应的请求。
-
Response:对请求的成功或失败响应。
-
Notification:不需要响应的通知。
典型请求:
JSON-RPC 的价值在于简单、语言无关、易于跨进程和跨网络传输。20. 初始化生命周期¶
MCP 连接建立后会进入初始化阶段。典型流程:
Client -> Server: initialize
Server -> Client: capabilities and server info
Client -> Server: initialized notification
21. 能力协商¶
能力协商让双方明确“我支持什么”。例如 Server 声明支持 tools 和 resources,Client 声明支持 roots 或 sampling。 能力协商的作用: - 避免调用不支持的方法。
-
支持协议演进。
-
支持不同 Host 和 Server 的兼容。
-
让 UI 能展示可用能力。
在生产系统中,不应假设所有 Server 都支持所有 MCP 原语。
22. stdio 传输¶
stdio 是常见的本地 MCP 传输方式。Host 启动一个本地 Server 进程,通过标准输入输出交换 JSON-RPC 消息。 适合: - 本地开发工具。
-
文件系统访问。
-
本地命令行工具。
-
IDE 插件。
注意:Server 不应把普通日志写到 stdout 混入协议消息。日志应写到 stderr 或使用协议内日志机制。
23. Streamable HTTP 传输¶
Streamable HTTP 是面向远程 MCP Server 的传输方式,适合通过 HTTP 与远程服务通信,并支持流式消息。 适合: - 云服务。
-
企业内部远程工具。
-
需要 OAuth 或集中部署的 Server。
-
多用户共享服务。
远程传输必须重点处理认证、授权、TLS、跨租户隔离、请求限流和审计。
24. Authorization 与 OAuth¶
MCP 远程 Server 常需要认证和授权。官方规范包含 Authorization 相关内容,并支持 OAuth 2.1 语义下的授权流程。 实际工程中要区分: - Host 用户身份。
-
MCP Client 身份。
-
Server 后端资源权限。
-
具体 tool 调用权限。
不能因为用户连接了 MCP Server,就默认允许所有工具执行高风险操作。
25. MCP Server 实现流程¶
一个 MCP Server 的实现流程:
1. 定义 Server 负责的领域边界
2. 设计 tools/resources/prompts
3. 为 tools 编写输入 schema
4. 实现业务逻辑和错误返回
5. 加入权限、确认和审计
6. 选择 stdio 或 HTTP 传输
7. 使用 inspector 或 Host 调试
8. 编写测试和文档
26. MCP Client / Host 集成流程¶
Host 集成 MCP Server 的流程:
1. 加载 server 配置
2. 建立 client 连接
3. 执行 initialize
4. 获取 tools/resources/prompts 列表
5. 按权限和上下文选择暴露给模型的能力
6. 将模型 tool call 转成 MCP tool call
7. 执行并返回 observation
8. 记录 trace 和审计日志
27. MCP 调试工具与 Trace¶
调试 MCP 时应记录完整 trace: - 连接方式和 server 配置。
-
initialize 请求与响应。
-
capabilities。
-
tools/list、resources/list、prompts/list 结果。
-
每次 tool call 的参数、结果、错误和耗时。
-
用户确认记录。
-
模型是否使用了工具结果。
官方生态中常用 MCP Inspector 调试 Server 能力和协议交互。
28. 安全风险¶
MCP 安全风险包括: - Tool poisoning:恶意工具描述诱导模型泄露信息或越权操作。
-
Prompt injection:资源或工具结果中包含恶意指令。
-
Over-permission:Server 权限过宽。
-
Cross-tenant leakage:远程 Server 多租户隔离失败。
-
Command injection:工具参数进入 shell 或数据库时未转义。
-
Data exfiltration:工具读取敏感文件后通过模型输出泄露。
-
Supply chain risk:安装不可信 MCP Server。
MCP 扩大了模型的行动边界,因此必须同时扩大权限治理和审计能力。
29. 生产化原则¶
生产 MCP 系统应遵守: - 最小权限:Server 只访问必要资源。
-
能力最小暴露:Host 只把当前任务需要的 tools 暴露给模型。
-
用户确认:高风险工具执行前必须确认。
-
参数验证:所有 tool 参数必须校验。
-
输出过滤:工具结果进入模型前做安全过滤。
-
审计日志:记录工具调用和权限决策。
-
租户隔离:远程 Server 必须隔离用户和组织数据。
-
版本管理:记录协议版本、Server 版本和 schema 变化。
30. MCP 的典型使用场景¶
典型场景包括: - IDE 访问代码仓库、文件系统、构建工具和测试工具。
-
办公助手访问日历、文档、邮件和知识库。
-
数据分析助手访问数据库、BI 系统和报表。
-
DevOps Agent 访问日志、监控、CI/CD 和云资源。
-
企业知识助手访问内部文档和权限控制检索服务。
-
多模态 Agent 访问图像、语音或视频处理服务。
31. MCP 的评估指标¶
评估 MCP 集成时应关注: - Tool discovery accuracy:Host 是否正确发现和展示工具。
-
Tool selection accuracy:模型是否选对 MCP tool。
-
Argument accuracy:参数是否正确。
-
Execution success rate:工具是否成功执行。
-
Result grounding:最终回答是否基于真实结果。
-
Permission correctness:权限和确认是否正确执行。
-
Latency and cost:协议和工具调用开销。
-
Security incidents:越权、泄露、注入等事件。
32. 核心总结¶
MCP 是 AI 应用连接工具、资源和上下文服务的标准协议。它把外部能力抽象为 Server 暴露的 tools、resources 和 prompts,并通过 Host/Client/Server 架构、JSON-RPC 消息、生命周期、能力协商和传输机制实现互操作。 面试表达时应突出: - MCP 不是模型,也不是单个工具,而是连接 AI Host 与外部能力的协议层。
-
MCP 的核心架构是 Host、Client、Server。
-
Server 主要暴露 Tools、Resources、Prompts;Client/Host 还可能提供 Roots、Sampling、Elicitation。
-
工程重点是能力发现、权限控制、参数校验、trace、安全和生产化治理。
33. 参考资料¶
-
Model Context Protocol 官方介绍: https://modelcontextprotocol.io/docs/getting-started/intro
-
Model Context Protocol 最新规范: https://modelcontextprotocol.io/specification/2025-11-25
-
MCP Server Concepts: https://modelcontextprotocol.io/docs/learn/server-concepts
-
MCP Transports: https://modelcontextprotocol.io/specification/2025-11-25/basic/transports
-
MCP 中文文档入口: https://mcp-docs.cn/introduction
-
MCP 介绍与使用案例: https://developer.volcengine.com/articles/7533551311816818724#heading21
预览时标签不可点<div class="