可流式HTTP赋能MCP,实现实时AI工具交互

Thenewstack

模型上下文协议(MCP)是一个开放标准,旨在将作为客户端的人工智能模型与作为服务器的外部工具和各种数据源无缝连接。虽然本地集成可以利用简单的标准输入/输出机制,但跨网络的远程交互则依赖于复杂的基于 HTTP 的通信层。这就是可流式 HTTP 发挥作用的地方,它是一种在 2025 年初推出的现代传输方式,是早期方法的演进,专门设计用于管理 AI 客户端与其远程工具之间的流式交互。本质上,可流式 HTTP 使 MCP 能够以连续的实时流在互联网上传输和接收数据,超越了传统的单一请求-响应范式。这项创新对于远程 MCP 服务器的运行方式至关重要,使 AI 代理能够以流畅且高度互动的方式与网络服务进行交互。

可流式 HTTP 的核心是一个基于 HTTP 的通信框架,它通过单一 HTTP 连接促进流式响应和双向通信。从客户端的角度来看,这通常涉及通过 HTTP POST 发送请求。服务器反过来可以通过传统的单一 JSON 消息进行响应,或者通过使用服务器发送事件(SSE)启动实时事件流来随时间传递多个消息。一个关键的设计特点是服务器使用一个统一的 HTTP 端点——例如 https://example.com/mcp——它既能处理用于发送命令的 POST 请求,也能处理用于建立持久监听流的 GET 请求。与旧的、更复杂的多端点方案相比,这种单端点架构显著简化了实现。至关重要的是,可流式 HTTP 通过基于标准 HTTP 协议(POST、GET)和 SSE 构建,同时实现长寿命数据流,从而保持与现有网络基础设施(如代理和负载均衡器)的兼容性。本质上,它提供了一种受控机制,使 MCP 能够通过 HTTP 流式传输数据,并在必要时使用 SSE 传递连续的服务器消息。

为了全面理解可流式 HTTP 的工作机制,追溯典型客户端-服务器交互的顺序步骤,从初始设置到终止,将非常有帮助。该过程始于客户端向服务器指定的 MCP 端点发送 HTTP POST 请求来启动会话。这个基础请求携带着关于客户端能力和所需协议版本的信息。成功处理后,服务器以 HTTP 200 OK 状态进行响应,关键是在其头部中包含一个唯一的 Mcp-Session-Id。此标识符是维护会话状态的基石,客户端必须在所有后续请求中包含它以保留上下文。响应体还确认了成功设置并详细说明了服务器的能力,例如可用的工具。

会话建立后,客户端通常会为服务器发起的消​​息打开一个辅助通信通道,称为公告通道。这通过向同一端点发送 HTTP GET 请求来实现,同样包含 Mcp-Session-Id 并通过 Accept: text/event-stream 头部信号其接收事件流的意图。服务器以 HTTP 200 OK 和 Content-Type: text/event-stream 头部进行响应,并无限期保持 TCP 连接打开。这种持久连接允许服务器随时向客户端推送 JSON-RPC 请求或通知,而与客户端自己的命令请求无关。

可流式 HTTP 的真正强大之处在于处理需要实时更新的长时间运行任务时变得显而易见。当客户端需要执行此类任务时,例如运行数据分析脚本,它会发送另一个包含相关命令的 HTTP POST 请求,并附带 Mcp-Session-Id。服务器识别到这可能是一个长时间操作,会立即以 HTTP 200 OK 状态和 Content-Type: text/event-stream 头部进行响应。此操作会保持 此特定 POST 请求 的连接打开,将其响应体转换为专用的 SSE 流。随着任务的进行,服务器会在此流上以 SSE 事件的形式发送实时更新。一旦任务完成,最终结果将作为最后一个 SSE 事件发送,然后此特定流将被关闭,将所有进度更新和最终结果整齐地限定在发起请求中。

至关重要的是,这两个通道独立运行。当一个长时间运行的 POST 事务正在进行时,服务器仍然可以与客户端就无关事项进行通信。例如,如果服务器上添加了新工具,它可以构建一个通知并将其作为 SSE 事件发送,而不是发送到活动的 POST 响应流上,而是通过之前建立的持久 GET 连接发送。这展示了公告通道的作用,它提供会话范围的通用通知,与任何特定的客户端发起命令解耦。

该协议还设计用于抵御网络故障。如果客户端的长期 GET 连接(公告通道)断开,客户端的网络库会检测到断开连接并立即发出新的 HTTP GET 请求。此请求包含 Mcp-Session-IdLast-Event-ID 头部,指示最后成功处理的事件。服务器使用此信息重放客户端可能错过的在该事件之后发送的任何消息,从而无缝恢复公告通道而不会丢失数据。这种分层状态方法——其中 Mcp-Session-Id 创建持久的应用层会话,而开放的 HTTP 连接提供短暂的传输层流状态——实现了这种弹性,允许协议在发生中断时使用持久应用状态重建短暂的传输状态。

最后,当客户端完成所有任务时,它通过向 /mcp 端点发送 HTTP DELETE 请求(包含 Mcp-Session-Id)来显式终止会话。服务器验证 ID,清理任何相关的会话状态,关闭持久 GET 连接,并使会话 ID 失效,然后以 HTTP 200 OK 响应,正式结束通信生命周期。

可流式 HTTP 是 MCP 能够以丰富、互动的方式将 AI 代理与互联网上的工具连接起来的基石。通过将 HTTP 扩展为流友好并利用 SSE 进行持续更新,它为需要流式输出、管理长时间运行任务和保持实时同步的 AI 系统提供了必不可少的灵活性。与传统的 HTTP 请求-响应模型不同,可流式 HTTP 使对话保持活跃:AI 代理可以与工具启动任务并立即开始接收进度更新或结果,而工具也可以在同一持久通信线路上发送警报或请求澄清。这种方法通过会话恢复能力显著增强了可靠性,并通过避免不必要的常开连接提高了效率,同时仍与既定的网络标准完全兼容。在实践中,可流式 HTTP 实现了诸如编码助手从远程构建工具流式传输实时日志,或数据分析代理查询数据库并增量接收结果等场景。它有效地将 HTTP 的简单性与流的强大功能相结合,通过提供一个统一、健壮的接口来在 AI 和世界之间流式传输上下文和数据,实现了 MCP 作为“AI 工具的 USB-C”的承诺。