
爆火的MCP协议要凉?Anthropic力推,但安全漏洞和设计缺陷让人捏把汗!
MCP协议旨在成为AI应用的通用接口,但其HTTP传输方式复杂且存在安全隐患,建议使用WebSockets并优化常见用例,IBM和Google的类似协议功能可用MCP实现,需更合理设计。
爆火的 MCP 协议:是未来还是疯狂?
大家好,最近有个东西特别火,叫做 MCP,全称 Model Context Protocol,它想成为 AI 应用的 USB-C 接口,让大模型能更方便地和各种数据源、工具连接,成为真正的智能体。
-
MCP 是什么? 简单说,就是一套标准化的 API,让大模型/智能体可以和外部世界互动。
-
背景: Anthropic 是 MCP 背后的主要推手,他们认为 MCP 能让大模型在一年内编写大部分代码。IBM 和 Google 也推出了类似的标准:ACP 和 A2A。
-
问题:
- 缺乏成熟的工程实践: 大厂们在模型训练上砸钱,但在文档、SDK 和实现指导上却很敷衍。
- HTTP 传输方式的混乱: MCP 推荐用 HTTP+SSE 或 "Streamable HTTP",但实际上是想在 SSE 上实现 WebSocket 的功能,非常复杂且不合理。
-
HTTP 传输方式的坑:
- HTTP+SSE 模式: 客户端需要先建立 SSE 连接,然后才能获取写入数据的 URL,服务端需要跨调用“连接”请求。
- "Streamable HTTP" 模式: 比 SSE 更复杂,有多种方式创建会话、打开 SSE 连接和响应请求,增加了开发难度和安全风险。
-
安全隐患:
- 状态管理漏洞: HTTP 和 SSE 混合使用,容易导致会话劫持、重放攻击等。
- 攻击面扩大: 多种会话创建方式增加了攻击入口。
- 混淆恶意活动: 灵活的会话和响应机制可能被用于隐藏恶意行为。
-
认证方式的迷惑: Stdio 传输方式可以用 API Key,但 HTTP 传输方式却强制使用 OAuth2。
-
该怎么办?
- WebSockets 是更合适的选择: 应该尽量让 HTTP 传输方式接近 Stdio,使用 WebSockets 代替复杂的 SSE 方案,简化状态管理和 corner cases。
- 优化常见用例: 行业应该关注最常见的场景,而不是边缘情况。
-
其他协议: IBM 和 Google 推出的 ACP 和 A2A,本质上是“Agent to LLM”的协议,但大部分功能可以用 MCP 实现。
总之,MCP 的想法很好,但目前的实现方式存在很多问题,需要更合理的工程设计和安全考虑