跳转至

四十七:MCP

来源:http://mp.weixin.qq.com/s?__biz=MzYyNTk3Njg1NA==&mid=2247484632&idx=1&sn=397ef596645067b26375fae0eb93f6a6&chksm=f01eb7a1c7693eb72bab19537f5979b5cb071527baae46b7297ca2b5da1738a149b332d5db93#rd

1. 学习范围

本日主题是 MCP, Model Context Protocol。 img

本日覆盖: - 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
MCP 的目标是定义模型应用如何安全、可发现、可组合地接入外部能力。

3. MCP 解决的问题

在没有 MCP 之前,每个 AI 应用接入外部工具都可能使用自己的插件格式、API wrapper、函数调用格式和鉴权方式。

img

典型问题: - 每个工具需要为不同客户端重复适配。

  • 工具能力、参数、返回格式缺乏统一发现机制。

  • 本地文件、数据库、浏览器、云服务接入方式不统一。

  • 工具权限和用户确认难以标准化。

  • Agent Framework 和具体工具之间耦合严重。

MCP 的价值在于让工具提供方实现一次 MCP Server,就可以被多个支持 MCP 的 Host 使用。

4. MCP 与 Function Calling

Function Calling 是模型或平台提供的结构化工具调用能力。MCP 是外部上下文和工具服务的协议。 对比:

Function Calling: 模型生成函数名和参数,由应用执行。
MCP: 应用通过协议发现和调用 MCP Server 提供的 tools/resources/prompts。
二者可以组合: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 数据源或检索工具的标准化接入方式。 示例:

MCP Server exposes:
- search_docs tool
- read_document resource
- summarize_doc prompt
RAG 更关注检索和生成质量,MCP 更关注 AI 应用如何以统一协议接入检索服务、文档资源和工具。

8. MCP 与 Agent Framework

Agent Framework 负责规划、状态、记忆、工具选择、多步执行和任务闭环。MCP 负责外部能力的协议化接入。 关系:

Agent Framework decides what to do.
MCP provides standardized capabilities to do it.
例如 LangGraph、Claude Desktop、Cursor、Codex、ChatGPT 等 Host 可以通过 MCP 接入文件系统、GitHub、数据库或内部服务。

9. MCP 架构角色

MCP 架构有三个核心角色:

img

  • 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)
Prompts 的价值在于封装领域任务入口,让 Host 可以发现并调用这些高质量模板。

16. Roots

Roots 是 Client 向 Server 提供的边界信息,常用于说明 Server 可以访问的文件系统根目录或工作区范围。 Roots 的安全价值很高。Server 不应默认访问整个机器,而应只在 Host 授权的 root 范围内工作。 示例:

root: file:///workspace/project-a

17. Sampling

Sampling 是 Server 请求 Client/Host 调用模型的能力。它允许 MCP Server 在需要语言模型能力时,由 Host 控制模型调用,而不是 Server 自带模型密钥。 Sampling 的意义: - Server 可以利用模型生成或判断。

  • Host 保持模型选择、权限和费用控制。

  • 用户可在关键模型调用前确认。

Sampling 也带来风险:Server 可能诱导模型处理敏感信息,因此 Host 需要控制上下文和权限。

18. Elicitation

Elicitation 是 Server 向用户请求额外信息的机制。Server 在执行工具或资源操作时,如果缺少必要字段,可以通过 Client/Host 向用户提问。 例子:

Server: 需要确认部署环境。
Host: 向用户展示 staging / production 选项。
User: 选择 staging。
Elicitation 可以减少模型猜参数的问题,但要由 Host 负责 UI 和用户确认。

19. JSON-RPC 消息模型

MCP 使用 JSON-RPC 2.0 风格的消息模型。主要消息包括: - Request:需要响应的请求。

  • Response:对请求的成功或失败响应。

  • Notification:不需要响应的通知。

典型请求:

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/list",
  "params": {}
}
JSON-RPC 的价值在于简单、语言无关、易于跨进程和跨网络传输。

20. 初始化生命周期

MCP 连接建立后会进入初始化阶段。典型流程:

Client -> Server: initialize
Server -> Client: capabilities and server info
Client -> Server: initialized notification
初始化阶段会协商协议版本、客户端能力、服务端能力和实现信息。能力协商决定后续是否可以使用 tools、resources、prompts、sampling 等功能。

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. 编写测试和文档
Server 应保持职责单一,避免一个 Server 暴露过多无关能力。

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 和审计日志
Host 是安全边界的关键位置。它决定什么能力能被模型看到、什么时候需要用户确认。

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="