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 等

其中的客户端各连一个服务器,并取得工具列表

⇄JSON-RPC

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+SSERoots、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 上的 mcp 2.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 Codeclaude 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 CLIgemini mcp addsettings.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)。

  1. 建一个测试文件夹。新建一个不含重要文件的空文件夹(例如 ~/mcp-test),放入一个简短的 README.md。服务器只能访问这个文件夹。
  2. 添加服务器。在 macOS 和 Linux 上执行下面的命令。-- 之后的内容会原样作为服务器的启动命令。
    claude mcp add --transport stdio files -- npx -y @modelcontextprotocol/server-filesystem ~/mcp-test
    在原生 Windows(非 WSL)上也用同样的方式添加,文件夹写成 C:\mcp-test 这样。如果 npx 启动不了,就按参考实现 README 中面向 Windows 的写法,用 cmd /c 包住。
    claude mcp add --transport stdio files -- cmd /c npx -y @modelcontextprotocol/server-filesystem C:\mcp-test
    文件夹路径请按自己的环境修改。
  3. 确认已连接。启动 Claude Code,打开 /mcp,查看 files 是否为 connected。若显示 failed,请看 MCP 服务器连接错误的排查方法。
  4. 试用。输入“总结 mcp-test 里的 README”。Claude Code 在使用工具前会请求许可,先看清工具名和参数再允许。
  5. 清理。试完后用 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 发给服务器。