给 Agent 开 MCP 写接口的 4 个坑:原子批量 undo、幂等键失效与面向模型的错误格式

jangtrinh · reddit · 2026-10-30

DESIGN:OS Studio(Rust 写的设计编辑器)作者分享了其本地 stdio MCP 服务器 designos-mcp(36 个工具)写入路径上的 4 个设计决策与权衡,对任何做「agent 可写」工具的人都极具参考价值:

1. 把 undo 写进工具契约

designosapplybatch 接受 1–200 个操作作为一个原子事务、一个 undo 组,支持 dryrun,后续操作可用 $prev 和 @handle 引用前面的结果。若不批量,agent 做 40 次小写入,人类就要按 40 次 Cmd+Z。

2. undo 本身也要测

踩坑案例:在大型设计套件上,一次编辑 + Cmd+Z 竟然改动了 80 个图层、最多偏移 1332px——原因是 undo 在撤销步骤之外重新求解了 auto layout。修复方式是精确重放记录的逆操作,重新求解仅保留用于撤销 agent/MCP 的编辑。

3. 重试可能撒谎

写入支持可选 idempotencykey:相同 key+参数返回首次响应且不再写入。陷阱是:agent 用 key K 写入→人类撤销→agent 用 K 重试,重放旧响应会报告一个已不存在的成功。解决方案:账本对已撤销的写入返回 IDEMPOTENCYKEYSTALE,重连后仍保持失效,迫使 agent 重新决策。

4. 错误信息写给模型看,不是写给日志

所有错误统一 JSON 结构,含 code、path、received、expected、validoptions、correctedexample、safetoretry、nextstep,批量中失败的操作会指明是哪一个、为何失败。此前无效字段会暴露成原始 serde 类型错误,0.6.3 起改为直白表述。

未解决:无键写入没有去重,agent 可能循环调用同一个失败工具(#1290)。

项目免费、source-available(PolyForm Shield)、无遥测,复用 agent CLI 登录,无需 API key。

原文链接 →

「编程与Agent」频道最新

更多「编程与Agent」频道 AI 资讯 →