Pi Agent 为什么不内置 MCP:工具发现与上下文成本的真实争议

Pi 为什么不内置 MCP:工具发现与上下文成本的真实争议

一个 Coding Agent 原来只有 readwriteeditbash 四个通用工具。团队接入工单、 数据库、监控、云平台和内部知识库后,工具很快增加到几十个。最直接的做法,是把每个 MCP Server 暴露的工具定义都交给模型:名字、描述、参数 Schema、返回结构一次性进入上下文。

连接成功了,模型却不一定更好用。它可能在相似工具之间选错,把大量输入预算花在与当前任务 无关的 Schema 上;一次批量查询的中间结果又完整回到上下文,下一轮继续重复计费。另一种做法 是只给模型 Bash,让它通过 CLI 完成所有操作。工具列表变短了,但帮助文档、参数发现、文本 解析、认证、错误语义和权限审计并没有消失,只是换了位置。

这就是 Pi "不在核心内置 MCP"最值得讨论的地方。它不是"标准协议与反标准协议"的站队, 而是一个 Harness 应该回答的四个工程问题:

text 复制代码
工具目录什么时候出现?
完整 Schema 什么时候进入模型上下文?
中间结果由模型处理,还是由受控执行环境处理?
发现、权限、凭证、缓存和审计最终由谁治理?

本文的核心结论是:MCP 统一了连接、发现和结构化调用,但不会自动替 Host 决定上下文与治理 策略;Pi 选择小核心,也不会自动消除 CLI 的隐性成本。真正可靠的方案,是根据工具规模、复用 范围和风险,把 CLI、Skill、Extension、MCP 或混合架构放到正确的责任层。

一、先把"协议"和"宿主策略"分开

MCP 的基础结构包含 Host、Client 和 Server。Server 暴露 Tools、Resources 或 Prompts;Client 维护与某个 Server 的连接;Host 负责把这些能力组织进用户实际使用的 Agent 或应用。

当前 2026-07-28 工具规范明确了几个关键动作:

text 复制代码
tools/list                         发现当前可用工具
tools/call                         调用指定工具
notifications/tools/list_changed   工具列表变化通知

这套协议回答的是:能力怎样被描述、发现和调用。它并没有要求 Host 必须在会话开始时把每个 工具的完整定义全部塞进模型,也没有规定模型必须直接逐次调用。规范甚至明确允许实现采用适合 自己的交互方式。

因此下面两句话不能画等号:

text 复制代码
Client 已通过 tools/list 取得工具目录
≠
模型上下文已经加载全部工具 Schema

工具目录可以只存在于 Host 的 Registry、索引或缓存中。模型先看到少量分类和检索入口,命中 候选后再加载详情;也可以只面对一个稳定的 call_tool Broker,由 Host 在模型外路由。协议 提供互操作基础,Host 决定什么进入上下文。

二、Pi 的 No MCP 是核心边界,不是能力禁令

Pi v0.82.1 的 README 已经写明:核心不内置 MCP,可以为常用能力构建带 README 的 CLI, 也可以通过 Extension 增加 MCP 支持。到 2026-08-12 检查当前 main,这个产品立场仍然存在。 当前文档同时把 MCP Server Integration 列入 Extension 可实现能力。

这意味着"Pi 没有 MCP"需要准确改写为:

text 复制代码
Pi 核心不为所有用户固定一种 MCP 生命周期、发现、权限和 UI 实现;
需要 MCP 的团队可以在 Extension 或 Package 层接入。

它没有否认 MCP 的互操作价值,也没有阻止开发者注册自定义工具。Pi 的设计偏好是把默认能力 保持得很小:少量通用工具可以通过文件系统与 Shell 组合外部程序,领域能力按项目用 Skill、 Prompt、Extension 或 Package 加载。

这种选择的收益是可解释:核心无需承担每种传输、认证、Server 生命周期和工具 UI;不使用 MCP 的用户也不支付相应复杂度。代价同样真实:每个团队可能重复实现连接、命名、超时、重试、 权限、结果裁剪和观察性;CLI 与自定义 Extension 之间也容易形成私有约定,跨客户端复用较弱。

所以 Pi 的选择不是免费午餐,而是把标准化成本从核心移到扩展作者和使用团队。

三、历史上的上下文批评,今天应该怎样更新

早期或朴素的 MCP Host 常把所有已连接 Server 的工具定义一次性发送给模型。工具少时,这很 合理;工具增长到数百个时,完整描述与 JSON Schema 会占用大量上下文,并干扰模型选择。每次 直接工具调用又是一次"模型生成调用---Host 执行---完整结果返回模型"的往返,中间结果可能比 最终结论大几个数量级。

这个批评曾经击中了真实实现,但不能被写成 MCP 永久限制。当前官方 Client Best Practices 已 明确提出两个模式。

第一个是 Progressive Tool Discovery。Host 仍然通过 tools/list 获取能力,却不立即把全部 定义注入模型,而是分成三层:

text 复制代码
Catalog:搜索名字、分类和一句话描述
Inspect:只加载候选工具的完整 Schema
Execute:确认后调用需要的工具

官方文档还建议在工具定义占上下文达到一定比例时切换渐进发现,并考虑关键词、Embedding、 小模型或混合检索。这里的阈值和检索器都属于 Host 策略,不是 Server 自动替你完成。

第二个是 Programmatic Tool Calling,也称 Code Mode。模型不再逐次搬运每个中间结果,而是 生成一段调用工具的程序;程序在 Sandbox 中运行,通过 Host Broker 调用 MCP Server,过滤、 聚合或去重后,只把必要结果返回模型。

它能同时减少工具往返和中间结果占用,却也引入新责任:Sandbox 不能直接持有凭证或开放任意 网络;Broker 必须对每次实际调用继续做授权;跨 Server 的数据流要防止被无意转发;执行时间、 内存和最终输出都要限制。

因此更新后的判断应当是:

text 复制代码
"所有 MCP 工具都必须常驻上下文"已经不是成立的协议结论;
"接入 MCP 后自然得到渐进发现和 Code Mode"同样不成立。

前者忽略了当前 Host 模式,后者把实现责任误记到了协议名下。

四、Token 只是显性成本,真正要算的是五本账

工具接入方案不能只比较 Schema Token。至少要同时核算五类成本。

1. 发现成本

模型怎样知道某个能力存在?CLI 可能依赖命令名、README、--help 与 Skill;MCP 可以从 tools/list 取得结构化目录,但大目录仍需要搜索、排序、命名规范和去重。同义工具、过时工具 和权限不可用工具若都进入候选,发现质量依然会下降。

2. 上下文成本

完整 Schema 是否常驻?说明文档是否重复注入?工具列表动态变化会不会打断 Provider 的 Prompt Cache?当前 MCP 客户端文档特别提醒:会话中增删工具定义可能导致缓存失效,有时损失比节省的 Schema 更多。动态加载需要和缓存边界一起设计。

3. 结果成本

数据库返回一万行、日志查询返回数万条、对象存储列举全部 Key,都不应该原样经过模型。CLI 可以用管道、jq 或脚本本地过滤;MCP 直调可以要求 Server 返回分页或聚合;Code Mode 可以在 Sandbox 处理。关键不是接口形式,而是"中间数据是否必须经过模型"。

4. 治理成本

谁保存 Token?谁决定可调用哪些 Server、Tool 和参数范围?谁处理用户确认、租户隔离和审计? MCP 提供标准化接口和授权基础,不等于业务权限自动正确;CLI 继承本机凭证也不等于权限更简单。 凭证位置、最小权限与逐调用策略都应落在模型之外。

5. 运维成本

Server 如何启动、升级、健康检查、超时、重连和回滚?CLI 版本怎样固定?Extension 与 Server 的协议漂移如何发现?跨团队复用越多,标准化收益越大;只有一个本地脚本时,为它建立完整远程 Server、OAuth 和 Registry 可能反而过重。

这五本账解释了为什么"更少 Token"不能单独决定技术路线。

五、CLI、Skill、Extension 和 MCP 各自解决什么

CLI:适合本地、稳定、可组合的执行能力

CLI 最大的优势是现成。Git、数据库客户端、云 CLI 和内部脚本已经有成熟的参数、退出码与日志, Pi 的 Bash 可以直接组合它们。敏感的大结果还能先在本地过滤,再把摘要交给模型。

它的短板是机器可读契约不统一。帮助文本未必稳定,JSON 输出并非总有,交互式认证、环境变量和 工作目录都会影响行为。只有"命令能运行"还不够,团队仍要规定版本、结构化输出、错误码、超时、 幂等和凭证范围。

Skill:适合按需加载操作知识

Skill 适合告诉模型"什么时候用哪个 CLI、先检查什么、怎样解释失败"。它可以把领域流程按需 加载,而不是让所有说明常驻系统提示词。

但 Skill 是指导层,不是强制执行层。它不能单独提供权限隔离、可靠参数校验、超时或审计。若 动作具有副作用,真正的 Gate 仍应在 Extension、Broker、CLI 或外部系统中。

Extension:适合把环境策略落进 Pi Runtime

Extension 可以注册自定义 Tool、监听调用事件、提供 UI,并把企业内部的授权、日志、结果裁剪 或连接生命周期接入 Pi。它也是在 Pi 中实现 MCP Client/Adapter 的自然位置。

代价是实现与维护责任归团队所有。Extension 执行代码,必须处理版本兼容、异常隔离、资源释放 和供应链风险。本文提出的 Adapter 只是架构设计,没有运行第三方实现,证据状态保持 NOT_RUN_PI_MCP_ADAPTER

MCP:适合跨客户端、跨语言和远程复用

当一个能力要同时服务多个 Agent、IDE 或业务应用,需要结构化发现、统一 Schema、远程连接、 授权或独立发布生命周期时,MCP 的标准化价值会迅速上升。Server 可以独立演进,Host 不必为每个 外部系统重新发明连接协议。

但 MCP 不替业务做选择。工具命名糟糕、Schema 过大、返回结果失控、权限过宽或 Server 不稳定, 仍会伤害 Agent。标准化降低的是接口碎片,不是所有产品与治理复杂度。

六、不要四选一:更实用的是分层组合

实际系统常见的合理组合是:

text 复制代码
Skill
  说明何时需要某类能力与操作边界
     ↓
Extension / Host Broker
  负责目录、检索、授权、凭证、缓存和观察性
     ↓
CLI 或 MCP Client
  执行本地命令,或连接标准化 Server
     ↓
外部系统
  Git、数据库、工单、监控、云平台、知识库

本地 Git 操作可以继续用 CLI;跨团队工单和数据库能力可以走 MCP;高风险写操作统一经过 Extension 的策略层;Skill 只在任务相关时加载操作说明。这样既不要求所有能力迁入 MCP,也不 让每个 CLI 都以裸 Bash 的方式暴露给模型。

对 Pi 而言,一个可控的 MCP Adapter 可以分成五个模块:

text 复制代码
Registry    保存 Server 身份、能力摘要和健康状态
Discovery   搜索工具,只按需加载详情
Policy      根据用户、项目、Tool 和参数判断授权
Broker      持有凭证,执行调用、超时、重试与取消
Result      分页、裁剪、结构校验和敏感信息过滤

模型只面对任务需要的最小接口。Server 的凭证不进入生成代码;Code Mode 的脚本也只能通过 Broker 暴露的函数访问外部系统。工具列表变化先更新 Host 索引,再决定是否以及如何更新模型可见 定义,避免为了"动态"反复破坏缓存。

这套分层是作者建议,不是 Pi 当前内置实现,也不是 MCP 规范强制架构。

七、用六维决策矩阵选接入方式

维度 CLI + Skill Pi Extension MCP 混合路线
能力发现 文档与命令约定,适合少量稳定工具 可自建目录与 UI 标准 tools/list,大目录仍需检索 MCP 供目录,Extension 做按需发现
上下文 Skill 按需加载,但帮助文本需治理 可控制注入与裁剪 取决于 Host,不必全量注入 统一在 Host 控制 Schema 预算
执行与结果 管道和脚本灵活,输出契约不一 可强制校验、超时和结果过滤 结构化调用,Server 质量决定结果 本地 CLI 与远程 MCP 共用 Broker
权限与凭证 常继承本机环境,易过宽 可接项目策略和确认 UI 支持标准授权,但业务权限仍自建 凭证统一由 Host/Broker 持有
跨端复用 较弱,依赖 OS 与安装环境 主要复用在 Pi 生态 强,适合多 Host、远程和多语言 高频共享能力用 MCP,本地能力留 CLI
运维复杂度 低起点,规模增大后约定膨胀 团队维护 Runtime 适配 Server、连接、认证与版本均需运营 按能力价值分层承担复杂度

可以用四个场景快速判断:

  1. 三个以内、本地稳定、已有成熟 CLI:先用 CLI + Skill,补结构化输出和失败合同。
  2. 需要 Pi 内部 UI、审批、状态或结果裁剪:增加 Extension,不必因此改造成 MCP。
  3. 同一能力要跨多个 Agent/IDE 复用或远程托管:优先评估 MCP,并设计渐进发现。
  4. 工具多、结果大、调用链长:无论底层是 CLI 还是 MCP,都需要 Host 级目录、Broker 和受控 执行;必要时再引入 Code Mode。

八、从最小实现逐级升级,而不是一次造完平台

第一阶段,先测量真实问题。记录工具定义占上下文比例、工具选择错误、平均结果大小、调用轮数、 Prompt Cache 命中和 P95 延迟。没有这些基线,不要仅凭文档示意数字宣称节省了多少。

第二阶段,治理已有 CLI。固定版本,优先 JSON 输出,统一超时与错误码,把危险写操作放到窄接口, 由 Skill 说明使用条件。这一步常能解决小规模团队的大部分问题。

第三阶段,在 Pi Extension 中建立最小 Broker。先做 Tool Allowlist、参数校验、凭证隔离、结果上限 和审计,再增加目录检索。只有需要的工具定义进入模型。

第四阶段,把真正需要跨客户端复用的能力封装为 MCP Server。保留本地低成本 CLI,不做为统一而 统一的迁移。用 tools/list 建目录,并对 list_changed、缓存和不可用 Server 制定明确策略。

第五阶段,只有批量中间结果已经成为主要成本时,再评估 Code Mode。运行模型生成代码的 Sandbox 必须无直接凭证、无任意网络,并由 Host Broker 对每个外部调用继续授权。脚本成功不代表所有副作用 可以跳过审计。

每一级都应设置退出条件:如果工具选择、上下文、延迟和运维没有明显改善,就保留较简单方案。

九、最终应该验收什么

一套工具接入架构是否合格,可以不用争论协议偏好,直接检查下面六项:

验收对象 必须回答的问题 最低证据
目录 模型怎样找到能力,过时和无权工具怎样排除 真实目录、检索结果与失败样本
Schema 哪些定义何时进入上下文,是否影响缓存 上下文与 Cache 指标
执行 超时、重试、取消、幂等和部分成功怎样处理 真实调用 Trace 与故障注入
结果 大结果在哪里过滤,敏感字段怎样阻断 字节/Token 上限与泄漏测试
权限 凭证在哪里,谁批准什么范围 身份、Scope、授权与审计记录
运维 Server/CLI 版本漂移和故障怎样恢复 版本锁、健康检查和回滚演练

本文能够确认的是:Pi 固定版本与当前 README 都把 MCP 留在扩展层;MCP 2026-07-28 工具规范 支持结构化发现与调用;当前官方客户端文档已经提出渐进发现和 Programmatic Tool Calling,明确 把 Schema 注入与中间结果处理视为 Host 需要优化的问题。

本文不能确认的是:某个 Pi MCP Extension 已经在目标环境稳定运行,某套工具目录一定节省多少 Token,或 Code Mode 在真实业务权限下已经安全。它们仍是 NOT_RUN_PI_MCP_ADAPTERUNKNOWN_REAL_COST,必须用目标工具集、真实身份和故障场景验证。

Pi 不内置 MCP,不等于 MCP 没有价值;MCP 变得更成熟,也不意味着每个工具都应该改造成 Server。 把争论从协议名称移回目录、上下文、结果、权限、复用和运维,团队才能选到真正便宜、清楚且可控 的接入方式。

参考资料

  1. Pi Coding Agent README,固定 v0.82.1github.com/earendil-wo...
  2. Pi Coding Agent README,当前 main,检查于 2026-08-12:github.com/earendil-wo...
  3. MCP Architecture,版本 2026-07-28modelcontextprotocol.io/docs/2026-0...
  4. MCP Tools Specification,版本 2026-07-28modelcontextprotocol.io/specificati...
  5. MCP Client Best Practices,版本 2026-07-28modelcontextprotocol.io/docs/2026-0...
相关推荐
Dawson Zhu1 小时前
元宇宙对世界模型发展的启发与借鉴意义——以半导体晶圆厂为例
人工智能
樊小肆1 小时前
# 你还在等DeepSeek官方 agent Harness‌? 来试试 DeepSeeker-Code吧
前端·人工智能·后端
樊小肆1 小时前
2568 万 token 才花 2 块 2:聊聊 DeepSeeker-Code 怎么吃满上下文缓存
前端·人工智能·后端
美狐美颜sdk1 小时前
直播APP开发完整流程:需求规划、UI设计、功能开发、美颜SDK接入全解析
大数据·人工智能·音视频·美颜sdk·美颜api
ai产品老杨1 小时前
AI视频分析API项目实战记录
人工智能·音视频
用户469368483201 小时前
kimi-code 深度掌握系列文章-V2 引擎的 HTTP 服务层:kap-server(十六)
agent
服装 AI 增长黑客1 小时前
服装店收银系统选型思考:秦丝进销存的核心价值与适用边界
人工智能
小四的小六1 小时前
端侧模型量化踩坑之后:我重新想清楚了“快、准、小“只能选两个
llm·openai·ai编程
Do1you1believe1light1 小时前
我拆开了 Prime Agent:然后哭着想要给它真正的智能
llm·agent·ai编程