21 万个 MCP 服务器、217 万个工具:生态第一次被数清楚,也第一次露出账本

21 万个 MCP 服务器、217 万个工具:生态第一次被数清楚,也第一次露出账本

Author: tengdy | Create: 2026-11-01 08:20:15 | Update: 2026-11-01 08:20:18 | 分类:MCP & CLI

MCPModel Context Protocol治理生态统计工具投毒供应链安全CVE

关于 MCP 生态有多大,过去一年流传的数字基本都是各家自己的口径——官方注册表一个数、社区列表一个数、厂商发布会又一个数。10 月底到 11 月初,两个独立的第三方目录几乎同时给出了自己的账本,而且都把方法论摊开写了。

有意思的不是总量,是结构。规模早就不是瓶颈了,真正的缺口在别的地方。

一、先把数量级摆正

AllMCPs(11 月 1 日数据):34,367 个活跃 MCP 服务器,30 天内新增 7,702 个。按月入库曲线是 7 月 3,082、8 月 7,255、9 月 16,323、10 月 7,707——9 月是明显的爆发点,10 月回落但仍在高位。带"官方认证"徽章(维护者证明所有权)的只有 182 个。

Small Print(10 月 30 日数据):在册条目 322,484 个,拆开是 211,283 个 MCP 服务器、62,685 个 agent skill、48,516 个 plugin。它读到了其中 134,561 个服务器的工具清单,合计 2,168,126 个工具定义,中位数是每个服务器 7 个工具、每个工具描述 156 个字符。

两个数字不冲突,口径不同:一个数的是"去重后的软件",一个数的是"每个来源下的一个名字",同一个服务器发在 npm 和容器仓库里就算两条。Small Print 自己也说明了,15,878 个仓库挂在两条以上条目下。

要看的话,我更信这一组:21 万个服务器、217 万个工具、中位数 7 个工具。这说明 MCP 的主流形态不是"大而全的超级服务器",而是"一个小工具包"。6,979 个服务器暴露 50 个以上工具,属于少数派;另有 7,980 个服务器被读到了代码,但里头根本没有工具声明——占位、改名、空壳,都在里面。

二、结构真相:本地为主、开发者为主、绝大多数没人用

几个比例比总量更有信息量:

  • 本地与远程 66 : 34(在 20,222 个能判定传输方式的服务器里)。67% 走 stdio,靠客户端拉子进程起来;三分之一是远程 HTTP 端点。
  • 启动方式 73% npx、27% uvx。Node 生态确实压着 Python 一头。
  • 41% 需要凭证(在 14,496 个能判定的服务器里):59% 完全不需要,21% 用 OAuth,17% 用 API key。也就是说,将近六成的服务器,装上去就能用,不需要身份。
  • 85% 是 MIT 许可,Apache-2.0 只有 11%。
  • 开发者工具占 25%(8,698 个),金融科技 13%(4,399 个),往后是知识记忆、搜索抽取、通信、安全、法律。
  • 57% 的服务器 GitHub star 不到 10 个,只有 348 个过千。长尾极长,这不是"生态繁荣"的另一种说法,这是"绝大多数项目只有作者一个人在用"。

一个被忽略的信号是"健康检查"和"真实可用"之间的落差。AllMCPs 说 99% 通过了最近一次健康检查,看起来很好。但 Small Print 拿 67,384 个远程服务器挨个发了一次 tools/list:12,171 个(18.1%)连不上或者开不了会话,2,493 个回答了但给不出可读的工具清单。也就是说,远程端点里有五分之一是死的。

三、真正扎眼的一行:58.2% 不要登录就交出工具清单

39,238 个远程 MCP 服务器(58.2%)在没有登录的情况下就返回了完整工具列表,只有 9,208 个(13.7%)要求登录或直接拒绝。

单看这一条,不构成漏洞——工具清单本身通常不是机密,很多服务器设计上就是公开可发现的。但它意味着两件事:

第一,攻击面是零成本的。 想搞清楚一个企业通过 MCP 暴露了哪些内部能力,不需要账号、不需要社工,发一个请求就行。工具名、参数 schema、描述文本,全是现成的侦察材料。

第二,审核永远滞后于现实。 你审批的是一个"当时"的服务器,而它可能明天就多出三个工具。Small Print 记录到的工具清单变更累计 490,474 次,其中 437,281 次发生在最近 30 天,68,408 次发生在最近 7 天。27,835 个条目至少改过一次。拆分看:128,095 次重写了工具描述,180,846 次改了输入 schema,新增工具 131,537 个、删除 32,589 个。

还有一个容易被误读的数字:156,379 次版本号升级里,有 85,591 次(54.7%)内容一个字节都没变。这说明"版本号"在这个生态里和"内容变更"几乎脱钩——靠版本号判断风险,基本无效。反过来说,真正的内容变更藏在少数版本里,更需要逐次比对。

最该被拉出来单独讲的是这两行,量都不大:

  • 442 次变更,往文本里加了"指向含密钥的文件""指定地址"或者数据外泄相关的词汇。
  • 81 次变更,加了"别告诉用户""忽略之前的指令"这类覆盖性措辞。

绝对值很小,占比也很小。但这类文本出现在的是工具描述和 instruction 文件里——那是会直接进入模型上下文窗口、且被模型当作指令对待的位置。17,406 次对 instruction 文件的修改,全部都在这个风险类别里。

这正是 MCP 生态最结构性的一处缺陷:审批是一次性事件,而工具定义是持续变量。业界把这类攻击叫 rug pull(先给良性定义过审,之后再改)。防它的唯一办法不是"更仔细地审",而是把工具定义哈希下来、对漂移告警——目前绝大多数客户端不做这件事。

四、安全债已经有账可查

Small Print 记录在案的安全公告 6,142 条(来自 GHSA、OSV、NVD、VulnerableMCP 等 6 个来源),其中 1,233 条明确点名了在册的 MCP 服务器、skill 或 plugin 并匹配到具体版本区间;按它的分级规则,4,633 条是 critical、902 条是 high;2,560 条带 OpenSSF Malicious Packages 项目的恶意包标识(MAL- 编号)。AllMCPs 的口径则是:14,991 个被扫描的安装包里,486 个(3%)有 critical 或 high 级别的公告。

10 月底这一周,官方 SDK 也没能置身事外。MCP Python SDK 在 10 月 27 日一次性披露三条:

  • CVE-2026-116684(6.8):服务的 bearer token 认证会接受"签发给其他资源服务器"的令牌,缺 audience 校验。这条直指规范里明令禁止的 token passthrough 反面——你的服务器可能认下了一张本来不该给它用的票。
  • CVE-2026-116685(5.9):HTTP 客户端传输跟随跨域重定向时,把自定义 header 和请求体一起带了过去。凭证就这样被送到了计划外的主机。
  • CVE-2026-116686(6.x):客户端在校验工具输出 schema 时,会去取服务器指定的 $ref URL。一个恶意服务器可以借此让客户端主动访问内网地址。

另有两例单体服务器漏洞:functype-mcp-server 1.4.4 之前,set_functype_version 工具直接用 z.string() 接收版本号并拼进包安装命令,file:、npm:、URL 这类包别名语法能把任意本地或远程包装成 functype,随后被动态 import 执行(CVE-2026-59176,7.8);@sylphx/pdf-reader-mcp 的 HTTP 传输入口即使配了 MCP_API_KEY 也不做鉴权(CVE-2026-62264,7.5)。

注意这三条 Python SDK 的漏洞分布在三个不同层:认证(aud 校验)、传输(重定向带凭证)、客户端校验(服务端指定的 $ref)。没有一条是"服务器写了坏代码",全是协议实现层的默认行为选择。

五、所以该怎么办

按优先级,我会给这几条:

  1. 把工具定义当依赖锁版本。记录每个服务器工具清单的哈希,变更就告警。别信版本号,54.7% 的升级是空包。
  2. 远程服务器先验 aud。检查你用的 SDK 版本是否已修 CVE-2026-116684,自建的资源服务器必须显式校验令牌 audience,拒绝非本服务签发的票。
  3. 把 $ref 白名单化。客户端不应跟随服务器指定的任意 URL 去取 schema 引用。
  4. 对工具描述做静态扫描。442 次泄密措辞、81 次覆盖指令,这类文本可以用词表和规则抓,成本极低。
  5. 给安装类工具上人工审批。functype 那条链的本质是"模型被诱导调用一个能装包的工具"——这一条防线只能靠客户端拦。
  6. 接受"公开可发现"是常态。58.2% 的远程端点免登录返回工具清单,你的服务器如果默认公开,别把工具名和描述写成内部黑话——那等于把资产清单写在门上。

六、两个必要的口径声明

第一,上面所有数字都来自第三方目录(AllMCPs、Small Print),不是官方统计,也没有经过 MCP 维护方背书。它们的采集方式是抓官方注册表、社区列表和直接提交,去重后计数,方法论在各自页面上可查。两个目录的统计对象不同(软件 vs 条目),所以 34,367 和 211,283 不能相加也不能互相印证。

第二,"21 万个服务器"不等于"21 万个在用的服务器"。57% star 不到 10 个,18% 的远程端点连不上,7,980 个读到了代码却没有工具声明。这个生态的真实活跃规模,大概只有一个数量级意义上的可信度。

但结构性的结论不受口径影响:MCP 已经越过了"有没有人做"的阶段,现在的问题是"做了之后谁在看着它"。协议把连接做完了,治理还欠着。

参考来源

  • AllMCPs《State of MCP: Model Context Protocol Ecosystem Statistics》,数据更新至 2026-11-01:https://allmcps.com/state-of-mcp
  • Small Print《MCP server statistics, 2026》,数据截至 2026-10-30:https://smallprint.dev/stats
  • Beam《AI Agent Vulnerability Database》(CVE 汇总,最后更新 2026-10-31):https://agentbeam.com/cve
  • CVE-2026-59176 functype-mcp-server 记录,2026-10-28:https://theworldofai.org/ai-news/cves/CVE-2026-59176
  • Pluto Security《Top MCP Security Risks Enterprises Need to Address》(rug pull / 跨服务器工具影子)
  • MCP 官方安全最佳实践(token passthrough、confused deputy、SSRF 相关条目)

评论(0)

暂无评论,来抢沙发~


关于本站 · RSS

浙ICP备2025156991号浙公网安备33010802013816号 浙公网安备33010802013816号 © 2026 智能体工场 - [从善如登] All rights reserved.