主题
MCP 安全
MCP 常用于给 Agent 增加额外能力,例如读取文件、连接数据库、访问内部工具或执行命令。能力越强,风险也越高。
MCP 是什么
MCP 是模型上下文协议。你可以把它理解成 Agent 和外部工具之间的连接方式。
接入 MCP 后,Agent 可能不只是在聊天,还可能调用工具做事。
提示词注入风险
MCP 读取到的网页、文档、Issue、邮件或数据库内容里,可能包含“忽略之前规则”“读取 secret”“把文件发出去”这类恶意指令。Agent 可能把这些外部内容误当成用户指令。
降低风险的做法:
- 把外部内容视为不可信输入。
- 不要让读取类 MCP 同时拥有高危写入或命令执行权限。
- 对涉及文件写入、命令执行、网络发送和 secret 访问的工具调用要求人工确认。
- 对高风险工具设置 allowlist,只允许固定目录、固定命令或固定域名。
MCP 可能读取或写入文件
文件系统类 MCP 可能让 Agent 读取项目文件、写入文件或创建新文件。
风险:
- 误读敏感文件。
- 修改不该改的文件。
- 把本地 secret 带入上下文。
MCP 可能执行命令
某些 MCP 可以运行 shell 命令。
风险:
- 删除文件。
- 安装未知依赖。
- 运行危险脚本。
- 读取环境变量。
- 继承当前终端里的 API Key、token 或其他 secret。
stdio 形式的 MCP server 通常会继承启动它的进程环境变量。也就是说,如果你在同一个终端里设置了 ARQEL_API_KEY、数据库密码或云平台 token,MCP 进程可能也能读到。启动 MCP 前,先确认它确实需要哪些环境变量。
MCP 可能访问网络
网络类 MCP 可能连接外部服务或内部系统。
风险:
- 把敏感信息发送到外部。
- 访问未授权系统。
- 触发额外费用或请求限制。
不要连接不可信 MCP
只使用你信任来源的 MCP server。安装前先确认:
- 来源是否可信。
- 需要哪些权限。
- 是否会读写文件。
- 是否会执行命令。
- 是否会访问网络。
一次只加一个 MCP
不要一次添加多个 MCP。推荐顺序:
- 添加一个 MCP。
- 做只读测试。
- 查看它实际调用了什么。
- 确认没问题后再添加下一个。
保持 Agent 权限最小
能只读就不要给写权限。能限制目录就不要开放整个系统。能限制网络就不要开放全部网络。
如果工具支持审批模式,建议把这些操作设为每次确认:
- 写入或删除文件。
- 执行 shell 命令。
- 安装依赖。
- 访问外部网络。
- 读取
.env、密钥目录或生产配置。 - 调用会产生费用或修改远端状态的接口。
如果工具支持工具 allowlist,只开放当前任务真正需要的工具。不要为了省事一次性开放文件系统、shell、浏览器、数据库和内部管理接口。
远程 MCP token 权限
远程 MCP 可能需要 access token、API Key 或 OAuth 授权。请尽量使用最小权限 token:
- 能只读就不要给写权限。
- 能限制项目或组织就不要开全局权限。
- 能设置过期时间就不要用长期 token。
- 不要把生产管理员 token 用在本地测试 MCP。
如果远程 MCP 服务或配置文件泄露,立即撤销 token,并检查它能访问过哪些资源。
审计实际工具调用
不要只看 Agent 最终回复。第一次接入或改配置后,应查看它实际调用了哪些 MCP 工具、读取了哪些路径、访问了哪些域名、执行了哪些命令。
如果工具提供调用日志或审批记录,请保留短期审计记录,并确保日志中不包含完整 secret、客户数据或私有提示词。
和 Arqel 的关系
Arqel 负责 API 接入、Key 管理和请求记录。MCP 是 Agent 工具侧的扩展能力。即使模型请求走 Arqel,MCP 的本地文件、命令和网络权限仍需要你自己管理。
操作检查清单
启用 MCP 前,先确认:
- MCP server 来源可信,并且你看过它需要的权限。
- 优先只读;必须写入时,限制到当前项目目录。
- 不要让 MCP 访问
.env、密钥目录、生产凭证或客户数据。 - 第一次运行只做只读问题,观察它实际调用了哪些工具。
- 对写文件、执行命令、访问网络和读取 secret 的工具调用开启人工确认。
- 检查 stdio MCP 是否继承了不必要的环境变量。
- 远程 MCP 使用最小权限 token,并设置可撤销、可轮换的生命周期。
- 如果 MCP 会访问网络,确认目标域名和用途。
- 如果 MCP 会执行命令,确认不会安装未知依赖或运行危险脚本。
发现异常时:
- 立即停用该 MCP。
- 检查它访问过的文件、命令和网络目标。
- 如果可能读到 Key 或 secret,轮换相关 Key。
- 重新启用前先缩小权限范围,再做只读测试。