MCP 没有解决大模型如何调用工具的问题,MCP 解决的是 大模型客户端 如何调用工具的问题。最近手搓一个带 MCP 功能的 Chatbox ,发现 MCP 协议和生态完全是一坨,踩了不少坑,于是拿出来吐嘈一下。欢迎指教。3 种通信协议:stdio, HTTP+SSE, Streamable HTTP。
https://modelcontextprotocol.io/specification/2025-06-18/basic/transports
stdio 下,来一个请求启动一个 process ,直接对接 stdio stdout 二进制流。先不说性能和安全问题,管道中的一段数据被缓冲区截断怎么办?客户端什么时候知道数据读取完了?流式输出的工具怎么调用? stderr 管道的数据怎么标记并传输? stdio 方案就是个玩具。
接着是 HTTP+SSE ,客户端与服务器建立一个长连接 SSE 来 获取数据。发送数据需要客户端另外建立 HTTP POST 链接。多个链接之间使用 MCP Session ID 识别。不知道是喝了多少想出来的。。。硬生生把所有 server 变成 stateful 。最坑的是,这种协议已经被弃用,官方文档也只有一句弃用的说明。而阿里百炼 MCP 广场和许多在线 MCP 只支持这种协议。如果我手搓的客户端不兼容这种协议,将会失去许多可用的在线 MCP 。
最后一种 Streamable HTTP 就比较正常了。好不容易调通了,发现了 CROS 的问题。几乎所有在线 MCP 都没有考虑 CROS 。fastmcp 这个框架也没有很直观的开启 CORS 的选项。怎么的? mcp server 都不打算公开在线用的是吗?另外是需要登录的 MCP 。例如 Google Gmail 的 MCP 需要登录 Google 帐号,流程太复杂了我都不想去实现了。气死我了气死我了
就说一个,如果我 AI 接入了 100 个,1k ,1w 个 mcp ,请问该怎么工作?
如果不能解决这个问题,那么这个 MCP 还只能是有限 MCP 。
你只需要支持 Streamable HTTP 格式即可。目前 lobechat 就是这样做的。