跳到主要内容
返回时间线
mastra.ai来源发表:

Mastra 给 MCP 工具调用加上后台任务:慢计算不再卡住智能体,客户端靠任务 ID 轮询取结果

核心概要

Mastra 在其 MCP 服务器与客户端中加入任务机制,让耗时的工具调用转入后台执行。此前 MCP 工具调用是同步的,单个 HTTP 请求要一直保持到调用结束,智能体循环因此被阻塞;已有的后台任务原语虽能释放循环,但调用一旦超过代理超时或负载均衡的空闲上限仍会失败。现在服务器先返回任务 ID 结束请求,客户端凭该 ID 轮询 working、input_required、completed、failed 或 cancelled 等状态,任务完成时再向智能体发出通知信号。

Source-provided article image: Introducing MCP Tasks in Mastra
mastra.ai

深度剖析

Mastra 的 MCP 服务器和客户端现在支持把工具调用作为任务在后台运行,智能体在慢或昂贵的计算进行期间仍能回应用户请求。 在此之前,MCP 工具调用是同步的,每次调用由一个保持到完成的 HTTP 请求处理,并阻塞智能体循环。 Mastra 已有的后台任务原语可以释放智能体循环,但若工具调用超过代理超时或负载均衡的空闲限制,最终仍会失败;任务机制针对的正是这一情形。

做法是让服务器立即返回任务 ID,从而结束 HTTP 请求并解除对智能体的阻塞。 客户端随后用这个 ID 轮询服务器,拿到带有 working、input_required、completed、failed 或 cancelled 状态之一的响应。 任务完成时,Mastra 向智能体发送通知信号,该信号在智能体下一次模型请求时到达正在运行的流程,而不必等智能体循环结束。

启示与展望

这套机制面向使用 Mastra MCPServer 与 MCPClient 的开发者,工具可按 always、auto 或 off 配置为任务,auto 在调用超过 syncWindowMs(默认 2 秒)时转为任务;运行中的任务仍可调用 suspend() 请求人工输入,并停在 input_required 状态等待客户端回应。

MCP 任务仍处于实验阶段,API 可能在不同版本之间变化。