MCP 详解

MCP(Model Context Protocol)是一个开放协议,用来标准化 AI 应用与外部数据源、工具之间的连接方式。它的核心思路借鉴了 Language Server Protocol(LSP):LSP 让编辑器不用为每种编程语言单独适配,MCP 想让 AI 应用不用为每个工具单独适配[1]。

它解决什么问题

在 MCP 之前,给 AI 接一个外部工具(比如查数据库、操作 Git、搜网页),每个 AI 产品都要写一套自己的对接代码。换一个模型或换一个工具,对接就要重写。MCP 把“AI 应用”和“工具提供方”拆开:工具方只需实现一个 MCP 服务器,任何支持 MCP 的 AI 应用都能连上来用。一次开发,多处复用。

三个角色

MCP 的架构分三层[1]:

  • Host(宿主):你用的 AI 应用,比如 Claude Code、ChatGPT、一个 IDE。它发起连接。

  • Client(客户端):宿主内部的连接器,负责与某个具体的服务器保持一对一通信。

  • Server(服务器):提供能力的一方。可以是一个本地进程(stdio),也可以是一个远程服务(HTTP)。

服务器提供什么

MCP 服务器可以向客户端暴露三类东西[1]:

  • Resources(资源):可读取的上下文数据,比如文件内容、数据库记录、文档。用 URI 标识,适合“让模型看到某样东西”。

  • Prompts(提示):预置的提示模板,让用户或宿主直接调用,适合“把一套固定用法封装好”。

  • Tools(工具):模型可以调用的函数,带 JSON Schema 描述的参数和输出。这是最常用的能力,适合“让模型做一件事”。

工具调用是 MCP 最核心的用途。一个工具定义包括名字、描述、输入参数 schema,可选输出 schema。模型看到这些描述后决定调不调、传什么参数,宿主执行后把结果回填给模型[2][3]。

与 Function Calling 的关系

这是最容易混淆的地方。两者不是替代关系,是不同层的东西[4][5]。

Function Calling 是模型 API 层面的能力:你给模型一份工具列表(JSON Schema),模型在对话中返回“我要调哪个函数、参数是什么”。它负责决策,不负责执行。真正执行的是你写的代码。

MCP 是工具发现与执行的协议层。它规定了一个工具服务器如何向 AI 应用声明自己有哪些工具、参数长什么样、如何被调用。它不管模型怎么选,只管“工具怎么被找到、怎么被调起来”。

用比喻说:Function Calling 是项目经理决定把活派给谁,MCP 是公司和外包团队之间签合同、交接工作的标准流程。两者配合才完整:模型用 Function Calling 决定调什么,宿主用 MCP 去实际调。

怎么用(以 Claude Code 为例)

在 Claude Code 里添加一个 MCP 服务器,命令很直接[6]:

  
# 添加一个远程 HTTP 服务器
  
claude mcp add --transport http claude-code-docs https://code.claude.com/docs/mcp
  

  
# 查看已添加的服务器和连接状态
  
claude mcp list
  

  
# 在会话中使用
  
claude
  
> Use the claude-code-docs server to look up what MCP_TIMEOUT does
  

本地服务器(stdio 传输)则是启动一个子进程,通过标准输入输出通信。配置里用 command 和 args 指定启动命令。远程服务器用 --transport http 加 URL,需要鉴权时用 --header 传令牌[6][7]。

安全边界

MCP 的能力是“任意数据访问”和“任意代码执行”,所以安全模型的核心原则很明确[1]:

  • 用户必须明确同意每一次数据访问和工具调用。宿主应该在调用工具前弹出确认,让用户知道要执行什么。

  • 工具描述不可盲信。第三方服务器提供的工具描述(包括 annotations)可能被恶意构造,除非服务器来源可信,否则应视为不可信输入。

  • 最小权限。Agent 的身份和权限应该只覆盖它需要做的事,不要给一个查天气的服务器写文件的权限。

Google Cloud 的安全文档还区分了两种 Agent 使用模式的风险[8]:Human-in-the-Middle(人批准每一步)风险低但依赖人判断;Agent-Only(自动执行)则完全依赖 Agent 的实现质量,容易受提示注入和工具链滥用影响。

OWASP 也发布了第三方 MCP 服务器安全使用指南,覆盖工具投毒、提示注入、记忆投毒、工具干扰等风险[9]。

一个容易踩的坑:状态

MCP 协议本身没有“会话”概念。服务器不能依赖连接上的隐式状态来关联两次工具调用。需要跨调用保持状态的场景(购物车、打开的浏览器上下文、数据库事务),必须通过显式句柄实现:一个创建工具返回一个 ID,后续工具接受这个 ID 作为参数[2]。

当前版本与扩展

最新规范是 2026-07-28 版,已经取消了早期的 initialize 握手,改为每个请求自带协议版本,服务器独立接受或拒绝。同时定义了可选扩展,比如 Tasks(长时间运行任务的异步执行)、Skills over MCP(结构化的 Agent 工作流指令)、MCP Apps(对话内嵌交互 UI)[1][10]。

一句话总结

MCP 是 AI 工具生态的“插座标准”。 它让工具方只写一次服务器,就能被所有支持 MCP 的 AI 应用使用;让 AI 应用不用为每个工具单独集成。它和 Function Calling 是配合关系:模型负责“想调什么”,MCP 负责“怎么把调用的东西接进来”。


  1. [11]

  2. [1]

  3. [2]

  4. [4]

  5. [3]

  6. [6]

  7. [8]

  8. [12]

  9. [10]

  10. [5]

  11. [13]

  12. [7]

  13. [9]

  14. [14]

  15. [15]

参考来源

[1] Specification — https://modelcontextprotocol.io/specification/2026-07-28/index

[2] Tools — https://modelcontextprotocol.io/specification/2026-07-28/server/tools

[3] 来源 5 — https://developers.openai.com/plugins/build/mcp-server.md

[4] Function Calling 会被 MCP 取代吗?理清两者关系与使用细节 — https://developer.aliyun.com/article/1755971#1

[5] 别再被误导了!一文讲透 MCP 与 Function Calling 的真实关系 — https://developer.aliyun.com/article/1738723#1

[6] 连接到 MCP 服务器 - Claude Code Docs — https://code.claude.com/docs/zh-CN/mcp-quickstart

[7] 通过 MCP 将 Claude Code 连接到工具 - Claude Code Docs — https://code.claude.com/docs/zh-CN/mcp

[8] AI security and safety | Google Cloud MCP servers | Google Cloud Documentation — https://docs.cloud.google.com/mcp/ai-security-safety?source=post_page-----900af267b7bd-----------------------------------------

[9] CheatSheet - A Practical Guide for Securely Using Third-Party MCP Servers 1.0 — https://genai.owasp.org/resource/cheatsheet-a-practical-guide-for-securely-using-third-party-mcp-servers-1-0/?utm_source=chatgpt.com

[10] Versioning and Compatibility — https://modelcontextprotocol.io/specification/2026-07-28/basic/versioning

[11] Model Context Protocol (MCP): A Lightweight, Modular Framework for Tool-Augmented LLM Agents — https://ieeexplore.ieee.org/document/11405153#1

[12] Overview - Model Context Protocol — https://modelcontextprotocol.io/specification/2025-06-18/basic

[13] protomcp - protomcp — https://pypi.org/project/protomcp/0.3.1/#1

[14] Specification - Model Context Protocol — https://modelcontextprotocol.io/specification/2025-06-18

[15] Resources — https://modelcontextprotocol.io/specification/2026-07-28/server/resources