目录
MCP(Model Context Protocol)是一份公开规范,让 AI 应用(Claude Code、ChatGPT、VS Code 等)用同一种方式使用外部工具和数据(GitHub、数据库、企业内部系统等)。工具只要做成一次“MCP 服务器”,任何支持 MCP 的应用都能使用。它就像一根插在哪台设备上都能用的线,因此被称为“AI 的 USB-C”。
Anthropic 于 2024 年 11 月 25 日发布 MCP,并在 2025 年 12 月将其捐赠给 Linux Foundation 旗下的 Agentic AI Foundation(AAIF)。规范的现行版本是 2026-07-28,从这一版起 MCP 变成无状态(stateless),不再有按连接划分的“会话”。本文依据 MCP 规范和各家官方文档(2026 年 11 月 12 日核对),介绍 MCP 的原理、现行规范的变化、在主流应用中添加服务器的方法、10 分钟上手步骤,以及官方安全规定。
主机(AI 应用)
Claude Code、ChatGPT、VS Code 等
其中的客户端各连一个服务器,并取得工具列表
MCP 服务器
GitHub、Notion、自建
提供三类内容:Tools、Resources、Prompts
工具与数据
API、数据库、文件
服务器实际读写的对象
在本机内部用 stdio 传输,跨网络则用 Streamable HTTP。由 AI 决定何时使用哪个工具,主机在调用前先取得用户同意。
1. MCP 是什么——连接 AI 与工具的共同约定
MCP 出现之前,每个 AI 应用接入工具的方式都不一样。想在三个应用里用同一个“发消息到 Slack”的工具,就得做三遍。MCP 把这一层接入方式统一成一份规范。有 M 个应用、N 个工具时,原本要做 M×N 套对接,现在只需 M+N 份实现。规范本身也写明,它借鉴了统一各编辑器语言支持的 Language Server Protocol(LSP)。
服务器可以提供的三类内容
| 功能 | 是什么 | 例子 |
|---|---|---|
| Tools(工具) | AI 调用的函数 | 创建 issue、返回库存数、查询数据库 |
| Resources(资源) | 用户或 AI 阅读的资料和数据 | 文件内容、表结构、内部资料 |
| Prompts(提示) | 用户挑选使用的指令模板 | “审查这个 PR”的步骤 |
反方向上,客户端(应用一侧)可以向服务器提供 Elicitation,让服务器向用户询问额外信息。旧版本中的 Roots(告诉服务器可以在哪些文件夹工作)和 Sampling(服务器让应用侧的模型生成文本)在现行版本中已被弃用(第 4 节)。
2. 发布两年来发生了什么
MCP 规范的版本以“最后一次引入不向后兼容变更的日期”命名。下面把主要事件与版本对照列出。
- 2024 年 11 月 25 日Anthropic 发布规范和 SDK。最初的版本是 2024-11-05。
- 2025 年 3 月 26 日2025-03-26 版加入面向远程服务器的 Streamable HTTP 和基于 OAuth 的授权,并弃用旧的 HTTP+SSE 传输。同一天(美国时间),OpenAI 的 Sam Altman 宣布 OpenAI 将在自家产品中支持 MCP(TechCrunch 报道)。
- 2025 年 6 月 18 日2025-06-18 版加入带类型的结构化工具输出和 Elicitation。
- 2025 年 11 月 25 日2025-11-25 版加入处理长任务的 Tasks(实验性)和 Client ID Metadata Documents(客户端用 URL 表明身份)。
- 2025 年 12 月 9 日Anthropic 将 MCP 捐赠给 AAIF。AAIF 由 Anthropic、Block、OpenAI 共同创立,Google、Microsoft、AWS、Cloudflare、Bloomberg 提供支持。当天的公告称,活跃的公开 MCP 服务器超过 1 万个,Python 和 TypeScript SDK 月下载量超过 9,700 万,并列出 ChatGPT、Cursor、Gemini、Microsoft Copilot、VS Code 等采用者。
- 2026 年 7 月 28 日现行的 2026-07-28 版取消了握手(initialize)和会话,MCP 变为无状态(第 4 节)。
MCP 能普及,是因为规范只是 JSON-RPC 2.0 和 JSON Schema 之上的一层薄约定,容易实现;它很早就以公开规范的形式发布;再加上捐赠之后不再属于任何一家公司。互相竞争的厂商都采用同一份规范,做工具的一方只需做一次。
3. 工作原理——主机、客户端、服务器与两种传输方式
规范里有三个角色。主机是用户使用的 AI 应用,客户端是主机为每个服务器各运行一个的连接器,服务器是提供工具和数据的一方。消息采用 JSON-RPC 2.0 格式:客户端取得工具列表(tools/list),带参数调用 AI 选中的工具(tools/call),再取回结果。
| 传输方式 | 运行位置 | 适合的用途 | 认证 |
|---|---|---|---|
| stdio | 本机(应用把服务器作为进程启动,通过标准输入输出通信) | 文件、本地 Git、本地数据库 | 不使用规范的授权机制,凭据通过环境变量等方式传入 |
| Streamable HTTP | 服务一侧(通过 URL 连接) | GitHub、Notion 等服务,企业内部共享的服务器 | 规范中基于 OAuth 2.1 的授权(Authorization) |
| HTTP+SSE | 旧的远程传输方式 | 新项目不要再用 | 已弃用(迁移到 Streamable HTTP) |
4. 现行规范 2026-07-28 改了什么
根据规范的版本说明,现行(Current)版本是 2026-07-28。与上一版 2025-11-25 相比,连接方式发生了很大变化。主要差异见变更列表:
| 项目 | 2025-11-25 及以前 | 2026-07-28 |
|---|---|---|
| 建立连接 | 用 initialize 握手确定版本和能力 | 没有握手,每个请求都在 _meta 中携带版本和能力,服务器通过 server/discover 告知支持的版本 |
| 会话 | Streamable HTTP 使用 Mcp-Session-Id | 协议层面不再有会话,跨多次调用的状态以服务器签发的 ID 作为工具参数传递 |
| 变更通知 | HTTP GET 流、resources/subscribe | 合并为一条 subscriptions/listen 流 |
| 服务器发起的询问 | 服务器主动发送请求(sampling/createMessage、elicitation/create 等) | 服务器返回“需要输入”(input_required)结果,客户端附上答案重发同一请求(Multi Round-Trip Requests) |
| 连接中断 | 可凭 SSE 事件 ID 重新投递 | 不再续传,客户端用新 ID 重发请求 |
| 长任务(Tasks) | 核心中的实验性功能 | 移入官方扩展(io.modelcontextprotocol/tasks) |
| 弃用 | HTTP+SSE | Roots、Sampling、Logging、HTTP+SSE,以及 OAuth 动态客户端注册(改用 Client ID Metadata Documents) |
按照规范的功能生命周期规则,被弃用的功能至少保留 12 个月后才可移除(若存在已公开漏洞或实际被利用、且无法在协议内就地缓解的安全风险,最短可缩至 90 天)。规范也写明了如何以向后兼容的方式,与仍使用 2025-11-25 及更早版本握手的一方通信。
对使用者和开发者的影响
- 使用者
应用已支持的话,什么都不用做
Claude Code 通过基于 MCP TypeScript SDK 2.0 的“v2 runtime”支持 2026-07-28。它会询问每个服务器是否支持新版本,支持就用新版本,不支持就用旧握手连接。在会获取功能开关(feature flags)的会话中,v2.1.232 起默认使用 v2;不获取的会话中,v2.1.274 起默认使用 v2。若想固定在旧协议,可设置环境变量
MCP_PROTOCOL_NEGOTIATION=legacy(Claude Code 的 MCP 文档)。 - 开发者
升级到 2.x 系列 SDK,新代码不要再用弃用功能
Python SDK 已是 2.x 系列(PyPI 上的
mcp2.3.0,2026 年 10 月 2 日发布),TypeScript SDK 的 2.x 系列支持 2026-07-28。2.x 起 TypeScript 的包拆分为@modelcontextprotocol/server和@modelcontextprotocol/client(npm 上为 2.4.0),原来的@modelcontextprotocol/sdk仍停留在 1.x(1.32.2)。新服务器中,用工具参数或配置传递文件夹以代替 Roots,用标准错误输出或 OpenTelemetry 记录日志以代替 Logging。跨多次调用的状态,要签发无法猜测的 ID 并绑定到用户(第 9 节)。 - 扩展
核心之外多了可选的“扩展”
规范概览页列出的主要扩展有:处理长任务的 Tasks、在对话中显示图表和表单等界面的 MCP Apps,以及通过 MCP 分发智能体指令的 Skills over MCP(工作组讨论中)。只有客户端和服务器都支持时,扩展才会生效。
5. 主流应用怎么添加服务器、配置放在哪里
同一个 MCP 服务器,在不同应用里的添加方式和配置文件位置都不同。下面是各家官方文档的内容(2026 年 11 月 12 日核对)。
| 应用 | 添加方式 | 配置位置 | 注意 |
|---|---|---|---|
| Claude Code | claude mcp add | 个人用写在 ~/.claude.json,团队共享写在项目根目录的 .mcp.json | 用 /mcp 查看连接状态 |
| Claude Desktop | 编辑配置文件 | claude_desktop_config.json(macOS 为 ~/Library/Application Support/Claude/,Windows 为 %APPDATA%\Claude\,Linux 为 ~/.config/Claude/) | 改完后重启应用(官方指南) |
| Codex(CLI) | codex mcp add | ~/.codex/config.toml 中的 [mcp_servers.名称](受信任的项目也可用 .codex/config.toml) | OAuth 服务器用 codex mcp login 名称 |
| Gemini CLI | gemini mcp add | settings.json 的 mcpServers(.gemini/ 或 ~/.gemini/) | trust: true 会跳过所有调用确认,只用于自己管理的服务器(官方页面顶部注明:对免费层级和 Google One 用户,Gemini CLI 已于 2026 年 6 月 18 日被 Antigravity CLI 取代) |
| VS Code | 命令面板中的“MCP: Add Server” | 按向导选择工作区或全局 | 官方提醒:本地服务器会在你的电脑上运行代码 |
| ChatGPT | 在 Plugins 中选“Add custom MCP server”(无需先开启开发者模式) | 在工作区界面中设置(公开的 HTTPS 端点或 Secure MCP Tunnel) | 仅限 Business、Enterprise、Edu 的网页版(Business 只有管理员和所有者能连接,Enterprise、Edu 中获授权的成员也能连接,发布到工作区仅限管理员和所有者)(OpenAI 帮助中心) |
来源:Claude Code、Codex、Gemini CLI、VS Code 的 MCP 文档。在 claude.ai 添加的连接器(远程 MCP 服务器)也会出现在 Claude Code 的 /mcp 中,但用 API 密钥登录时不会加载(连接器被停用时的处理)。
6. 马上能用的服务器与查找方法
| 服务器 | 能做什么 | 典型用途 |
|---|---|---|
| filesystem(参考实现) | 只在允许的文件夹内读写文件 | 让 AI 阅读资料或代码 |
| fetch(参考实现) | 抓取网页并转换成 AI 易读的形式 | 给一个 URL 让它总结内容 |
| git(参考实现) | 读取并操作本地 Git 仓库的历史 | 根据提交历史解释改动 |
| GitHub(GitHub 运营的远程服务器) | issue、PR 和仓库操作 | 审查 PR、把发现的问题建成 issue |
| Notion(Notion 运营的远程服务器) | 操作 Notion 工作区 | 查找并总结内部资料 |
查找服务器时,可以从公开服务器列表 MCP Registry 和收录 Anthropic 审核过的连接器的 Anthropic Directory 入手。官方仓库中现在只保留 Everything、Fetch、Filesystem、Git、Memory、Sequential Thinking、Time 这 7 个参考实现,README 把它们定位为“给开发服务器的人看的教学示例”,并要求使用者自行评估安全需求。以前放在那里的 GitHub、PostgreSQL、Slack 等服务器已移到 servers-archived(GitHub 改用 GitHub 自己的服务器,Slack 由 Zencoder 维护)。不要照搬旧文章里的步骤。
7. 10 分钟上手——让 Claude Code 读取一个文件夹
用官方的 filesystem 服务器,让 Claude Code 只读取你指定的一个文件夹。前提是已安装 Node.js(npx)。
- 建一个测试文件夹。新建一个不含重要文件的空文件夹(例如
~/mcp-test),放入一个简短的README.md。服务器只能访问这个文件夹。 - 添加服务器。在 macOS 和 Linux 上执行下面的命令。
--之后的内容会原样作为服务器的启动命令。
在原生 Windows(非 WSL)上也用同样的方式添加,文件夹写成claude mcp add --transport stdio files -- npx -y @modelcontextprotocol/server-filesystem ~/mcp-testC:\mcp-test这样。如果npx启动不了,就按参考实现 README 中面向 Windows 的写法,用cmd /c包住。
文件夹路径请按自己的环境修改。claude mcp add --transport stdio files -- cmd /c npx -y @modelcontextprotocol/server-filesystem C:\mcp-test - 确认已连接。启动 Claude Code,打开
/mcp,查看files是否为connected。若显示failed,请看 MCP 服务器连接错误的排查方法。 - 试用。输入“总结 mcp-test 里的 README”。Claude Code 在使用工具前会请求许可,先看清工具名和参数再允许。
- 清理。试完后用
claude mcp remove files移除。
远程服务器用 URL 添加(例如 claude mcp add --transport http notion https://mcp.notion.com/mcp),添加后在 /mcp 中完成认证。添加范围(scope)有三种:默认的 local 只在该项目中供自己使用,--scope project 写入项目根目录的 .mcp.json 供团队共享,--scope user 在自己的所有项目中可用。带有不想放进版本控制的凭据的服务器,请用 local。
8. 自己写 MCP 服务器——最小实现
光是使用就已经有用,但 MCP 真正的价值在于把企业自有的工具开放给 AI。用 Python SDK(2.x 系列),十几行就能跑起来。示例是一个“返回内部库存数”的服务器。
用 uv add "mcp[cli]"(或 pip install "mcp[cli]")安装 SDK。加上 [cli] 会同时装好下面用到的 mcp dev、mcp run 命令。
from mcp.server import MCPServer
mcp = MCPServer("inventory-server")
@mcp.tool()
def get_stock(sku: str) -> int:
"""返回指定 SKU 的当前库存数"""
# 在这里写查询内部库存数据库的代码
return query_internal_db(sku)
if __name__ == "__main__":
mcp.run(transport="stdio")
- 测试
用 SDK README 中的
uv run mcp dev server.py打开官方测试界面(MCP Inspector),不经过 AI 就能检查工具列表和调用结果。 - 添加
Claude Code 中执行
claude mcp add --transport stdio inventory -- python server.py。函数的说明文字(docstring)会直接成为 AI 看到的工具说明,所以要具体写清楚返回什么。 - 共享
要在公司内共享,可用
uv run mcp run server.py --transport streamable-http把它变成 HTTP 服务器。这时要遵守第 9 节关于授权和令牌的规定。
官方 SDK 有 TypeScript、Python、C#、Go、Rust、Ruby(Tier 1),Java(Tier 2),Swift、PHP、Kotlin(Tier 3)。Tier 反映功能完整度和维护承诺,各 SDK 跟进新版规范的时间也各不相同。
9. 安全——官方 Security Best Practices 要点
规范把工具视为“任意代码执行”,规定主机在调用任何工具前,必须取得用户的明确同意。工具的说明和注解(annotations)除非来自可信服务器,否则都应视为不可信。在此基础上,官方 Security Best Practices 列出了 MCP 特有的攻击及对策。
| 攻击 | 会发生什么 | 规范要求的对策 | 相关方 |
|---|---|---|---|
| 本地 MCP 服务器被攻破 | 混入配置的启动命令执行任意指令,例如把 SSH 密钥发送出去 | 支持一键添加的客户端必须完整显示将执行的命令并取得同意(MUST),应在沙箱中以最小权限运行服务器(SHOULD) | 使用者、应用开发者 |
| 令牌透传 | 服务器接受签发给其他服务的令牌,并原样转发给下游 API | 不接受并非签发给本 MCP 服务器的令牌(MUST NOT) | 服务器开发者 |
| Confused deputy | 代理第三方 API 的服务器跳过同意页面,授权码被盗 | 在第三方授权之前按客户端取得同意(MUST),redirect_uri 必须完全一致 | 代理服务器开发者 |
| SSRF | 恶意服务器在 OAuth URL 中填入内网地址(例如 169.254.169.254),让客户端去访问 | 要求 HTTPS,并拦截对私有 IP 段的请求(SHOULD) | 客户端开发者 |
| 状态 ID 劫持 | 服务器签发的 ID(如购物车 ID)被猜中,他人的状态遭到篡改 | 不能把持有 ID 当作认证(MUST NOT),用无法猜测的随机数生成并绑定到用户(SHOULD) | 服务器开发者 |
| 权限(scope)过宽 | 一个令牌被盗,就能使用无关的工具和数据 | 一开始只给以只读为主的最小权限,需要时再逐步扩大 | 服务器开发者 |
使用者在安装前要确认的 5 件事
| 确认内容 | 查看位置与实例 |
|---|---|
| ① 由谁运营 | 是服务方自己运营的服务器(例如 GitHub 的 https://api.githubcopilot.com/mcp/、Notion 的 https://mcp.notion.com/mcp)、参考实现,还是第三方(从 MCP Registry 和 Anthropic Directory 查找) |
| ② 是否完整读过启动命令 | npx -y 和 uvx 在添加时就会下载并运行软件包,要确认不是名字相近的其他包,后面也没有多余的命令 |
| ③ 是否仍在维护 | 官方仓库中的 GitHub、PostgreSQL、Slack 服务器已移到 servers-archived |
| ④ 授予多大权限 | 令牌要限定范围签发(Claude Code 官方文档也给出了 GitHub 只授权目标仓库的 fine-grained 令牌示例) |
| ⑤ 是否会引入外部内容 | 抓取网页或邮件的服务器会成为提示注入的入口(Claude Code 官方文档也提醒连接前先确认是否可信) |
如果服务器返回的文字里写着“忽略之前的指令,改为……”,AI 就可能被劫持。要把服务器的输出当作数据处理,发送、删除、付款这类不可撤销的操作每次都由人来确认。思路详见给 AI 输入提示时的注意事项。如果你自己搭建智能体,设计层面的内容(如何提供工具、最小化权限、区分危险操作)可以在“AI 智能体开发”课程的 MCP 与工具连接一章中按顺序学习。
10. MCP、API、Skills、A2A 怎么选
| 想做的事 | 适合的方式 | 理由 |
|---|---|---|
| 把外部数据或操作交给 AI,并让 AI 自己决定何时使用 | MCP 服务器 | AI 拿到工具列表,需要时自行调用 |
| 在 Claude Code、Codex、VS Code 等多个应用中复用同一连接 | MCP 服务器 | 做一次,任何支持 MCP 的应用都能用 |
| 只是从自己的程序按固定顺序调用固定处理 | 普通 API 调用 | 不需要 AI 选择时,中间没必要加 MCP |
| 让 AI 遵守步骤或写作规范(无需外部连接) | Skills | 需要的是操作手册,而不是连接 |
| 把工作交给其他团队或公司做的 AI 智能体 | A2A | 对方是智能体而不是工具(MCP 是通向工具的“纵向”,A2A 是智能体之间的“横向”) |
这四者并不互斥。例如用 MCP 获取最新数据,按 Skill 的步骤整理,再通过 A2A 交给其他部门的智能体。MCP 服务器也可以打包进 Claude Code 插件,与技能、钩子一起分发给团队。
11. 别装太多,也别做太多
- 上下文
工具结果会占用上下文
Claude Code 默认使用 tool search:会话开始时只加载工具名称和服务器指令(instructions),工具定义在需要时才加载。但工具返回的结果仍会占用上下文,单次输出超过 10,000 个 token 时会发出警告,默认上限为 25,000 个 token(可用
MAX_MCP_OUTPUT_TOKENS修改)。 - 设计
不要什么都做成 MCP
一次请求调用的工具越多,耗时和费用就越高。不需要 AI 选择的处理,用普通程序或 API 调用更快更可靠。
- 规范
按规范会变的前提来做
像 2026-07-28 这样,有的版本会改变连接方式。弃用功能原则上至少保留 12 个月(存在现实安全风险时最短 90 天),但自建服务器要随 SDK 更新及时检查。
- 收益
做出来的服务器能赚钱吗
MCP 本身没有收费机制。销售渠道和手续费的比较见 MCP 服务器能赚钱吗。
总结
- MCP 是连接 AI 应用与外部工具、数据的公开规范。Anthropic 于 2024 年 11 月发布,2025 年 12 月捐赠给 Linux Foundation 旗下的 AAIF。
- 角色分为主机、客户端和服务器。服务器提供 Tools、Resources、Prompts,通过 stdio 或 Streamable HTTP 通信。
- 现行版本是 2026-07-28。它取消了握手和会话,变为无状态,并弃用了 Roots、Sampling、Logging。
- Claude Code、Codex、Gemini CLI 用
mcp add命令添加服务器,Claude Desktop 用配置文件,VS Code 用命令面板。 - 先用 filesystem 参考实现在空文件夹上试用,再用
/mcp确认连接。 - 用 Python SDK 自建服务器只需十几行。先在 MCP Inspector 中测试,再添加到应用。
- 官方 Security Best Practices 要求完整显示启动命令并取得同意、拒绝并非签发给本服务器的令牌、使用无法猜测的 ID、只给最小权限。
常见问题
Q1. 使用 MCP 需要专门学习吗?
只是使用的话不需要。Claude Code 里一行 claude mcp add,Claude Desktop 里在配置文件中加几行即可。即使自己开发,SDK 也会处理 JSON-RPC 的细节,从写一个函数、加一个装饰器开始就行。
Q2. ChatGPT 能用 MCP 吗?
能。根据 2026 年 11 月 12 日核对的 OpenAI 帮助中心,把自建 MCP 服务器接入 ChatGPT(含写入操作的完整 MCP 支持)可在 ChatGPT Business、Enterprise、Edu 的网页版中使用。在 Plugins 中选“Add custom MCP server”,添加服务器的公开 HTTPS 端点(或 Secure MCP Tunnel),确认风险提示后即可添加,无需先开启开发者模式。Business 只有管理员和所有者能连接服务器;Enterprise 和 Edu 中,管理员还可以通过基于角色的访问控制(RBAC)把这一权限授予指定成员。只有管理员和所有者能发布到工作区,也不能从移动端连接。详情见 OpenAI 帮助中心。
Q3. 到了 2026-07-28 版,旧服务器会不能用吗?
不会马上失效。规范中有与使用 2025-11-25 及更早版本握手的一方通信的向后兼容步骤,Claude Code 对不支持新版本的服务器也会用旧方式连接。弃用功能原则上也至少在规范中保留 12 个月(仅在存在现实安全风险时最短 90 天)。自建服务器在升级到 2.x 系列 SDK 时,检查一下是否依赖 Roots、Sampling、Logging。
Q4. 通过 MCP 把内部数据库开放给 AI 安全吗?
取决于权限设计。使用只读连接,只把参数经过严格校验的固定查询做成工具,比让 AI 直接写 SQL 安全得多。反过来,“什么 SQL 都能执行的工具”很危险。如果通过 HTTP 共享,就按第 9 节只接受签发给本服务器的令牌、把权限降到最小,并保留日志。
Q5. MCP 和 Function Calling(工具调用)是一回事吗?
层级不同。Function Calling 是模型 API 内部表达“我要用这些参数调用这个函数”的格式,MCP 是应用与外部服务器之间的通信约定。支持 MCP 的应用把从服务器拿到的工具列表按模型的工具调用格式交给模型,再把模型选中的调用通过 MCP 发给服务器。