用代码执行让 MCP agent 更高效
来自 Anthropic Engineering · 期号 2025-11-04
摘要
MCP 连接的工具越来越多,每次把全部工具定义和中间结果塞进上下文窗口,既慢又贵。 Anthropic 的方案是让 agent 写代码来调用工具,而不是直接调用工具。agent 生成一段 Python 脚本,在沙箱里执行,只把最终结果写回上下文。这样工具定义只需加载一次,中间结果也不经过模型。 文章给出了一个完整示例:agent 用 `mcp_execute` 工具执行代码,代码里调用 Google Drive 和 Salesforce 的 MCP 工具,全程只消耗一次工具定义和一次最终结果的 token。 原文是工程详解,附了代码片段。
深读
导读 当 agent 连接的工具数量从几个增长到几百上千个时,把所有工具定义和中间结果都塞进上下文窗口会变得既慢又贵。Anthropic 工程团队提出了一种替代方案:让 agent 写代码来调用工具,而不是直接调用工具。读完这篇文章,你会理解为什么代码执行能节省 98.7% 的 token 消耗,以及它在安全、状态持久化方面的额外收益。 关键信息 - 直接调用工具时,连接数千个工具需要处理数十万 token 的工具定义,然后才能开始读取用户请求。 - 一个 2 小时的会议转录在两次工具调用间传递,会额外消耗约 50,000 token。 - 采用代码执行方案后,一个原本需要 150,000 token 的任务(从 Google Drive 读取文档并写入 Salesforce)降至 2,000 token,节省 98.7%。 - Cloudflare 发布了类似发现,将这种模式称为 "Code Mode"。 - 代码执行环境默认保留中间结果,只有显式 console.log 或 return 的数据才会进入模型上下文,这为隐私保护提供了天然屏障。 逐节讲解 直接调用工具的 token 浪费 文章指出两种常见但低效的模式。第一,大多数 MCP 客户端会把所有工具定义一次性加载到上下文中,每个工具包含名称、描述、参数列表。当连接数千个工具时,模型需要先处理数十万 token 的工具定义才能看到用户请求。第二,中间结果必须完整经过模型。以「从 Google Drive 下载会议转录并附到 Salesforce 线索」为例,转录全文在第一次调用返回时进入上下文,在第二次调用写入 Salesforce 时又需要再写一遍。一个 2 小时的会议转录约 50,000 token,更大的文档甚至可能超出上下文窗口限制。 代码执行如何改善上下文效率 核心思路是把 MCP 服务器暴露为代码 API,而不是直接的工具调用。具体做法是生成一个文件树,每个工具对应一个 TypeScript 文件,agent 通过浏览文件系统来发现工具:先列出 ./servers/ 目录找到可用服务器,再读取具体工具文件了解接口。这样 agent 只加载当前任务需要的工具定义。文章给出的 Google Drive 到 Salesforce 示例中,agent 用 import 语句引入工具,在代码中完成读取和写入,全程只消耗一次工具定义和一次最终结果的 token——从 150,000 token 降至 2,000 token。 代码执行的额外收益 文章列出了代码执行带来的五个好处。渐进式暴露:模型擅长浏览文件系统,可以按需读取工具定义,或者通过 search_tools 工具搜索相关定义。上下文高效的结果处理:从 10,000 行电子表格中筛选出待处理订单时,agent 在代码中完成过滤,只把 5 行…