@modelcontextprotocol/hono@2.0.2
MCP TypeScript SDK 发布 @modelcontextprotocol/hono@2.0.2 补丁版本(#2918,84804c2,Thanks @claude)。变更后,一个 Server 或 McpServer 一次只服务一个连接,无会话的 Streamable HTTP server transport(sessionIdGenerator: undefined)一次只服务一个请求。若应用对所有 HTTP 请求复用同一个 server 对象或无状态 transport,升级后第二个请求起会失败,connect() 以 SdkError 代码 ALREADY_CONNECTED 拒绝。官方建议改为按请求构建 server 与 transport。
发展脉络
- 首次出现@modelcontextprotocol/hono@2.0.2MCP TypeScript SDK Releases
- 当前判断MCP 生态正从早期快速铺开转向接口与生命周期语义的收敛,补丁版本即改变运行时行为,说明协议实现层仍在定型。对依赖 MCP 的框架与托管服务而言,升级成本会体现在连接管理代码上。可验证下一信号:其他语言 SDK 是否跟进同类连接语义,以及主流 MCP 客户端/框架是否发布兼容说明。Agent Pulse · 分析
MCP TypeScript SDK 的 @modelcontextprotocol/hono 发布 2.0.2 补丁,核心是连接语义收紧:一个 Server 或 McpServer 一次只服务一个连接,无会话的 Streamable HTTP transport 一次只服务一个请求。因此把单个 server 对象或无状态 transport 复用于所有 HTTP 请求的写法,在升级后从第二个请求开始失败,connect() 抛出 SdkError(ALREADY_CONNECTED)。仍可用的模式包括 createMcpHandler(buildServer) 与 serveStdio(buildServer)(buildServer 每次调用返回新 server)、每请求新建 server 与无状态 transport、每会话一个 server 与 transport(带 sessionIdGenerator),以及 close() 后重新连接。
这是把连接生命周期从“可复用单例”改为“每请求/每会话独占”的语义变更,属于补丁版本内的破坏性行为调整。判断依据是错误码 ALREADY_CONNECTED 与官方给出的迁移写法。可验证下一信号:后续版本是否补充弃用告警、迁移指南或类型层面的约束,以及社区 issue 中是否出现该错误码的集中反馈。
MCP 生态正从早期快速铺开转向接口与生命周期语义的收敛,补丁版本即改变运行时行为,说明协议实现层仍在定型。对依赖 MCP 的框架与托管服务而言,升级成本会体现在连接管理代码上。可验证下一信号:其他语言 SDK 是否跟进同类连接语义,以及主流 MCP 客户端/框架是否发布兼容说明。
对使用 MCP TypeScript SDK 构建服务端的一方,升级前需审计是否存在跨请求复用 server 或 transport 的代码,否则线上会在第二个请求起报错;按请求构建会增加对象创建开销,但换来更清晰的无状态部署模型。可验证下一信号:升级后错误率与连接相关告警是否随迁移完成而回落。
若该语义被其他 SDK 采纳,按请求构建 server 与 transport 可能成为 MCP 服务端默认范式,无状态部署与有状态会话的边界会更清晰。可验证下一信号:官方文档或示例是否统一改为 buildServer 模式,以及是否出现针对该变更的版本兼容矩阵。