你说不要 MCP

Pi 是一个极简编码代理 harness,它正把早先“不要 MCP”的立场转向内置支持 Model Context Protocol,并加入新的“Codemode”脚本层,引发了关于这是否违背其最初理念的争论。评论者将 MCP 与传统 CLI 和 OpenAPI 风格 API 进行对比,围绕可组合性、安全性、企业治理,以及工具应如何向 LLM 和代理暴露展开讨论。许多人认为 MCP 和 Codemode 是务实的折中方案,符合现代模型的训练方式以及团队的实际运作方式;但也有人担心功能不断膨胀,以及相互重叠标准的泛滥。

MCP 是什么,以及为什么它颇具争议

  • MCP(Model Context Protocol,模型上下文协议)被描述为一种标准化方式,让代理/LLM 发现并调用工具/API,包括认证、文档以及结构化工具元数据。
  • 支持者认为它相当于“API + 文档”或“自文档化 RPC”,使工具更易被发现,也更方便普通用户和“消费级 AI”界面(ChatGPT、Claude 等)。
  • 批评者认为,这些大多可以通过扩展 OpenAPI 或现有 IDL 来实现;有人认为这是一种 NIH,并且与“CLI + skills”或 REST 重复。

Pi 的理念转变:从“不要 MCP”到内置 MCP

  • Pi 最初受到欢迎,是因为它是一个极简、高度可定制、yolo 风格的编码 harness:没有权限模型,没有 MCP,核心极其精简,所有功能都靠扩展。
  • 一些用户欢迎在核心中加入 MCP,因为 MCP 已经在企业和其他 harness 中变得很常见;把如此核心的能力放在扩展里感觉很别扭。
  • 另一些人担心这会开启功能膨胀,并且让产品从“这个 harness 是你的”转向“带有强观点的编码产品”,尤其是在周围还有其他商业产品的情况下。
  • 维护者强调默认不会启用任何新功能;这些功能可以关闭,或者继续作为扩展/分支存在。

Codemode:为什么不直接用 Bash?

  • Codemode 是一个沙箱化的脚本环境(通常是 JS/TS),用于在 harness 层编排工具和 MCP 调用。
  • 支持者:
    • 更少的模型往返、更少的 token、更好的并行化。
    • 可在没有 shell 访问的环境中工作,并启用与操作系统账户不同的权限模型。
    • 让 MCP 工具可以在一个沙箱内组合,而不是每个 MCP 服务器各自为政。
  • 怀疑者:
    • 模型已经非常擅长串联 bash/Python;加入 codemode 让人感觉像是在重新发明轮子并增加复杂性。
    • 对于本地编码代理来说,在沙箱 VM/容器中使用受限 shell 可能更简单、更透明。
    • Codemode 主要是在解决 MCP/harness 设计带来的问题,而不是本质上的限制。

MCP vs CLI/Skills/OpenAPI,以及企业端 vs 本地端

  • “团队/企业”一侧:
    • 基于 HTTP 的 MCP 提供集中式认证、OAuth 流程、遥测、可撤销的 skills/prompts,以及在大量用户之间更容易分发/版本化工具。
    • 有些人使用 MCP prompts/resources 来集中管理 / 风格命令和小型共享状态。
  • “本地/重度用户”一侧:
    • CLI + skills 更容易调试,可通过 bash 组合,并且适用于任何支持 shell 工具的 harness。
    • MCP 会膨胀上下文,在不同客户端中的实现也不一致,而且在文件上传等基础功能上进展较慢。
  • 大家普遍认同 MCP 在改进(无状态 HTTP、更好的工具),但对于它是否在根本上必要,还是只是另一种 API 风格,存在分歧。

子代理、上下文与可组合性

  • 有些人严重依赖子代理和独立会话来管理上下文和成本;另一些人则觉得子代理不透明、对缓存不友好,更偏好长时间的单一会话加自定义压缩。
  • “MCP 不具备可组合性”这一点存在争论:
    • 一种观点认为:codemode 加上 harness 级别的沙箱,在很大程度上解决了多个 MCP 的组合问题。
    • 另一种观点认为:正确的工具设计以及 REST/HATEOAS 可能比当前 MCP 模式提供更好的增量发现和组合能力。

元话题:炒作周期与影响者

  • 若干评论批评早先那波“MCP 已死,CLI 胜出”的浪潮是由影响者驱动的炒作,如今随着 MCP 采用率增长又被反转。
  • 有些人认为 MCP vs CLI 也部分是文化差异:偏向本地 UNIX 的开发者 vs 企业用户和非终端用户。
  • 总体情绪是:MCP 既不是魔法,也不是无用;它是一种权衡,在某些技术栈(尤其是企业/GUI)中比其他场景(带 shell 的本地开发)更合适。