这是一篇关于 MCP(Model Context Protocol,模型上下文协议)的批判性文章,主要内容如下:
- TL;DR:希望自己对 MCP 的问题是技能不足导致的,MCP 发展迅速但工程实践不成熟,其 HTTP 传输设置应被丢弃,用类似 stdio 的 WebSockets 替代。
- 背景:约三周前开始尝试 MCP,Anthropic 是其标准化推动者,CEO 认为多数代码将由 LLM 编写。
- 协议:是与 LLM 结合使用的 JSON-RPC 协议,非本文重点但存在可批评之处。
传输:有 stdio 和“HTTP+SSE / Streamable HTTP”两种主要传输协议。
- Stdio:简单易理解,无需处理套接字,在所有操作系统中都能直接使用,但打破了 Unix/Linux 管道范式。
- HTTP+SSE / Streamable HTTP:HTTP 传输版本存在问题,“Streamable HTTP”是在 SSE 基础上制造的混淆概念,试图在不使用 WebSockets 的情况下实现类似功能,文档存在缺陷,实现困难且复杂,存在安全隐患。
- 陷入疯狂:在 Go 语言中实现 MCP 服务器时遇到诸多问题,如文档差、示例语言不佳、协议部分未文档化等,HTTP+SSE 和“Streamable HTTP”模式都存在设计问题和实现困难。
- 应做之事:行业应优先考虑常见用例,让 HTTP 传输尽可能像 stdio,用 WebSockets 替代复杂的跨服务器状态管理等。
- 附带说明:出现了更多协议,如 IBM 的 ACP 和 Google 的 A2A,它们更像是 MCP 中的工具,A2A 规范有合理之处但多数功能 MCP 可实现或稍加补充。
- 编辑:该文在 hacker news 和 reddit 引起关注,讨论可在相关链接查看。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。