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 负责“怎么把调用的东西接进来”。
-
[11]
-
[1]
-
[2]
-
[4]
-
[3]
-
[6]
-
[8]
-
[12]
-
[10]
-
[5]
-
[13]
-
[7]
-
[9]
-
[14]
-
[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