# ADR-0026 脚本批量调用工具由网关执行 - 状态:Accepted · 日期:2026-10-29 · 补充 ADR-0021、ADR-0025 · 设计见 [17-run-script](../design/17-run-script.md) ## 背景 MCP 工具比较底层时,一个任务可能要调用几百次。逐次调用慢、费 token、上下文会爆;模型在自己的沙箱中写的脚本调用不到 MCP 工具。业务方希望由模型灵活决定处理方式,而不是事先为每种用法在服务端做汇总工具。 ## 决策 - **网关执行脚本**:新增 `run_script` 工具,网关在 bubblewrap 沙箱中运行模型写的 Python 脚本,脚本经管道请求网关调用工具。 - 不采用"打开引擎沙箱访问网关的网络、把令牌交给脚本":两个引擎的沙箱规则不同,并且脚本会绕过网关的审批与审计。 - **权限**:只读工具直接调用;写工具须预先声明,执行前统一审批一次;破坏性工具不能在脚本中调用。 - **限额**:调用次数、并发、运行时间可在系统设置中调整;长时间运行的脚本复用后台调用转到后台。 - **记录**:每个脚本一条审计汇总,调用明细写入会话工作区的文件;进度以只推送的事件显示在对话中。 ## 后果 - 底层工具也能用于大批量任务,MCP 服务不必为每种分析方式提供汇总工具(接入指南 §3.7)。 - 写工具在脚本中可能被调用很多次,只在开始时审批一次;审批卡片显示脚本内容和限额,由用户判断。 - 脚本运行在服务账号下的沙箱中,只能访问会话工作区与 Python 运行环境。