Mindket

MCP 服务器安全吗?安装服务器(或技能)之前要查什么

深色金光英文横幅,标签是 MCP、Agent Skills、Claude Code 和“指南”,标题意为“MCP 服务器安全吗?”,下面一行意为“安装一个服务器(或技能)之前要查什么”。旁边是一个终端和一张清单(看清确切的命令、查发布者、读工具说明、只给它需要的最少权限、保持审批开启),上方是一面带锁的发光盾牌。

默认不安全。装一个 MCP 服务器,就是让别人的代码以你的权限在电脑上运行,或者把智能体读到的内容交给别人的服务器,MCP 本身并不审查这些代码。按规范的说法,调用工具就等于执行任意代码。Agent Skill 还能赶在 Claude 读到它之前,先跑一条 shell 命令。

要点

  • 每个服务器都锁定在一个版本上。
  • 在共享仓库上用脚本跑 Claude Code,启动时加上 --strict-mcp-config。
  • 不是你自己写的技能,第一次调用之前,先搜一搜会运行 shell 命令的 ! 写法。
本页目录
  1. 安装之前,先查这五项
  2. 可能出什么问题,证据有多硬
  3. 本地服务器和远程服务器,风险不一样
  4. Claude Code 会做什么,又在哪里不再询问
  5. Agent Skills 也要这样读一遍
  6. Mindket 会检查 MCP 条目的哪些地方
  7. 常见问题
  8. 资料来源

安装之前,先查这五项

  1. 读完整的命令或地址。MCP 安全指南规定,提供一键配置的应用,必须在运行前完整显示本地服务器的命令,不得截断。留意 sudo、rm -rf、网络请求,以及指向项目以外的路径。
  2. 查清是谁发布的。打开命令指向的软件包页面或代码仓库,把名称和厂商自己文档里写的对一对。MCP Registry 核验的是名称归属,服务器名称要绑定经过验证的 GitHub 账户或域名。代码扫描则由软件包仓库和各个市场负责。
  3. 读工具描述。MCP 规范说,对工具行为的描述,除非来自可信的服务器,否则都应视为不可信。去服务器的源码或 README 里把描述找出来,留意那些写给模型、而不是写给你看的话,比如要它对用户隐瞒某件事。Invariant Labs 在工具投毒演示里藏的,就是这种话。
  4. 只给最小权限。任务只需要读,就用只读令牌。文件类服务器只指向一个文件夹。添加服务器时先只加在你自己的配置里,用过没问题,再写进 .mcp.json 分享给团队。OWASP 把最小权限列为防范提示注入的措施之一。
  5. 先别关掉确认。亲眼看到服务器怎样工作之前,工具调用一律先问。之后只按名称预先批准具体的工具,别把整个服务器一起放行。在 Claude Code 里,权限规则 mcp__github__get_* 只批准这个服务器里以 get_ 开头的工具。

可能出什么问题,证据有多硬

比如你让智能体去 GitHub 提一个 issue。应用事先向每个 MCP 服务器要过工具列表,模型看名称和描述挑一个工具,应用去调用,再把结果交回模型。工具描述和返回结果都会原样进入模型的上下文。

描述是写给模型看的,你平时很少去读。里面要是藏了一条指令,模型可能就照着做。返回结果也能夹带指令,服务器抓回来的网页或文件,可能出自别人之手。OWASP 管这种情况叫间接提示注入,还说目前不清楚有没有办法彻底防住提示注入。拿提 issue 这个例子来说,就算有指令混进来,只读令牌也删不了仓库里的任何东西。确认提示也会在运行前列出这次要调用的工具和输入,等你同意。

表里这些风险,真正演示成功过的只有工具投毒和遮蔽,做实验的是 Invariant Labs 自己。其余是安全指南或规范里描述的攻击方式。真实受害人数和攻击频率,这些来源都没有统计。

Invariant Labs 在 2025 年 4 月的几次演示
  1. 工具投毒攻击公开

    指令藏在工具描述里,用户看不见,模型看得见。文章点名 Cursor 这类客户端易受影响。

    来源:Invariant Labs,2025 年 4 月 1 日 (2026年11月3日 查阅)

  2. WhatsApp MCP 被利用

    一个不可信的 MCP 服务器,把用户的聊天记录偷了出去。

    来源:Invariant Labs,2025 年 4 月 7 日 (2026年11月3日 查阅)

  3. MCP-Scan 发布

    一款 MCP 服务器安全扫描器,作为更新补记在第一篇文章里。

    来源:Invariant Labs,2025 年 4 月 11 日的更新说明 (2026年11月3日 查阅)

来源里提到的风险,以及各自给出的证据
风险会发生什么证据等级
恶意启动命令一行配置运行有害命令,比如把你的 SSH 密钥发到某个远程地址已描述:MCP 安全指南里的攻击模式,附示例命令
工具投毒工具描述里藏着文字,让模型读取 ~/.ssh/id_rsa,再当作工具参数发出去已演示:Invariant Labs 针对 Cursor 的实验,2025 年 4 月 1 日发布
遮蔽(shadowing)一个服务器的描述改变智能体使用另一个服务器工具的方式,邮件于是发给了攻击者已演示:同一批 Invariant Labs 实验
间接提示注入服务器抓取的网页或文件里夹着指令,模型照着做已描述:OWASP LLM01,以及 Claude Code MCP 文档里的警告
令牌透传远程服务器接受不是发给它的令牌,再转发给别的 APIMCP 授权规范明令禁止:可以拿去问厂商的设计缺陷
DNS 重绑定某个网站访问到你机器上一直开着的本地 HTTP 服务器已描述:规范要求服务器校验 Origin 请求头,原因就在这里
Luca Beurer-Kellner 在 X 上的帖子,讲他所称的 MCP “工具投毒”漏洞:聊天里让它算 5+1,它还顺手读了 mcp.json 和一个 SSH 公钥,发布于 2025 年 4 月 1 日
Luca Beurer-Kellner 在 X 上,2025 年 4 月 1 日
Luca Beurer-Kellner 在 X 上的帖子:一种新的 MCP 攻击用“休眠”设计绕过用户批准,泄露 WhatsApp 消息,发布于 2025 年 4 月 7 日
Luca Beurer-Kellner 在 X 上,2025 年 4 月 7 日

Luca Beurer-Kellner 是上面 Invariant Labs 文章的作者之一。这两条帖子是 X 官方嵌入组件的截图,11 月 3 日截取,时间按美国太平洋时间显示。点开任意一张,就能在 X 上看原帖。

本地服务器和远程服务器,风险不一样

本地服务器以客户端的权限运行,谁控制了它,谁就能在你的机器上执行任何命令。MCP 安全指南要求应用把本地服务器放进沙箱启动,限制它访问文件和网络,你同意了才多给权限。脚本或工具调用要连外部网络服务的话,Claude Code 的安全页面建议放进虚拟机里跑。

远程服务器拿到的,是智能体发过去的一切:工具参数,有时还有你文件里的文字。工具规范建议应用在调用服务器之前,先把工具的输入拿给你看。参数里要是夹带了你不想发出去的数据,不管是不小心还是有人故意,你都能在发送前发现。

远程服务器要你登录授权时,安全指南要求它一开始只申请最少的权限范围。令牌要是带着 files:*、admin:* 这类通配权限,一旦被盗,对方就能动用文件类工具,也能动用管理类工具,哪怕任务本来用不上。

本地还是远程,指南各自怎么说
本地服务器远程服务器 我们的选择
代码在哪里运行在你的机器上,以你的账户运行在别人的平台上
它能碰到什么攻击者一旦控制它,就能以客户端的权限执行任何命令智能体发给它的内容:工具参数,有时还有你文件里的文字
安全指南的要求放进沙箱,限制访问文件和网络要你登录时,从最小的范围集合起步

我们的选择:远程服务器。 如果你本来就有这家服务的账号,用厂商自己运营的远程服务器,陌生人的代码就不会跑到你的电脑上。

来源:MCP 文档:安全最佳实践 (2026年11月2日 查阅);MCP 规范:工具 (2026年11月2日 查阅)

Claude Code 会做什么,又在哪里不再询问

在交互式会话里,Claude Code 用项目级服务器之前会先请你批准,因为它们写在 .mcp.json 里,而这个文件可以提交到版本库。按它的 MCP 文档,claude -p 运行、Agent SDK 会话,以及项目线程以外的云端会话,都不会弹出这个提示。所以,用脚本在别人也能推送的仓库上跑 Claude Code,仓库 .mcp.json 里的服务器不会先经过你批准。要挡住它们,就把服务器逐个写进 disabledMcpjsonServers,或者用 --strict-mcp-config 启动。

光看 .mcp.json 也看不全。Claude Code 的安全页面提醒,其他作用范围的服务器、claude.ai 连接器和插件,都能往会话里加服务器。

Agent Skills 也要这样读一遍

Agent Skill 是装着说明和脚本的文件夹,不是一直运行的服务器。可在 Claude Code 里,它照样能跑命令。按技能文档的说法,技能里写成 ! 加反引号命令的那一行,会在内容发给 Claude 之前先运行,命令的输出再替换掉原来那行文本。

  • 设置里写上 "disableSkillShellExecution": true,这类命令就换成一句提示,不再运行,内置技能和托管技能除外。
  • allowed-tools 字段让 Claude 在调用该技能的那一轮里,不经询问就用列出的工具。你发出下一条消息,这项授权就清除了。它也不会限制其他任何工具。
  • 权限规则决定哪些技能能运行。把 Skill(deploy *) 写成拒绝规则,能挡住一个技能。拒绝 Skill,就关掉所有技能。

Mindket 会检查 MCP 条目的哪些地方

Mindket 上每个新建或改过的 MCP 条目,都要等审核员检查它启动的程序或连接的地址。本地服务器的程序只能是 npx、uvx、docker 这样的裸名称,不能是路径,参数里也不能有引号、$、;、|、& 这类 shell 会解析的字符。所以你从 MCP 服务器页复制的命令,只能启动条目里写的那个程序。审核员审的只是这一行命令,npx 从发布者那里下载的软件包代码不在审核范围内。

远程服务器的地址必须是公开的 https,不能指向你自己的网络。条目里不能带任何密钥,只写服务器需要的变量名或请求头名称,值由你自己填。觉得某个条目不对劲可以举报,三个账户举报后条目就会隐藏,等审核员来看。

Mindket 技能页上的提示词技能是现成的提示词,粘贴进 AI 对话之前可以先在页面上读一遍,没看过的东西不会运行。

我们在 2026 年 11 月 2 日 03:27(UTC)最后核对了下方来源列表中的页面,11 月 3 日又重读了 Invariant Labs 的两篇文章。我们没有实际测试任何服务器或技能。

常见问题

MCP 官方的参考服务器能放心用吗?

写它们的人可信,但这些服务器本来就不是给生产环境用的。服务器仓库的 README 说,这些是教学示例,不是能直接上生产的方案,并请开发者结合自己的使用场景和面临的威胁来评估。

Anthropic 或 Claude Code 会扫描 MCP 服务器里的恶意代码吗?

不会。按 Claude Code 的安全页面,Anthropic 不对任何 MCP 服务器做安全审计,也不负责管理,页面里也没提恶意代码扫描。Anthropic 真正审核的是连接器,按收录标准审过,才加进 Anthropic Directory。目录以外的服务器,它建议你自己写,或者只用可信提供方的。

本地 MCP 服务器能读我的文件吗?

能,除非有沙箱拦着。MCP 安全指南要求,服务器的命令要碰你的主目录、SSH 密钥、系统目录这类敏感位置时,应用得先提醒你。

我批准过的 MCP 服务器以后会变吗?

会。Invariant Labs 把这叫作 rug pull:客户端批准之后,服务器再改工具描述。它建议的防范办法,是让应用固定服务器及其工具的版本。

让 Claude Code 不经询问就运行 MCP 工具,安全吗?

Claude Code 先看拒绝规则,再看询问规则,最后看允许规则,所以拒绝规则总是优先。范围太宽的允许规则未必管用:写成 mcp__*、不带服务器名,就会被跳过,什么也不批准。

资料来源

  1. MCP 规范:安全,以及信任与安全 (2026年11月2日 查阅)https://modelcontextprotocol.io/specification/latest
  2. MCP 文档:安全最佳实践 (2026年11月2日 查阅)https://modelcontextprotocol.io/docs/tutorials/security/security_best_practices
  3. MCP 规范:工具 (2026年11月2日 查阅)https://modelcontextprotocol.io/specification/latest/server/tools
  4. MCP 规范:Streamable HTTP 传输 (2026年11月2日 查阅)https://modelcontextprotocol.io/specification/latest/basic/transports/streamable-http
  5. MCP 规范:授权 (2026年11月2日 查阅)https://modelcontextprotocol.io/specification/latest/basic/authorization
  6. MCP 项目:MCP Registry 注册表 (2026年11月2日 查阅)https://modelcontextprotocol.io/registry/about
  7. GitHub 仓库:modelcontextprotocol/servers (2026年11月2日 查阅)https://github.com/modelcontextprotocol/servers
  8. Claude Code 文档:通过 MCP 把 Claude Code 连接到工具 (2026年11月2日 查阅)https://code.claude.com/docs/en/mcp
  9. Claude Code 文档:安全 (2026年11月2日 查阅)https://code.claude.com/docs/en/security
  10. Claude Code 文档:配置权限 (2026年11月2日 查阅)https://code.claude.com/docs/en/permissions
  11. Claude Code 文档:用技能扩展 Claude (2026年11月2日 查阅)https://code.claude.com/docs/en/skills
  12. Invariant Labs:MCP 安全通告,工具投毒攻击 (2026年11月3日 查阅)https://invariantlabs.ai/blog/mcp-security-notification-tool-poisoning-attacks
  13. Invariant Labs:WhatsApp MCP 被利用 (2026年11月3日 查阅)https://invariantlabs.ai/blog/whatsapp-mcp-exploited
  14. OWASP 生成式 AI 安全项目:LLM01 提示注入 (2026年11月2日 查阅)https://genai.owasp.org/llmrisk/llm01-prompt-injection/

分享本文

添加之前,先把服务器读一遍

Mindket 上的每个 MCP 服务器都写明它运行什么或连接哪里、需要哪些变量、有哪些工具。第一项检查,添加之前就能做完。

浏览 MCP 服务器

本文的 Markdown 版本 · 博客 RSS 订阅 · 全部文章