Pi 支持 MCP:CLI 与 MCP 协同构建智能体工具箱
最近圈子里很多人都在讨论同一件事Pi 这个把极客气质写在脸上的 AI 编程智能体怎么就“突然”支持 MCP 了更巧的是同一时间大家还在大量翻车“Codex CLI 找不到 MCP”“MCP 连不上”“CLI 安装又卡住”之类的帖子。两条热点凑在一起自然就有了“MCP 没赢CLI 也没输”这样的话题。先说结论Pi 支持 MCP不是向某个协议“投降”而是一次很务实的生态接轨。MCP 以肉眼可见的速度成了工具互操作的“通用语言”但它并没有就此赢下一切CLI 也并没有因为 MCP 的流行而变得边缘反而是很多编程智能体真正干活的据点仍然在终端。两者更像是一个横截面和一个纵深放在一起才构成完整的“智能体工具箱”。这篇就把我自己的理解、配置过程和一些踩坑实录一起写下来看完你应该能明白为什么“突然支持 MCP”这件事本质上一点都不突然。1. Pi 为什么突然支持 MCP 了1.1 生态压力比想象中来得快很多人第一次听到 MCP 时就一个感觉又一个新协议累了。但如果你把 MCP 理解为“AI 世界的 USB-C”你会发现它解决的是一个早就该解决的痛点每个 AI 工具都想自己定义一套插件规范导致写一次工具到处都要适配。Pi 之前走的是“CLI 原教旨”路线。所有能力都围绕命令行展开可以跑子代理subagent、可以导入 skill还可以通过管道和脚本组合工作流。这种模式很硬核效率也高但暴露了一个问题当用户的同事和合作项目都开始用 MCP 暴露数据服务时Pi 如果不接入就只能停留在“个人利器”层面没法顺畅进入团队和生态。“突然支持 MCP”的背景其实是生态完成了临界积累。OpenAI 系的 CLI 工具内置了 MCP 支持IDE 插件也越来越多地通过 MCP 连接外部系统连设计稿、数据库、文档仓库这些非终端场景都在往 MCP 上靠。Pi 再不做用户的日常协作就断了。1.2 Pi 支持 MCP 的实际方式Pi 的 MCP 支持不是简单“挂一个插件”。它可以同时扮演两个角色作为 MCP ClientPi 读取你的 MCP 配置主动调用外部工具比如查数据库、读设计稿、控制浏览器、操作本地文件。作为 MCP Server把 Pi 的 skill 和能力封装成 MCP 接口让其他支持 MCP 的客户端IDE、桌面端也能调用 Pi 的逻辑。这两个角色意味着 Pi 不是单向接入而是把自己变成了一个双向节点。你可以在终端里用 Pi也可以在 IDE 里通过 MCP 调用 Pi反过来Pi 又能用它自己的编排逻辑去调度外部 MCP 工具。这种方式刚好把“CLI 擅长的深度控制”和“MCP 擅长的广度连接”缝合在了一起。1.3 对普通开发者意味着什么对我这种长期在终端里工作的人来说最直接的影响是以前要用 Pi 查一个 Postgres 数据库我得写一大堆 prompt 让 Pi 去猜表结构或者手动载入线索。现在直接在 MCP 配置里注册一个数据库 MCP ServerPi 就能带着上下文去查而且查完的结果还能继续用于后续代码改动。再比如“Pi Web 导入 skill”这个场景。以前需要手动把 skill 文件放进目录再重启会话。MCP 接入后很多这类导入、配置、状态检查的操作可以走统一接口不用再在配置文件里来回折腾。一句话Pi 支持 MCP是为了让原本已经很趁手的 CLI 智能体不至于在工具互连的浪潮里成为孤岛。2. MCP 没赢赢的是互操作约定2.1 MCP 协议到底解决了什么问题MCP 全称 Model Context Protocol目的是给大模型应用提供一种标准化的“外部工具访问方式”。它把工具的发现、参数描述、调用、返回结果都定义成一套公共格式让任何支持该协议的客户端都能对接任何支持该协议的服务端。用生活化的方式理解以前每个 AI 应用请“外部专家”的方式都不一样有的用 JSON 接口有的用自定义脚本有的靠文件扫描。MCP 相当于给“外部专家”统一发了工作证只要证件格式一致任何一个 AI 应用都能调用。Pi 接入 MCP 最现实的好处是兼容成本骤降。以前一个服务要分别对接 Pi、Codex、IDE 插件现在只要做成标准 MCP Server所有支持 MCP 的客户端都能用。2.2 MCP 没赢的地方在哪里但要说 MCP 已经“赢”了又站不住脚。原因有几个第一标准统一不等于体验统一。MCP 只规定了“怎么传输请求和返回结果”但每个 MCP Server 返回的数据质量、权限边界、是否支持流式输出差异很大。同一个数据库用一个写得好的 MCP Server 和用一个粗糙的 MCP Server效果天差地别。协议层面的统一远未解决实现层面的参差。第二认证与授权模型仍然碎片化。MCP 目前有 OAuth 方案但很多本地工具仍然是简单的 API Key 或裸文件权限。你接一个云服务 MCP可能还要手动去处理 token 刷新。这些工程细节远比协议本身更影响使用体验。第三模型能力没有因为 MCP 而“泛化”。MCP 只是把工具接进来了真正决定调用效果的是智能体本身的编排能力。一个工具能不能被正确使用取决于 prompt、上下文、工具描述的清晰度以及模型对工具调用的理解。把这些能力都归功于 MCP是把“水管”当成了“水厂”。这也是“MCP 没赢”的真正含义协议生态确实在标准化但离“用协议统一一切智能体能力”还很远。它更像是一个基础设施而不是终极胜负手。3. CLI 也没输终端的不可替代性3.1 为什么 CLI 是 coding agent 的主战场很多刚接触 MCP 的人会冒出疑问以后是不是都用 MCP 连接工具就不需要 CLI 了我的实际体验是正相反——CLI 不仅没被削弱反而是目前 coding agent 最能干重活的形态。主要原因有三个CLI 天然嵌入开发者的已有工作流。你已经在终端里操作 git、ssh、docker、编译工具智能体通过 CLI 运行时可以直接复用这套环境不需要额外适配 IDE 或桌面端。CLI 的可组合性强。管道、重定向、后台任务、子进程这些 shell 能力让智能体可以做“连接多个阶段”的复杂操作。MCP 通常是“一问一答”的工具调用而 CLI 能完成连续的、状态行的任务编排。CLI 的透明度和可审计性更好。你在终端里能看到每一步实际执行的命令出了问题可以马上知道是哪一步坏了。相比之下很多 MCP 调用发生在黑盒里调试时反而更费劲。这就是 Pi 这类 coding agent 坚持把 CLI 作为主入口的原因。哪怕支持了 MCP真正顺手的日常操作依然是从终端发起对话用 shell 控制上下文。3.2 CLI 与 MCP 的真实关系如果把 MCP 比作“标准电源插头”那么 CLI 就是“整台开发设备本身”。插头很重要没有它你就接不上各种外部电器但设备能不能运转靠的还是你自己的核心引擎、操作系统、命令行工具链。在 Pi 的实际使用中MCP 负责“连接外部资源”CLI 负责“组织内部执行”。比如我让它做一个“从数据库拉取用户订单 → 找出异常数据 → 生成修复脚本”的任务Pi 会用 MCP 去查数据库然后在 CLI 环境中运行脚本、检查结果最后通过对话传达结论。整个过程里MCP 提供信息CLI 提供执行上下文。还有一个反直觉的点MCP 不仅能和各种图形化客户端配合更能和 CLI 无缝配合。在 Pi 的 CLI 里我可以手动指定加载哪些 MCP 工具让不同项目只暴露对应的工具集。这种控制力度在 IDE 插件里反而不容易做到。4. 实操从零给 Pi 接入 MCP 工具4.1 准备环境先把基础环境捋一遍。我用的是 Pi 的社区版 CLI 工具系统是 macOS。你可以在 Linux、Windows 的 WSL 下按类似流程操作。需要准备的东西Pi CLI 已安装到本地版本最好是最新的因为 MCP 支持依赖较新的配置文件格式。Node.js 或 Python 运行时用来启动那些用这两类语言写的 MCP Server。一个准备暴露给 Pi 的工具比如本地文件目录、PostgreSQL、浏览器控制或者一个能提供 HTTP 接口的自研服务。确认版本的方式很简单在终端里运行pi --version如果版本较旧先更新到最新版本再说。更新完后再确认配置目录已经生成。pi doctor正常情况下它会输出当前配置路径、模型连接状态和本机环境信息。如果这一步都过不了后面的 MCP 配置会处处踩坑。4.2 配置 MCP ServerPi 的配置文件用的是 JSON核心结构是一个 mcpServers 字段。每个 server 有类型、命令、参数和启动环境变量。先看一个最简单的例子把某个本地目录变成文件工具{ mcpServers: { filesystem: { command: npx, args: [ -y, modelcontextprotocol/server-filesystem, ./workspace ], env: {} } } }这段配置的意思是让 Pi 启动一个名为 filesystem 的 MCP 工具底层通过 npx 运行官方文件系统 Server并把 ./workspace 作为可访问目录暴露给模型。再看一个数据库场景用 Postgres 提供的 MCP Server{ mcpServers: { postgres: { command: npx, args: [ -y, modelcontextprotocol/server-postgres ], env: { DATABASE_URI: postgresql://user:passwordlocalhost:5432/mydb } } } }配好之后在 Pi 交互模式中输入 /mcp 就能列出已加载的工具。如果一切正常Pi 会在需要时自动请求调用这些工具。4.3 在 CLI 工作流里体验完整闭环光配置成功还不够要看实际能不能打通。我建议用一个“读取项目文档并生成代码”的任务来验证。流程是这样的Pi 通过文件系统的 MCP 工具列出 workspace 下所有 markdown 文件。Pi 通过文件内容读取接口把技术方案文档读进来。Pi 结合上下文生成对应的代码文件并在 CLI 环境中运行测试命令。如果测试失败Pi 还会再调用文件工具检查日志修正代码。整个过程你只需要在一开始给出一个任务描述pi 读取 folder-archive 目录下的需求说明生成一个符合文档描述的 REST API 骨架并跑通测试这个案例里MCP 负责“看到内容和文件”CLI 负责“执行代码和测试”两者配合得越顺你的开发效率就越高。4.4 把自己的脚本包装成 MCP Server社区里有大量现成的 MCP Server但总有团队内部工具等特定场景需要自己封装。其实一个最简单的 MCP Server 没那么吓人。下面用一个 Python 示例演示假设你有一个脚本能返回服务器磁盘状态你想让它变成 MCP 工具。先安装依赖pip install mcp再写一个最简实现from mcp.server.fastmcp import FastMCP mcp FastMCP(sysinfo) mcp.tool() def disk_usage(path: str /) - str: import shutil usage shutil.disk_usage(path) return ftotal{usage.total} used{usage.used} free{usage.free}保存为 sysinfo_server.py然后在 MCP 配置里改为{ mcpServers: { sysinfo: { command: python, args: [/path/to/sysinfo_server.py] } } }重启 Pi 后再执行 /mcp你会看到 sysinfo 已经成为一个可调用工具。核心就是每个工具就是一个 Python 函数返回一段可读文本。MCP 负责把这段文本传给 PiPi 再把它融入推理。4.5 在 IDE 中通过 MCP 调用 Pi前面说过Pi 也可以反过来作为 MCP Server 提供给 IDE。这个操作在部分编辑器插件中已经有图形化支持但如果你想走纯配置路线还是在 Pi 的配置目录里开启 server 模式然后拿到 endpoint 地址再填到 IDE 的 MCP 配置中。这样一来你在 IDE 里写代码时可以通过 MCP 面板直接调用 Pi 的 agent 能力而不必切到终端。这特别适合“写代码时想让智能体顺手检查一个模块”的场景。5. 常见问题与排查实录MCP 虽然不算复杂但在实际接入时还是有不少坑。我把这段时间遇到的典型问题和排查思路整理成一个速查表方便你对照。问题典型症状排查思路MCP Server 找不到Pi 提示 “server not found” 或列表为空检查 npm 依赖是否安装成功是否用了无效的 npx 包名启动即退出MCP Server 进程一启动就被杀死查看本地日志多半是命令路径或 Python 环境不对权限不足工具报了 “permission denied”检查目标目录读写权限必要时在 env 中配置凭证调用超时Pi 长时间没返回像卡住一样优先排查网络服务本身再看有没有同步阻塞型调用配置不生效改了 MCP 配置后没有任何变化确认是否重启会话有些配置需要重新加载才能生效CLI 安装卡住安装耗时非常久如果走的是公共包管理器源可以切换为内置镜像源或使用预编译二进制MCP 返回格式混乱模型理解不了工具返回内容改进工具描述尽量返回结构化 JSON 或清晰的纯文本几个关键教训每次修改 MCP 配置后建议先重启 Pi 会话再测试。热重载虽然在部分版本里可用但很容易造成工具列表缓存不更新。Npx 第一次启动 MCP Server 时要现场下载依赖看起来像“卡死”其实是正常状态。给点耐心也准备一个可用的 npm 镜像源。不要在 MCP 配置中硬编码过期口令。优先用环境变量注入避免配置文件和仓库混淆。如果你的 MCP Server 是自己写的一定记得在工具描述里写清楚参数含义。模型要靠描述来推断调用参数描述越模糊调用越容易跑偏。还有一招很实用调试 MCP 连接时可以先手动启动同一个命令看它能不能独立运行起来。如果手动都起不来那问题根本不在 Pi而是这个 Server 本身就没写对。6. 最后再分享几个切身感受这段时间把 Pi、MCP、CLI 串在一起用之后我最大的体会是技术选型最忌讳的不是“选错了协议”而是“把协议当信仰”。MCP 确实让工具互联方便了不少但真正决定效率的还是你对工具边界和上下文流向的控制。在 Pi 里我越来越习惯把 MCP 当作“外脑”把 CLI 当作“手脚”。外脑负责找资料、查数据、接服务手脚负责执行命令、跑测试、改代码。缺了哪一边都觉得别扭。还有一点如果团队里有人一开始对 MCP 不熟悉不要逼着大家一股脑全接上。先挑一两个低频但痛点明显的工具比如数据库查询或文档检索做成 MCP Server让大家先感受到“模型终于能自己查资料了”的爽点再逐步扩大范围。工程上的普及往往是从一两个“真香”场景开始的。工具永远是越用越顺手的。今天 Pi 支持了 MCP明天你说不定又会在某个 MCP Server 里把 CLI 命令封装成一个工具。到了那时候输赢已经不重要了顺手的组合就是最好的答案。