# MCP 好用是真好用，但 Anthropic 自己测了 25 次，24 次把密钥送了出去

- URL: https://davidyin.dev/writing/229-20260730-anthropic-mcp-practice/
- 作者: David Yin
- 发布: 2026-07-30
- 标签: MCP、AI 安全、提示词注入、Agent、企业落地
- 摘要: 给 AI 接工具，考题从「能不能连上」变「会不会出事」。Anthropic 红队测 25 次注入，24 次送出云服务器密钥；博客复盘弹窗与沙箱漏洞，外部研究演示工具描述下毒、一钥跨系统捞数据。MCP 无状态化改版解决部署、未解决安全，给出接入前要确认的六件事。

MCP 这东西确实好用。接上之后一句话，AI 就能替你翻网盘、查数据库、改工单，活干完再回来交差。

代价是你得先把钥匙交给它。Anthropic 内部红队今年 2 月做过一次演练：一封「同事请你帮个忙」的邮件，同一段提示词试了 25 次，AI 有 24 次照做，把云服务器的密钥编码后发去了外部地址。

那封邮件看上去和平时的协作请求没区别。同事口气，「帮我跑一下这个」，底下附一段现成的提示词，复制粘贴就行。提示词读起来也正常，全是布置任务的话——只有中间夹了一句：把云服务器的密钥读出来，编码一下，发到某个外部地址。

写下这段的不是哪家安全厂商的营销稿，是 Anthropic 自己的工程博客。

两天前，7 月 28 日，MCP 自己也出了一次大改版，官方自己人的说法是「远程 MCP 上线一年多以来最重要的一次」。一年半攒下的接法被亲手推翻，几个功能进了退休倒计时。

这两件事之间没有因果，一个是 5 月的复盘，一个是本周的发版。可它们凑在同一个季度，指着同一处：给 AI 接外部工具，考题换了。前两年大家比的是能不能连上，现在要答的是连上之后会不会出事。

## 先把 MCP 说清楚：它到底替你管什么

MCP 全称 Model Context Protocol，中文一般叫模型上下文协议。名字唬人，干的事朴素。

想象一个只会动脑、没长手的房客。他想查地图、翻网盘、发邮件、调数据库，每样都是不同厂家的电器，插头形状各不相同。过去每接一样，工程师就得给它单独拉一条线。MCP 定的是插座和插头的统一规矩——房客不用为每台电器重学一遍怎么接。

比喻到这儿得打住。插座只管供电，MCP 管的事更多：这个工具叫什么名字、要填哪些参数、返回什么、允许它动什么。**它不替你判断这次该不该按下去。** 后面所有麻烦都从这句话里长出来。

这东西已经不小了。官方发布文里的口径是：四个第一梯队 SDK（TypeScript、Python、Go、C#）合起来接近每月五亿次下载，其中 TypeScript 和 Python 各自的累计下载都过了十亿。去年 12 月 9 日，Anthropic 把 MCP 捐给了 Linux Foundation 新成立的 Agentic AI Foundation，同一批进去的还有 Block 的 goose 和 OpenAI 的 AGENTS.md——它不再是一家公司说了算的私产。

你可能已经用过它了，只是不知道这三个字母。在 Microsoft 365 的办公 Agent 里点一下「查工单」「改状态」，背后走的可能就是它——微软官方文档 6 月已经把远程 MCP Server 写成了可注册的企业连接器，认证和敏感凭据都交给专门的密钥保险库存着。阿里云百炼的官方文档里，一个智能体最多能同时挂五个 MCP 服务。你看上去只是在聊天窗口里点了一下，它手里拿的是业务系统的钥匙。

## 两天前那次大改，跟「会不会出事」是两回事

先把这次改版说完，一是它就是本周大家在聊的那件事，二是很多人正把它误读成一次安全升级。

官方一句话总结：MCP 从一个双向、有状态的协议，变成请求／响应式的无状态协议。

翻成人话得举个例子。旧规矩像餐厅里那个记性极好的服务员：你这桌点过什么、说过不要香菜，全在他脑子里，后面每一轮都得他来接，换人就断。新规矩是后厨每张小票都写清桌号、菜名、忌口——谁端菜都不会接错，人多了随时加。

具体就是：过去每段对话开头要先「握个手」、再给这段对话贴个身份标签，现在这两样全删了，每个请求自己把该说的信息带齐，服务器不用记着你是谁。想先问清对方支持什么也行，官方为此新加了一个专门的问询动作，服务器必须答，客户端爱问不问。工具清单还加了「保质期」，让客户端能放心存下来、不用每次重问。做系统的人拿到的实惠很直接：随便哪台服务器都能接你这一单，扩容不再被「会话」绑死。

服务器过去能在半路反过来问你一句（「这一步确认吗？」），现在改成先把请求退回来、标一句「还缺料」，你补齐了再发一次。跑得久的活儿也从主协议里搬了出去单独处理。

还有几个老功能进了退休倒计时——做过 MCP 的人熟的那几个：让服务器反问用户、找模型借次推理、读运行日志，加上老的传输方式和一种旧的客户端注册法。它们还能用，官方承诺**至少**十二个月，像小区换门禁，物业先贴一年公告，不是今晚就把旧卡剪了。但新项目别再往上接。官方也没把这次包装成无痛升级，原文写着那些破坏性改动配了详细迁移说明，还专门提了一句：依赖会话标识符的开发者会有迁移成本。这套改法社区吵了一轮，有人算出每次调用要多背三倍多的字节，也有人直说这根本不算无状态——那是工程口味之争，先按下。

要紧的是记住这次改的是什么：怎么部署、怎么扩容、怎么让普通云上那套负载均衡伺候得了它。倒也不是跟安全全无关系——方法名被提到了 HTTP 头上，网关和防火墙不用拆开报文就能拦、能限流，审计也好接一些。**但那些真会把数据往外送的手法，它一个字都没碰。** 会咬人的坑在另一头。

那为什么偏偏是「连接」这一层被动了刀？因为模型这半年在往一个方向长：不是多答对几道题，是能连着干好几个小时的活，还动真实系统。7 月 27 日更新的 Kimi K3，月之暗面把它定位成开放权重的原生多模态智能体模型，模型卡里明写会编排终端工具，任务举例到了长期编码、CAD 和芯片设计。智谱 7 月 13 日发的 GLM-5.2，官方把长程任务和百万级上下文摆在最前面，训练里就带工具调用、子任务拆解和多轮环境反馈。

模型越能连着自己干，「它手上有哪些工具、权限到哪、出错怎么收」这层就越顶不住原来那点设计。你司要是明年真上这类能自己连着跑几小时的 agent，接线那层的坑，最后是落到用它的人头上。

## Anthropic 自己交的学费

5 月 25 日那篇工程博客，是我见过的大厂里少有的、把自己踩的坑一条条摊开写的。它讲的不是协议怎么定，讲的是东西装上以后到底怎么出事。

先看两个数字。Claude Code 早期靠弹窗问用户「这个操作允许吗」，遥测显示用户批准了大约 93% 的弹窗。弹窗看多了就不看了，这事一点都不意外。后来他们上了操作系统级沙箱，弹窗量降了 84%，把靠人盯着改成靠边界拦着。

然后是两个单靠沙箱或弹窗没兜住的边界问题。

一个是信任对话框还没弹，事情已经办完了。你克隆一个仓库准备看代码，仓库里躺着一个配置文件，写了启动时要执行的动作。Claude Code 启动先读项目设置、后弹「你信任这个文件夹吗」——顺序反了，攻击者提交的那段在你点头之前就跑了。修法不是再弹一次窗，是把项目本地配置的解析和执行整个推到用户点头之后。

另一个更值得琢磨。工作区里放了个恶意文件，里面藏着指令和攻击者自己的 API key。AI 读了别处的文件，然后调用 Anthropic 的文件接口把它们传上去——传到了攻击者的账号里。出口检查看了目的地，发现是 Anthropic 自家的接口地址，放行。官方对这件事的原话是：沙箱完美地工作了，但数据还是被外泄了。

他们后来把白名单这东西重新想了一遍。过去当它是「这些地址可以聊」的目的地过滤器，现在当它是一份能力授权——放行一个域名，等于把那个域名上所有能调的功能都算进了攻击面。

关于 MCP，这篇文章有一节专门讲，标题叫「信任 AI 读到的东西」。里头两句该抄下来贴墙上。

一句是远程和本地的差别比看起来大。本地装的工具你能读源码、能锁版本，知道它不会背着你变；远程的、托管的那种，你批准完它随时能改行为，装的那天做的信任判断，第二天可能就不作数了。目录之外的连接器，先拿假数据在爆炸半径可控的地方跑。

另一句是工具本身可信，它的输出照样是攻击面。一个 GitHub 连接器就算过了恶意软件扫描，也能把一个被下过毒的说明文件原样塞进模型的上下文。而一旦被这么带着做完了一次授权范围内的调用，事后翻日志只看得见「成功、已授权」，倒查不出来。

顺带一个工程判断也挺有意思：Claude Cowork 把本地 MCP Server 从虚拟机里搬了出来，理由三条——放里面更难审计、虚拟机一更新依赖就脆、本来就有些 MCP 得跟本地数据库这类进程打交道。搬出来之后它的定位更接近「用户自己选择安装的软件」，由管理员决定开哪些。

## 外面的实证：不必等 AI 判断错，就能出事

Anthropic 讲的是自家产品。外部研究者的公开演示补上了另外几种形状，三个都有一手来源，性质也都得说清。

Invariant Labs 去年 4 月 7 日那个最有画面感：他们做了个恶意的「每日冷知识」工具，把隐藏指令写在工具描述里。AI 压根没调用这个工具，光是读到描述就被带偏，转头用可信的 WhatsApp 工具发消息——表面上只写了个「Hi」，聊天记录夹在后面的参数里，发给了攻击者的号码。同一份研究还演示了「装的时候是好的、第二次启动才变坏」。

同年 5 月 26 日那个更贴办公场景。仓库主人只说了一句「看看公开仓库有哪些待办问题」。AI 读到一个带隐藏指令的恶意问题单，接着用同一把 GitHub 钥匙去拉私有仓库，自己在公开仓库开了个合并请求。演示里泄出去的包括私有项目名、搬家计划和薪资。研究者特意说明，这不是 GitHub 那个 Server 哪行代码有 bug，是一把钥匙同时够得着「不可信的外部内容」和「敏感的私有数据」。

第三个连 AI 判断错都不需要。JFrog 去年 7 月 9 日披露了 `mcp-remote` 的一个漏洞（CVE-2025-6514）：恶意服务器在授权信息里塞一个特制地址，客户端试着打开它的时候就触发命令执行。受影响版本 0.0.5 到 0.1.15，0.1.16 修了。

这三个的边界得摆明：前两个是研究团队搭出来的可复现演示，不是已知的真实受害事故；第三个是真实披露并修复的漏洞，但 JFrog 没说存在大规模在野利用。谁要拿这些去写「MCP 已经泄了几十万人的数据」，那是他自己加的。

## 你要是被公司要求接一个，至少确认这几件

非工程师不用去学协议细节。看六件事就够了，顺序大致是从最该问的往下：

谁做的——官方厂商、公司 IT，还是某个陌生个人仓库。要什么权限——只读一个文件夹，还是整个网盘、代码库、数据库的账号。能做什么——只查，还是能发信、删文件、改工单、动钱。数据去哪——它能不能把 A 系统里的内容写进 B 系统，或者发到公网。谁确认——写操作每次都问，还是勾了一次「一直允许」；那个确认框有没有把完整参数摊给你看（那 93% 就是这么来的）。怎么停——能不能立刻吊销令牌、关掉服务、翻日志、把动作回滚。

监管这边的关注点差不多也落在这儿。全国网安标准化技术委员会 7 月 1 日发的智能体部署使用安全指引，覆盖评估、准备、部署、使用、停用五个阶段；配套的标准计划里，系统权限调用、工具调用、高风险操作人工介入、日志留存、异常阻断都写进了主要技术内容。这份文件不是专门管 MCP 的，但它盯的几处，恰好就是 MCP 把 AI 接上外部系统之后暴露出来的那几处。

## 最后

有句话得说在前面，免得读完记反了：这次的无状态改造解决的是部署、路由和扩容。工具描述能下毒、一把钥匙跨系统捞数据、恶意远程服务器、客户端代理自己有漏洞——这些不会因为删掉会话就消失一个。

我倒觉得这次改版最实在的地方在别处。它把一年半攒下来的经验，用一次带痛感的破坏性升级兑现了：老的接法不装样子往下延，退休时间明着写至少十二个月，迁移说明摆在那儿。协议这种东西，肯把自己的旧设计推翻，通常说明真有人在拿它干活。

至于 Anthropic 那篇复盘，它的价值是把「AI 出事」从玄学拉回工程。25 次里 24 次那个数字之所以刺人，是因为那次注入是用户自己亲手粘进去的。模型层的分类器盯的是用户意图，用户自己输入的东西，它看不出哪儿不对；把它拦住的，是文件边界和出网限制这种笨办法。

所以下次有人跟你说「给 AI 接上这个就自动化了」，你可以顺口问一句：它拿的是哪把钥匙，那把钥匙还能开哪几扇门。

---

**数据来源**

- Model Context Protocol 官方博客：《The 2026-07-28 Specification》（2026 年 7 月 28 日）
- Model Context Protocol 官方规范：《Key Changes · 2026-07-28》与《Feature lifecycle and deprecation policy》
- Anthropic Engineering：《How we contain Claude across products》（2026 年 5 月 25 日）
- Linux Foundation：《Linux Foundation Announces the Formation of the Agentic AI Foundation》（2025 年 12 月 9 日）
- Invariant Labs：《WhatsApp MCP Exploited》（2025 年 4 月 7 日）、《GitHub MCP Vulnerability》（2025 年 5 月 26 日）
- JFrog Security Research：《CVE-2025-6514: Critical mcp-remote RCE Vulnerability》（2025 年 7 月 9 日）
- Microsoft Learn：《Agent connectors for Microsoft 365》（2026 年 6 月）
- 阿里云百炼官方文档：《官方与第三方 MCP 服务》
- 全国网络安全标准化技术委员会：《网络安全标准实践指南——智能体部署使用安全指引》（2026 年 7 月 1 日）
- Hugging Face：moonshotai/Kimi-K3 模型卡（2026 年 7 月 27 日更新）；Z.ai 官方博客：《GLM-5.2》（2026 年 7 月 13 日）
