2026年9月29日,Earendil正式发布了Pi 0.99.0版本。曾经在官网首页高挂不支持MCP声明、核心成员Mario Zechner甚至专门撰文论证为什么你不需要MCP的Pi团队,在这天把MCP原生内置进了核心层。

表面上看,这是一出向行业现实低头的俗套戏码。当Anthropic与OpenAI几乎把MCP做成了大模型工具链的事实标准,任何固守轻量CLI和Unix管道哲学的Agent框架都会被生态裹挟。但细看Pi 0.99.0的技术实现就会发现,这并非降旗投降,而是一场精心谋划的反向夺权。

伪方案破产与Token黑洞

此前Pi团队不愿接纳MCP,很大程度是因为现有MCP生态充斥着对上下文窗口的粗暴挥霍。大部分MCP Server仍按照最原始的Harness设计,习惯把未经裁剪的大段原始文本直接倾倒入上下文,让大模型在泥潭里翻找答案。

微型通用代理工具难以承受未经裁剪的原始文本洪流(示意图)
微型通用代理工具难以承受未经裁剪的原始文本洪流(示意图)

社区早期为了在Pi上强行使用MCP,涌现了以nicobailon/pi-mcp-adapter为代表的第三方插件。这类插件玩了一个聪明的数字把戏:通过声明一个仅占约200 token的单一通用Proxy工具和mcpScript脚本,试图规避庞大Schema对上下文的挤占。

但这套逻辑很快在真实工程中演化成了灾难。单一代理工具抹去了类型约束,把服务发现、连接、鉴权与格式解析的全部负担,统统丢回给了大模型的推理循环。模型不得不反复猜测参数、解析错误并在多轮对话中盲目重试,省下的定义成本,最终全被不可控的多轮往返Token翻倍吞噬。

随后社区派生的@ineersa/my-pi-mcp-adapter试图通过关键字搜索和按需激活类型化Schema来止血,宣称单轮对话能节省数千Token上下文。这证明了社区对动态调度的渴求,但也暴露了第三方扩展的天然天花板:没有底层运行时对模型新特性的感知能力,外挂层永远在拆东墙补西墙。

两种调用范式的上下文消耗对比 传统单步往返(代理层) 定义成本极低,全靠推理硬猜 初始Schema:约200 Token 重试与解析:高频往返累加 中间多余文本全部入驻Context 后果:推理成本膨胀,上下文迅速耗尽 Pi 0.99.0 Codemode沙盒 代码编排,端侧就地过滤 五级Exposure:按需延迟暴露 QuickJS沙盒:并发与顺序管道 过滤后返回:仅结构化终态入模 收益:单轮单次交互,消解中间冗余

五级暴露与WASM沙盒

Pi团队意识到,MCP最致命的瓶颈是难以组合(Hard to compose)。在现行规范下,如果一个任务需要调用三次回调,模型就必须做三次完整的文本往返,把庞大的中间结果全部压进提示词窗口。

Pi通过五级暴露模式将工具调度收归沙盒运行时
Pi通过五级暴露模式将工具调度收归沙盒运行时

在最新发布的Pi 0.99.0中,团队重构了核心扩展系统。内置MCP不仅同时支持stdio和streamable HTTP协议、提供OAuth认证,还允许开发者通过mcp.json或pi.registerMcpServer()注册服务。更核心的改变,在于Pi设计了五种工具暴露模式(Exposure Modes):

  • direct.始终声明给模型上下文,适合高频核心能力;
  • codemode.仅在JS环境中可见,由代码沙盒调用并汇总结果;
  • codemode-deferred.沙盒内按需搜索并动态激活;
  • deferred.通过tool_search按需加载进主上下文;
  • hidden.完全注册但在当前会话保持禁用。

与其配合的是Pi原生绑定的Codemode机制。Codemode基于编译为WASM的QuickJS沙盒,直接运行在Agent Harness端。大模型不再被当成一个单步按按钮的操作工,而是变成了一个写代码的调度员:模型直接编写一段JavaScript代码,利用内置的prepareLoadout()、outputSchema和带有调用记录限制的嵌套ctx.executeTool(),在本地沙盒内顺序或并发编排多个MCP工具调用。

海量原始数据在沙盒内被就地过滤、清洗,最终只有经过裁剪的structuredContent与isError标识会被送回模型上下文。

Pi 0.99.0 的五级工具暴露层级(Exposure Modes) direct 始终暴露在主上下文 核心高频工具 codemode 仅JS沙盒可见 代码管道编排 codemode-def 沙盒内动态检索 按需激活函数 deferred tool_search检索 进主上下文 hidden 已注册但禁用 屏蔽无效干扰

殊途同归的权力转移

如果把视角从Pi挪开,会发现整个行业正在形成一种心照不宣的默契。

沙盒自动循环绕过了传统工具调用的人工确认边界(剖面示意)
沙盒自动循环绕过了传统工具调用的人工确认边界(剖面示意)

OpenAI在其最新的Tool Search规范里,明确建议对庞大工具集采用命名空间(Namespace)或MCP服务器级别的延迟加载(defer_loading: true),并建议将每个命名空间严格控制在10个函数以内以削减上下文消耗。而Anthropic在Advanced Tool Use方案中,同样在推行延迟工具加载(Deferred Tools)与代码执行(Code Execution)的结合。

协议提供原材料,但调度权必须收归运行时。

各方看似实现细节不同,本质上是在做同一件事:终结模型对外部协议的直接盲目依赖。MCP一度试图让外界以为它能一统接口天下,但在真实的工程重力面前,静态描述是抵挡不住上下文爆炸的。

古人讲「善战者,因其势而利导之」。Pi这次推翻旧言,不是向MCP妥协,而是把MCP降维成了一个纯粹的远程数据获取接口,然后用自己的WASM代码沙盒把调控权力夺了回来。

  • 风险.当编排逻辑被封装进QuickJS沙盒、由模型自动循环执行时,传统工具调用中单步人工确认(Approval)的安全边界被彻底击穿了;如果在沙盒代码中触发了连带的破坏性操作,现有的事后审计几乎无能为力。

这场版本更新释放的信号非常明确:给Agent喂工具的粗放时代已经结束。MCP Server开发者如果继续抱着返回未裁剪大文本的旧习惯,迟早会被这种沙盒编排机制排除在可用链路之外。