尧图精选

Grok Build v1.0.17:MCP工具多步输入如何解决上下文丢失问题

🕒 发布时间:2026/9/5 5:11:30 📁 来源:尧图网络
在 AI 辅助开发工具里Grok Build 的 v1.0.17 更新把“MCP 工具多步输入支持”列为重点变更。这个变化没有听起来那么抽象它解决的是 AI 在调用外部工具时第一次返回结果没有被带进第二次调用、用户补充参数后对话就断掉的问题。对用过蓝湖 MCP、Figma MCP 或数据库 MCP 的人来说这个场景非常熟悉——模型先列出项目列表再从列表里挑一个 ID 执行导出或查询如果第二次输入接不住整条自动化链路就卡住了。这篇文章就围绕这个更新展开。先解释 MCP 多步输入到底是什么再给出可以落地的客户端配置、服务端工具设计示例最后把这类集成中最常见的“error sending request for url”现象拆开讲清楚并补充上生产前的检查清单。适合正在把 MCP Server 接到开发工具里、或者准备顺手搭一个 MCP 工具的开发者阅读。1. 从 v1.0.17 更新标题看“多步输入”不是新增协议而是补上编排缺口版本更新标题本身的用词很克制MCP 工具多步输入支持。它没有说“新增 MCP 协议支持”也没有说“上线全新工具调用框架”这说明基础能力之前已经有这次修正的是 AI 与 MCP 工具之间的交互完整性。1.1 Grok Build 在 AI 开发链路里充当的角色Grok Build 可以简单理解成一款面向构建和开发场景的 AI 驱动工具。它内部已经支持将业务系统暴露成 MCP Server然后以标准协议让模型调用这些工具完成查询、生成、构建、发布等操作。这种工具的价值在于代码生成不再是只靠模型“凭空写”而是能把真实项目里的构建参数、环境列表、产物路径都拿进来。模型判断“当前应该构建 Android 生产包”时不再只能猜字符串而是先通过 MCP 工具读到真实目标列表再做选择。1.2 为什么多步输入值得单独写进版本说明MCP 的底层交互本身支持工具多次调用。但“支持工具调用”和“在一个对话任务里连续完成两轮工具调用”是两件事。实际开发环境中大量操作是分步完成的第一轮调用“查询可用目标”拿到一组 ID。用户看到结果后说“构建第二个正式包”。第二轮调用“构建”参数里带上第一步返回的 ID。最终把构建结果返回给用户。这就是多步输入的典型链路。旧实现可能在第二轮就直接丢弃上一轮工具结果或者要求用户在第一轮就把所有参数都补齐。v1.0.17 里把它列为更新点说明这些场景得到了产品级的支持。注意多步输入不是让开发者把 MCP 工具写成一个巨大的状态机。它的正确价值是让“模型先调工具、再结合返回结果继续调工具”的过程在客户端侧能被稳定维持。2. MCP 工具调用其实有两类一次成型和分步确认了解这次更新之前先区分两类 MCP 工具。设计思路完全不同升级后是否受益也完全不同。2.1 一次成型工具参数齐全后单次执行这类工具入参明确不依赖前一次调用的返回。典型代表是“查询构建日志”“获取服务器状态”“生成指定 ID 的二维码”。它的调用过程是用户提问 - 模型决定调用工具 - 传入全部参数 - 工具返回结果 - 模型整理回答一次成型工具通常不需要用户在中间补充信息所以“多步输入支持”对它的影响不大。关键点只在工具参数描述是否清楚、返回结果模型是否能读懂。2.2 分步确认工具先查列表再带 ID 执行量更大也更容易出问题的工具是分步确认类型。例如蓝湖 MCP 的“获取设计稿标注并导出切图”、Figma MCP 的“按文件结构读取图层”、MySQL MCP 的“先列出数据库再列出表再执行查询”都属于这类。分步确认工具的过程是用户提问 - 第一次调用“列表类工具” - 返回候选列表 - 用户补充选择 - 第二次调用“动作类工具” - 返回最终结果可以对比一下客户端是否需要处理的状态调用类型是否依赖上一次工具结果是否需要用户中途补充最容易出错的位置一次成型否通常是全部参数一起给全工具描述不清晰分步确认是是常发生在第二次输入上下文丢失、ID 拼错、会话被重置v1.0.17 的“多步输入支持”主要受益者就是第二类工具。2.3 computer use 与 MCP 的区别也很容易混有些资料会把“computer use”和“MCP 工具调用”放在一起讨论但它们解决的问题不同对比维度MCP 工具调用computer use交互方式结构化 API、JSON 参数、明确 schema模拟鼠标键盘操作图形界面适用场景有 API、CLI、接口的系统只能通过界面操作的遗留系统稳定性高返回结构可校验低受界面布局影响接入成本需要把能力包装成 MCP Server需要视觉模型观察界面Grok Build 这类开发工具要稳定地构建、导出、发布优先走 MCP 这类结构化通道更合理。多步输入之所以重要正是因为结构化工具调用一旦接不住第二轮自动化价值会大打折扣。3. 使用 MCP Server 前客户端和服务端的配置必须先过一遍无论版本更新写得多好实际接入 MCP 时仍然分两端客户端负责发起调用服务端负责把业务能力暴露成 MCP 工具。下面用通用配置结构演示具体入口以 Grok Build 对应版本的文档和界面为准不要照搬文件名。3.1 客户端侧需要配置什么MCP 客户端通常需要告诉工具“去哪里找哪些 MCP Server”。配置文件结构大致如下{ mcpServers: { build-tools: { transport: streamable-http, url: http://127.0.0.1:8931/mcp, headers: { Authorization: Bearer your_token_here } }, local-helper: { transport: stdio, command: python, args: [server_demo.py] } } }这里有两种传输方式选择时不要只看名字传输方式适用场景学习环境成本生产环境要求stdio本地起的子进程最低一条命令行拉起需要守护进程、日志清理streamable-http远程独立服务需要先解决网络和鉴权需要 HTTPS、鉴权、限流、监控如果配置的是 stdio启动时要注意MCP Server 进程必须由客户端直接拉起且该进程不能向标准输出打印普通日志否则会污染 MCP 协议流。正确做法是把日志写到文件或者用标准错误输出。3.2 服务端侧最小实现下面用 Python MCP SDK 写一个两阶段的最小示例第一阶段返回构建目标列表第二阶段接收用户选择后完成一次模拟构建。这个示例主要用来展示工具返回结构如何影响后续调用不是某个产品的完整实现。# server_demo.py from mcp.server.fastmcp import FastMCP mcp FastMCP(build-demo) mcp.tool() def list_build_targets() - list[dict]: 获取当前可用的构建目标列表。第一次调用不需要参数。 return [ {id: android-prod, name: Android 生产包}, {id: ios-sit, name: iOS SIT 包}, {id: web-staging, name: Web 预发包} ] mcp.tool() def run_build(target_id: str, note: str ) - dict: 对指定目标发起构建target_id 必须来自 list_build_targets 的返回结果。 targets {item[id] for item in list_build_targets()} if target_id not in targets: return { ok: False, message: f无效的 target_id: {target_id}, hint: 请先调用 list_build_targets从返回的 id 字段中选择, available_ids: sorted(targets) } return { ok: True, target_id: target_id, build_number: 2025-001, status: queued } if __name__ __main__: mcp.run()这个例子里值得注意的不只是两个工具本身而是第二个工具失败时返回的内容。它没有只抛一个异常而是把错误原因、下一步建议和可用 ID 都放到返回结构里。这样模型在第二轮收到错误后有能力向用户解释清楚原因而不是回复一句模糊的“调用失败”。3.3 连接检查顺序配置完成后先按下面顺序做一次连通性检查不要急着进入多步交互Server 端进程是否启动端口是否被占用。客户端配置里的 url、command、args 是否和实际一致。鉴权 headers 是否配置正确。传输方式是否和 Server 端实现一致。用客户端发起一次最简单的工具调用确认返回正常。4. 多步输入怎么设计才不会把会话状态搞丢很多 AI 编程类工具在早期版本里的通病是第一轮工具调用成功后模型可以正常阅读返回结果但当用户针对结果再次输入时客户端却只把新消息发给模型没有把上一轮工具结果计算进上下文。v1.0.17 这类更新修复的正是这个交互断层。4.1 把工具拆成“查询 动作”两个入口而不是一个大工具设计 MCP Server 时最忌讳的是一个工具同时完成“查询列表、接收选择、执行动作”。更好的是把职责拆开。推荐拆分list_xxx - 只负责返回候选列表 get_xxx_detail - 按 ID 获取详情 do_xxx_action - 用户确认 ID 后执行动作拆分的原因很实际每个工具的 schema 会简洁清晰模型更容易决定“这一步调用哪个”。如果一个工具参数是可选的、各种字段纠缠在一起模型在第一步就会不知所措甚至反复传错参数。4.2 工具返回结果要写成“模型能看懂的结构”MCP 工具本质上是把外部系统能力交给模型编排。所以返回结果不仅要给人看更要给模型看。结构尽量遵循三个原则字段名和含义稳定例如始终用id不一会叫id一会叫targetId。错误信息要有下一步提示不要让模型自己去猜。可供选择的候选值要尽量附带方便模型直接在第二轮选用。上面那段 Python 代码里失败返回就同时带上了message、hint、available_ids。这里的关键点在于模型不是程序员它不知道你的系统里有哪些合法 ID而一次结构清晰的失败返回本身就承载了上下文信息。4.3 多轮会话要保证工具结果仍在上下文中对客户端来说多步输入支持的底层要求是每一轮工具调用产生的 message 都要按协议要求写回会话历史。大体上的信息流是user message assistant message (tool call 1) tool result message (result 1) user message (补充选择) assistant message (tool call 2) tool result message (result 2) assistant final answer如果第二轮开始时把第一轮 tool result 丢掉模型只会看到用户说“构建 Android 生产包”却不知道“android-prod”这个 ID 是从哪来的。虽然可以靠参数名称硬猜但真实 ID 一旦是系统内部编码猜测就会失败。所以在客户端侧升级到 v1.0.17 之后验证点应该落在上面这条消息链上检查工具结果是否被完整保留检查第二轮用户输入是否和第一轮工具结果处于同一个任务上下文里。5. 更新到 v1.0.17 后如何验证多步输入真的生效升级到新版本之后不要只做“单次调用正常”的验证要专门设计一个多步场景复现。5.1 用“先列表、再选择”的场景做冒烟验证不需要开发新业务直接对接一个现有分步 MCP Server 就行。例如蓝湖 MCP先问“列出最近项目”再问“把项目A 的切图导出到本地”。文件类 MCP先“列出目录”再“读取其中某个文件”。数据库 MCP先“列出数据库”再“列出某库的表”最后“查询指定表”。一个比较适合用于验证的自然语言对话流程是用户当前有哪些可用的构建目标 模型调用 list_build_targets。 模型列出返回结果。 用户构建 Android 生产包。 模型调用 run_build(target_idandroid-prod)。 模型返回构建队列信息和结果。5.2 判断生效的四个标志如果多步输入支持真正生效在客户端里应该观察到以下现象第一轮工具返回的列表能被模型完整使用。用户在第二轮输入中不需要手动复述 ID只需要说自然语言选择。第二轮工具调用使用了第一轮返回的真实 ID而不是猜测值。中间没有出现会话重置、重新询问权限或重复调用列表工具的情况。5.3 日志里看什么关键词调试时打开客户端或 Server 端日志关注以下日志特征tool call: list_build_targets tool result received: 3 targets user message: build android production package tool call: run_build arguments: {target_id: android-prod}如果日志里出现两次连续相同的“列表类”工具调用中间没有其他消息往往是客户端没有保留第一轮结果、模型被迫重查。这里要优先怀疑的仍是会话上下文配置而不是 MCP Server 本身。6. “error sending request for url”不是玄学按链路排查使用 MCP 过程中最容易遇到的一类稳定报错就是error sending request for url。这条错误在不少 Grok Build、Codex 等 MCP 客户端集成场景里都出现过。它发生在 HTTP 客户端向远程 MCP Server 发起请求的阶段通常还没有进入协议业务逻辑。6.1 现象和日志形态典型日志类似下面这样[ERROR] Failed to call MCP tool run_build error sending request for url http://127.0.0.1:8931/mcp这句话的意思是底层 HTTP 请求没有成功完成。它不直接告诉你“业务参数错误”而是在告诉你“请求根本没到达业务处理”。6.2 按表格逐项排查现象常见原因检查方式处理建议请求立即失败url 是本机地址Server 进程没启动或端口不对确认进程状态端口监听情况启动服务端检查端口占用请求在远端超时网络不可达或请求时间过长使用 curl 测试连通性确认地址可访问适当调大客户端超时返回 401/403鉴权 token 错误或过期查看 headers 配置和 Server 日志更新 token确认鉴权头名称返回 404url 路径错误对比客户端 url 和 Server 暴露路径修正为/mcp等正确路径返回 5xxServer 内部异常查看 Server 层日志根据堆栈修复 Server 端连接被重置网关或网络中间层拦截查看服务端访问日志、客户端网络出口确认服务端是否允许该来源访问排查时一定从第一层开始。用以下命令先验证地址是否真的能访问curl -v http://127.0.0.1:8931/mcp如果 curl 能连上说明网络和端口基本没问题问题大概率在协议或鉴权层如果 curl 直接报连接失败则先修服务端和网络。注意如果服务端正常完成过一次调用后偶尔才报这一个错误优先怀疑超时或服务端空闲回收。不要一上来就改工具参数先看请求阶段日志。6.3 学习环境和生产环境的配置责任不同学习环境里出错最多的是本地未启动、URL 写错、鉴权忘记加。生产环境里还要多考虑 Server 的独立部署、健康检查、监控报警和请求超时上限。检查项学习环境生产环境传输方式stdio 就够优先独立 HTTP 服务端口可运维鉴权本地无鉴权可接受必须使用成熟的鉴权方案日志控制台可见即可独立日志目录、轮转、采集超时配置默认值即可根据工具耗时显式设置回滚重启进程需要版本化部署和健康检查这也是学习时一条很重要的思路本地用 stdio 快速验证工具逻辑没有问题进入生产前再切换成独立服务并补鉴权和监控。7. 实际接入中最容易踩的三个坑这一节专门说坑。每一条都对应真实项目里反复出现的问题建议直接对照检查。7.1 配置改了MCP 工具列表却完全没有刷新现象在客户端里新增或修改了一个 MCP Server重新发起对话时模型仍然调用旧工具甚至完全看不到新工具。原因客户端可能缓存了启动时的工具列表。MCP 协议中工具列表通常会在会话初始化时获取一次不是每次对话都重新扫描。解决方式修改配置后重启客户端或手动刷新 MCP 工具列表确认服务端也重新加载了新工具定义。不要只改文件不重启然后怀疑工具写错了。预防建议把“修改 Server 代码 - 重启 Server - 刷新客户端工具列表”三步固化成固定流程避免漏掉最后一步。7.2 多步调用在第二轮丢掉上下文现象第一轮模型能正确列出结果但用户补充选择后客户端表现为重新开始或者模型反问用户完整 ID。原因客户端没有把第一轮工具结果作为历史消息传给下一次模型请求或者是任务被错误地拆成了两个独立会话。解决方式查看客户端是否保留 tool result message。如果使用通用 MCP SDK 封装自己的客户端需要检查请求体里是否包含完整助手消息和工具结果消息。预防建议设计自动回归用例覆盖“先列表工具、再动作工具”的完整流程。每次升级都要跑一遍。7.3 工具描述写得太模糊模型不知道在哪一步该传什么现象MCP 工具本身可以调用但模型经常传错参数例如把target_id填成Android 生产包而系统实际需要android-prod。原因工具 schema 只提供了参数名和类型没有解释参数的取值来源。模型无法把“名称”和“编码 ID”正确关联起来。解决方式在工具描述里明确写“target_id 必须从 list_build_targets 返回结果的 id 字段中取得”并在列表工具返回结果时直接给出明确的 id 和 name。示例代码里已经演示了这种写法。8. 最佳实践与扩展方向最后给出可以直接复用的实践清单以及 v1.0.17 之后可以继续扩展的方向。8.1 MCP Server 上生产前检查清单不要等到线上工具调用报错才排查。把下面几项做成发布前固定动作每个工具都有清晰的中文描述说明出参来源和典型调用方式。列表工具和动作工具职责分离避免一个工具参数爆炸。工具失败时返回结构化错误尽量附带可选值或下一步提示。stdio 服务不向 stdout 打印业务日志日志走文件或 stderr。远程服务使用 HTTPS鉴权 token 不能硬编码在仓库里。工具执行有超时限制客户端超时大于服务端最大处理时间。操作类工具在必要场景加入确认机制避免模型误触发不可逆操作。上线前完整跑一遍“查询列表 - 用户选择 - 执行动作 - 返回结果”的多步链路。8.2 从多步输入扩展到更复杂的自动化多步输入支持打通之后下一步值得尝试的方向是让多个 MCP Server 协作。例如一个工具负责从设计系统取色值另一个工具负责更新代码里的主题变量第三个工具负责触发界面预览构建。在这种场景下与其写一个“万能 MCP Server”不如保持每个 Server 职责单一让模型在客户端编排多步调用。Grok Build v1.0.17 把多步输入补上之后这类编排会明显顺畅。版本的更新记录通常只有一两句话但落到真实工作流里它代表的是“自动构建链路能不能在第二次交互时继续走完”。对接 MCP 工具时不要只停留在能调用还要重点验证上下文连续性、错误返回结构和超时表现——这三个点往往决定了工具从“能用”到“好用”的距离。
上一篇/下一篇内容由系统自动关联 返回资讯列表 →