Anthropic说,你的MCP工具可能大半都只是在浪费token

admin 2026-01-07 02:34:12 网络安全文章 来源:ZONE.CI 全球网 0 阅读模式

文章总结: 文章指出传统MCP工具调用在规模化时因上下文膨胀与LLM训练错配导致token浪费与性能下降,提出以CodeMode让LLM生成代码调用API,通过渐进式披露、沙箱执行、预处理数据等策略,token可降98.7%,并带来更强逻辑、安全与技能沉淀,但需额外沙箱基础设施与运维成本,是对补丁式MCP的修正。 综合评分: 88 文章分类: AI安全,安全工具,解决方案,安全开发,实战经验


cover_image

Anthropic说,你的MCP工具可能大半都只是在浪费token

原创

hhh

黑极客hijackY

2026年1月6日 16:40 四川

引言:从希望到瓶颈

模型上下文协议(Model Context Protocol,MCP)的诞生,无疑是 AI Agent 发展史上的重要一步。作为开放标准,它为连接 AI Agent 与外部工具搭建了桥梁,让我们对 Agent 执行复杂现实任务充满期待。

然而,随着 Agent 连接的工具数量从几十个增长到数百上千,一个严重影响效率和成本的“阴暗面”逐渐浮现:当 Agent 需要连接大量外部工具时,海量的工具定义和中间数据会迅速占满上下文窗口,导致成本飙升、效率下降。

如果你也遇到类似问题,Anthropic 发布的一篇技术博客提出了全新的解决思路,巧合的是,Cloudflare 在另一篇文章中也有类似洞察。

在深入探讨其“阴暗面”之前,我们先回顾 MCP 的初衷。

1. MCP 的初衷

在分析一种模式的局限之前,我们必须先理解其设计目标与核心价值。MCP 的出现,旨在解决 AI Agent 生态中的一个根本问题。

简单来说,MCP 是一个开放的统一协议,使 AI Agent 能够发现并使用外部工具(如 API),从而执行如“从 Google Drive 下载会议纪要并更新到 Salesforce”这类实际任务。根据 Cloudflare 的总结, MCP 提供三大核心价值:

  • 统一的 API 接口:将所有外部工具抽象为一组标准“工具”,本质是远程过程调用(RPC),为 Agent 提供一致交互方式。
  • 自带的说明文档:协议内包含 LLM 理解和使用 API 所需的全部文档,无需 Agent 自行搜索。
  • 标准化的授权机制:以带外(out-of-band)方式处理认证流程,简化 Agent 与工具的安全连接。

MCP 的重要性在于将 Agent 开发者与工具提供者解耦,催生了繁荣的生态。然而,其主流实现方式——直接工具调用,却带来了意想不到的瓶颈。

2. MCP 工作原理的“阴暗面”

传统 MCP 工具调用机制在规模化时为何效率低下?存在核心问题。

传统的“工具调用”机制

在传统模式下,LLM 不直接输出代码,而是生成特殊 token 来标记工具调用的开始和结束。例如,查询天气时,LLM 的内部工作流可能如下:


我将使用天气 MCP 服务器来查询德克萨斯州奥斯汀的天气。 <|toolcall|> {   “name”: “getcurrentweather”,   “arguments”: {     “location”: “Austin, TX, USA”   } } <|endtool_call|>


系统监测到这些特殊 token 后,会暂停 LLM 生成,解析 JSON 指令并调用外部工具。工具执行完毕后,结果以类似格式返回:


<|toolresult|> {   “location”: “Austin, TX, USA”,   “temperature”: 93,   “unit”: “fahrenheit”,   “conditions”: “sunny” } <|endtool_result|>


LLM 读取结果后继续生成文本。这一循环看似合理,却隐藏两大问题。

核心问题一:能力与训练的错配

第一个问题源于 LLM 的训练方式。Cloudflare 指出,LLM 并非天生擅长工具调用。用于标记工具调用的特殊令牌在真实语料中从未出现,模型能理解它们,完全依赖后期基于“人工合成数据”的微调。这导致 LLM 在面对大量或复杂工具时表现不稳定。

相比之下,LLM 在编写真实代码方面表现出色,因为训练数据包含数百万开源项目的高质量代码。Cloudflare 的比喻生动说明了这种错配:

“让 LLM 通过工具调用来执行任务,就像让莎士比亚上一个月中文速成班后写一部中文戏剧——这绝不会是他的最佳作品。”

核心问题二:上下文窗口的过度膨胀

第二个问题更致命,直接影响成本和性能。Anthropic 的分析揭示两种导致 token 消耗激增的场景:

  1. 工具定义过载:当 Agent 连接数百个工具时,主流做法是将所有工具定义和描述预先加载到上下文。这在处理用户请求前就可能消耗数万 token,增加延迟和费用。
  2. 中间结果冗余:执行多步任务时,每一步工具调用的完整输出都必须返回上下文,再由模型复制到下一步调用。(Anthropic 这里给出一个 “Google Drive 到 Salesforce” 的案例显示,如果一份会议纪要先被读入上下文,再被完整写入下一步参数。对于两小时的会议,这可能额外消耗 50,000 token,并易因上下文长度限制导致任务失败。)

上下文的急剧膨胀加剧了“能力错配”问题:在拥挤的上下文中,强迫不擅长工具调用的模型做出正确决策,难度和出错率倍增。这种低效高耗模式是限制 AI Agent 发展的关键瓶颈。幸运的是,解决方案是一次优雅的范式转移。

3. “Code Mode” 用代码生成代替工具调用

解决问题的核心思路不是抛弃 MCP,而是改变互动方式。这里 Anthropic 和 Cloudflare 提出的新范式核心一致:

让 LLM 不再直接“调用”工具,而是“编写代码”调用这些工具的 API。

Cloudflare 称之为“代码模式”(Code Mode),Anthropic 称之为“通过 MCP 进行代码执行”(Code execution with MCP)。

这一转变有效是因为它避开 LLM 在工具调用上的弱点(依赖人工数据),充分利用其代码生成能力(基于海量真实代码训练)。

新模式下,系统工作流程大致为:将 MCP 工具集自动转换为标准编程语言 API(如 TypeScript),让 LLM 在安全沙箱中生成并执行代码来完成任务。

即使采用代码模式,MCP 的价值依然关键。Cloudflare 指出,MCP 的“统一性”至关重要,它提供标准化方式连接、发现和授权 API,这是传统 API 不具备的。Agent 无需学习每种 API 的认证方式或搜索文档,这正是 MCP 的精髓。

4. 深入实践:代码模式如何落地?

将“代码模式”变为现实需要技术实现。Anthropic 和 Cloudflare 展示了两种路径。

Cloudflare 的 SDK 动态转换

Cloudflare 的 Agents SDK 实现动态转换机制。连接 MCP 服务器时,SDK 自动获取服务器 schema(工具定义),并即时转换为完整 TypeScript API 定义文件,含文档注释。

例如,连接查询 Cloudflare Agents 文档的 MCP 服务器后,SDK 生成如下 TypeScript 接口:


interface FetchAgentsDocumentationInput {   [k: string]: unknown; } interface FetchAgentsDocumentationOutput {   [key: string]: any; }

interface SearchAgentsDocumentationInput {   /**    * The search query to find relevant documentation    */   query: string; } interface SearchAgentsDocumentationOutput {   [key: string]: any; }

interface SearchAgentsCodeInput {   /**    * The search query to find relevant code files    /   query: string;   /*    * Page number to retrieve (starting from 1). Each page contains 30    * results.    */   page?: number; } interface SearchAgentsCodeOutput {   [key: string]: any; }

interface FetchGenericUrlContentInput {   /**    * The URL of the document or page to fetch    */   url: string; } interface FetchGenericUrlContentOutput {   [key: string]: any; }

declare const codemode: {   /**    * Fetch entire documentation file from GitHub repository: * cloudflare/agents. Useful for general questions. Always call    * this tool first if asked about cloudflare/agents.    */   fetchagentsdocumentation: (     input: FetchAgentsDocumentationInput   ) => Promise;

  /**    * Semantically search within the fetched documentation from    * GitHub repository: cloudflare/agents. Useful for specific queries.    */   searchagentsdocumentation: (     input: SearchAgentsDocumentationInput   ) => Promise;

  /**    * Search for code within the GitHub repository: “cloudflare/agents”    * using the GitHub Search API (exact match). Returns matching files    * for you to query further if relevant.    */   searchagentscode: (     input: SearchAgentsCodeInput   ) => Promise;

  /**    * Generic tool to fetch content from any absolute URL, respecting    * robots.txt rules. Use this to retrieve referenced urls (absolute    * urls) that were mentioned in previously fetched documentation.    */   fetchgenericurl_content: (     input: FetchGenericUrlContentInput   ) => Promise; };


生成的 API 定义呈现给 LLM,使其能像人类开发者一样编写调用这些函数的代码,代码在安全沙箱中执行。

Anthropic 的文件系统发现机制

Anthropic 提出基于文件系统的发现机制,将所有可用 MCP 工具生成清晰的文件树结构,每个工具对应一个文件。

例如,连接 Google Drive 和 Salesforce 的 MCP 服务器后,生成如下目录结构:


servers/ ├── google-drive/ │   ├── getDocument.ts │   └── index.ts └── salesforce/     ├── updateRecord.ts     └── index.ts


其中,getDocument.ts文件内容封装底层 MCP 调用:


// ./servers/google-drive/getDocument.ts import { callMCPTool } from “../../../client.js”;

interface GetDocumentInput {   documentId: string; }

interface GetDocumentResponse {   content: string; }

/* Read a document from Google Drive */ export async function getDocument(input: GetDocumentInput): Promise {   return callMCPTool(‘googledrivegetdocument’, input); }


此模式下,Agent 可像开发者浏览项目一样,通过列出目录和读取文件按需发现工具,而非一次性加载所有信息到上下文。

安全沙箱不可或缺

两种实现都强调关键点:执行 LLM 生成的任意代码必须在高度安全的沙箱中进行。

Cloudflare 的 isolates技术优势明显。与传统容器相比,isolates基于 V8 引擎,启动速度达毫秒级,内存占用仅几兆字节,极其轻量。可为每段代码即时创建新沙箱,用完即弃,开销可忽略,同时提供高安全性。

这些实现共同为“代码模式”带来颠覆性优势。

5. 代码模式带来的收益

“代码模式”不仅是技术优化,更是 AI Agent 能力的质变,从多维度解决传统工具调用的核心痛点。

颠覆性的上下文效率

这里省成本是最直观的优势。

  • 渐进式披露(Progressive Disclosure): 正如 Anthropic 所展示的,Agent 不再需要一次性加载所有工具定义。通过文件系统浏览或搜索,它可以按需加载当前任务所需的工具。Anthropic 数据显示,处理复杂任务时,token 使用量可从 150,000 锐减至 2,000,节省高达 98.7%。
  • 精简的工具结果: Agent 可以在代码中对海量数据进行预处理。例如,在获取一个包含 10,000 行数据的电子表格后,Agent 可以在代码中先执行过滤或聚合操作,最终只将小规模的关键结果(比如 5 行摘要)返回给模型,避免了用海量原始数据淹没宝贵的上下文窗口。

更强大的逻辑与控制流

Agent 可以利用编程语言原生的、强大的逻辑结构(如循环、条件判断、错误处理)来执行复杂任务。Anthropic 的 Slack 部署通知轮询案例就是一个典型场景。Agent 可以编写一个 while 循环来持续检查频道消息,这远比通过模型在多个工具调用和 sleep 指令之间来回切换要高效得多,延迟也更低。

显著增强的安全性与隐私性

  • 杜绝 API 密钥泄露:Cloudflare 的“绑定”(bindings)机制从根本上解决密钥安全问题。API 密钥由代理监督程序(Supervisor)持有管理,沙箱中代码无法接触密钥原文,彻底杜绝泄露。
  • 保护隐私数据:Anthropic 的方案展示强大隐私保护能力。敏感信息(如 PII)可在执行环境中自动“标记化”(tokenize)。客户真实数据在工具间流动时,进入模型上下文的仅是 [EMAIL_1]等占位符,真实数据永不暴露。

状态持久化与“技能”沉淀

  • 通过文件系统,Agent 可将任务中间结果或状态写入文件,实现复杂任务的断点续传。
  • 更重要的是,Agent 可将高效可靠代码片段保存为可复用“技能”(Skills)。随时间推移,Agent 能自主构建高层次能力库,提升解决问题效率。

这些优势共同使 AI Agent 能处理更复杂、长链条任务,成为强大数字助手。

6. 代码模式的成本与复杂性的权衡

当然,任何强大的技术方案都有其另一面。“代码模式”在带来巨大收益的同时,也引入了新的挑战和成本。

Anthropic 明确指出,代码执行模式的主要缺点在于引入额外的基础设施开销和复杂性,具体包括:

  • 安全执行环境:需构建和维护能安全运行任意代码的沙箱环境,这本身就是一个复杂的系统工程。
  • 资源限制与监控:必须严格限制代码运行资源(如 CPU、内存)并监控行为,防止恶意或低效代码耗尽资源。
  • 运维开销:相比于简单的直接工具调用,这种模式无疑增加了系统的运维负担和对安全性的考量。

从 Cloudflare 投入巨大精力开发 isolates 和 Worker Loader API 等专用基础设施,也从侧面印证了解决这一复杂性问题的高门槛和必要性。所以还是需要在效率提升与实现成本间权衡。对于需要处理大量工具、复杂逻辑或长链条任务的 Agent 应用而言,这种投入几乎是必然的选择。比如最近看到很多在做智能渗透agent的团队也用到了这种思想。

7. 写在最后

其实 MCP 在诞生之初感觉就是不太完美的一个方案,还是在原有的一些问题上打补丁,只是 Anthropic 影响力太大,导致了意料之外的火爆,有点将错就错的味道,这些方法感觉也是对这些补丁的一些修正。未来应该有更优秀的方案吧,憧憬一下未来。


参考:

https://blog.cloudflare.com/code-mode/ https://www.anthropic.com/engineering/code-execution-with-mcp


免责声明:

本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。

任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。

本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我

本文转载自:黑极客hijackY hhh《Anthropic说,你的MCP工具可能大半都只是在浪费token》

网络协议—DNS协议 网络安全文章

网络协议—DNS协议

文章总结: 文章以抓包实例拆解DNS完整流程:从浏览器输入域名到本地缓存、递归查询根/顶级域/权威服务器,最终返回IP并建立连接;详细对比请求与响应报文的以太网
评论:0   参与:  0