# MCP 服务器安全吗？安装服务器（或技能）之前要查什么

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

Mindket 编辑部 · 发布于 2026-11-02 · 更新于 2026-11-03 · https://mindket.com/cn/blog/are-mcp-servers-safe

## 要点

- 每个服务器都锁定在一个版本上。
- 在共享仓库上用脚本跑 Claude Code，启动时加上 `--strict-mcp-config`。
- 不是你自己写的技能，第一次调用之前，先搜一搜会运行 shell 命令的 `!` 写法。

## 安装之前，先查这五项

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

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

比如你让智能体去 GitHub 提一个 issue。应用事先向每个 [MCP 服务器](https://mindket.com/cn/blog/what-is-mcp)要过工具列表，模型看名称和描述挑一个工具，应用去调用，再把结果交回模型。工具描述和返回结果都会原样进入模型的上下文。

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

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

**Invariant Labs 在 2025 年 4 月的几次演示**

1. **2025年4月1日** 工具投毒攻击公开。指令藏在工具描述里，用户看不见，模型看得见。文章点名 Cursor 这类客户端易受影响。
2. **2025年4月7日** WhatsApp MCP 被利用。一个不可信的 MCP 服务器，把用户的聊天记录偷了出去。
3. **2025年4月11日** MCP-Scan 发布。一款 MCP 服务器安全扫描器，作为更新补记在第一篇文章里。

来源：[Invariant Labs，2025 年 4 月 1 日](https://invariantlabs.ai/blog/mcp-security-notification-tool-poisoning-attacks) (2026-11-03 查阅)；[Invariant Labs，2025 年 4 月 7 日](https://invariantlabs.ai/blog/whatsapp-mcp-exploited) (2026-11-03 查阅)

| 风险 | 会发生什么 | 证据等级 |
| --- | --- | --- |
| 恶意启动命令 | 一行配置运行有害命令，比如把你的 SSH 密钥发到某个远程地址 | 已描述：MCP 安全指南里的攻击模式，附示例命令 |
| 工具投毒 | 工具描述里藏着文字，让模型读取 `~/.ssh/id_rsa`，再当作工具参数发出去 | 已演示：Invariant Labs 针对 Cursor 的实验，2025 年 4 月 1 日发布 |
| 遮蔽（shadowing） | 一个服务器的描述改变智能体使用另一个服务器工具的方式，邮件于是发给了攻击者 | 已演示：同一批 Invariant Labs 实验 |
| 间接提示注入 | 服务器抓取的网页或文件里夹着指令，模型照着做 | 已描述：OWASP LLM01，以及 Claude Code MCP 文档里的警告 |
| 令牌透传 | 远程服务器接受不是发给它的令牌，再转发给别的 API | MCP 授权规范明令禁止：可以拿去问厂商的设计缺陷 |
| DNS 重绑定 | 某个网站访问到你机器上一直开着的本地 HTTP 服务器 | 已描述：规范要求服务器校验 Origin 请求头，原因就在这里 |

[![Luca Beurer-Kellner 在 X 上的帖子，讲他所称的 MCP “工具投毒”漏洞：聊天里让它算 5+1，它还顺手读了 mcp.json 和一个 SSH 公钥，发布于 2025 年 4 月 1 日](https://mindket.com/blog/shots/x-lbeurerkellner-tool-poisoning.webp?v=29046c89c3ee)](https://x.com/lbeurerkellner/status/1907075048118059101)

Luca Beurer-Kellner 在 X 上，2025 年 4 月 1 日

[![Luca Beurer-Kellner 在 X 上的帖子：一种新的 MCP 攻击用“休眠”设计绕过用户批准，泄露 WhatsApp 消息，发布于 2025 年 4 月 7 日](https://mindket.com/blog/shots/x-lbeurerkellner-whatsapp-mcp.webp?v=fd37568861ec)](https://x.com/lbeurerkellner/status/1909254307221827745)

Luca Beurer-Kellner 在 X 上，2025 年 4 月 7 日

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

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

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

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

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

**本地还是远程，指南各自怎么说**

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

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

来源：[MCP 文档：安全最佳实践](https://modelcontextprotocol.io/docs/tutorials/security/security_best_practices) (2026-11-02 查阅)；[MCP 规范：工具](https://modelcontextprotocol.io/specification/latest/server/tools) (2026-11-02 查阅)

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

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

光看 `.mcp.json` 也看不全。Claude Code 的[安全页面](https://code.claude.com/docs/en/security)提醒，其他作用范围的服务器、claude.ai 连接器和插件，都能往会话里加服务器。

## Agent Skills 也要这样读一遍

[Agent Skill](https://mindket.com/cn/blog/what-are-agent-skills) 是装着说明和脚本的文件夹，不是一直运行的服务器。可在 Claude Code 里，它照样能跑命令。按[技能文档](https://code.claude.com/docs/en/skills)的说法，技能里写成 `!` 加反引号命令的那一行，会在内容发给 Claude 之前先运行，命令的输出再替换掉原来那行文本。

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

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

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

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

Mindket [技能页](https://mindket.com/cn/skills)上的提示词技能是现成的提示词，粘贴进 AI 对话之前可以先在页面上读一遍，没看过的东西不会运行。

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

## 常见问题

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

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

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

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

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

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

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

会。[Invariant Labs](https://invariantlabs.ai/blog/mcp-security-notification-tool-poisoning-attacks) 把这叫作 rug pull：客户端批准之后，服务器再改工具描述。它建议的防范办法，是让应用固定服务器及其工具的版本。

### 让 Claude Code 不经询问就运行 MCP 工具，安全吗？

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

## 资料来源

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

[浏览 MCP 服务器](https://mindket.com/cn/mcp-servers)
