安全与生态
MCP 把外部能力接进 AI 应用,安全是头等话题:工具能执行操作,恶意服务器 = 恶意代码。面试主线:威胁模型、防护机制、生态现状。
威胁模型
| 风险 | 场景 |
|---|---|
| 恶意服务器 | 提供有毒工具(窃取数据、执行危险操作) |
| 提示注入 | 数据/资源内容诱导模型调用危险工具(见 agent 安全篇) |
| 权限滥用 | 模型被诱导执行超出预期的操作(删库、转账) |
| 供应链 | 依赖的服务器被投毒/被接管 |
核心认知:模型不是安全边界,工具执行要有应用层控制(权限、审批、审计)。
防护机制
工具执行四道闸: 权限 → 审批 → 沙箱 → 审计
| 层 | 机制 |
|---|---|
| 授权 | OAuth 2.1 授权码(远程服务器)、权限作用域 |
| 审批 | 高危工具人工确认(对应 LangGraph interrupt,见人机协同篇) |
| 隔离 | 服务器沙箱、最小权限账号 |
| 审计 | 完整调用日志(谁、何时、调了什么、结果) |
| 验证 | 服务器来源验证(官方目录、签名) |
授权:OAuth
- 远程 MCP 服务器用 OAuth 2.1:用户授权应用访问服务器资源(标准授权码流程)
- 用户可撤销授权;服务器可要求细化权限(只读/读写)
- 本地 stdio 通常不需要(进程权限即用户权限)
生态现状
| 生态项 | 说明 |
|---|---|
| 服务器目录 | 官方 registry 收录服务器(GitHub、Slack、数据库、浏览器等) |
| SDK | Python/TS 官方 + 多语言社区 |
| 框架 | FastMCP、mcp-adapters(LangChain 接入,见 LangChain 工具篇) |
| 客户端 | Claude Desktop、Cursor、IDE 插件、自研 Agent |
| 规范演进 | 开放治理(Linux 基金会),版本迭代快 |
面试话术:MCP 生态 = 服务器供给 + SDK/框架 + 客户端采纳。接入成本低(适配器),风险在权限控制,安全设计要应用层兜底。
面试追问
- MCP 的最大安全风险? 工具可执行操作:恶意服务器/提示注入/权限滥用。模型不是安全边界
- 怎么防护? 权限作用域 + 高危审批 + 沙箱隔离 + 审计日志 + 服务器来源验证
- 远程服务器怎么授权? OAuth 2.1 授权码,用户可撤销,可细化权限
- 和提示注入的关系? 工具输出可能带注入内容诱导更多危险调用,要内容过滤和最小权限
- 接入 MCP 的成本? 低:SDK + 适配器(LangChain 直接转工具)。风险在权限治理