最近圈子里的风向又到了“协议”话题上。Pi 突然把 MCP 支持写进更新说明之后,我周围不少人的第一反应是:“MCP 这不是要来抢 CLI 的饭碗?”尤其是当你翻到 Codex CLI、Trae CLI、OpenSpec CLI 这些终端里的 coding agent 都在往 MCP 上靠,确实很容易把它理解成一次技术路线之争。
但我的结论很明确:MCP 没赢,CLI 也没输。它俩压根不是替代关系,而是“驾驶舱”和“外设”的关系。MCP 给 agent 装上了更多可调用的工具,CLI 依然是那个承载会话、交互和控制的驾驶舱。Pi 接入 MCP,不是说命令行要退场了,恰恰相反,没有 CLI 这个稳定的入口,MCP 的工具能力很难落到日常开发里。
这篇文章我不打算讲太多空对空的概念,就结合最近的热搜词和实际使用场景,把 MCP 和 CLI 的分工、Pi 为什么选在这个节点支持 MCP、以及你怎么把它配好、踩坑后怎么排查,一次性说透。
1. 先聊聊“突然”背后的生态背景
1.1 MCP 从不温不火到成为“通用插槽”
MCP 全称 Model Context Protocol,是 Anthropic 在 2024 年底对外开源的模型上下文协议。它的核心思路很朴素:给 AI agent 定义一套统一的标准,让外部工具、数据源、接口都可以通过同一个协议接入,agent 通过“列出工具 + 调用工具”的方式使用这些能力。
刚开始关注 MCP 的人可能不多,那时候大家更关心的是 agent 能不能跑通一个完整任务,根本没精力琢磨协议。但到了 2025 年前后,情况完全不同了。大量 coding agent 涌现,Codex CLI、Trae CLI、OpenSpec CLI、Minimax CLI,再加上各种把调试器、设计稿、数据库、股票行情接进 agent 的玩法,生态开始变得碎片化。
碎片化是最要命的问题。每个 agent 都搞一套插件规范,开发者就得为一个能力写好几遍适配代码。这时候 MCP 的“统一插槽”价值就体现出来了:Figma 出一个 MCP server,所有支持 MCP 的 agent 都能直接用;PostgreSQL 出一个 MCP server,前端 agent 和后端 agent 看到的都是同一份工具定义。
你可以把 MCP 理解成充电接口的统一标准。以前是每个品牌一个充电口,现在大家约定用同一个口,谁的设备都能插。Pi 在这个时间点接入 MCP,最直接的原因就是:MCP 已经不再是小圈子自嗨,而是成了行业默认的工具接入层。
1.2 为什么 Pi 要跟进,而不是自己另搞一套
有人问,Pi 为什么不继续用自家插件,非要接 MCP?答案很简单:自建生态的成本太高,复用生态的成本太低。
做 agent 的人都明白,工具生态决定了 agent 的上限。你单独拉一套插件规范,就算 API 设计得再漂亮,也得有人愿意给你写插件。而 MCP 现成的生态摆在那里,从数据库、文件系统、浏览器自动化、设计稿读取,到反向调试器、金融行情终端,各种场景的服务器都已经有人在维护。Pi 只要实现 MCP 客户端,立刻就能“借用”整个生态。
这就像你做了一台新手机,与其从零开发所有 App,不如直接用已成型的应用商店标准,把自己的系统连上去。用户迁移成本低,伙伴接入成本也低,这才是 Pi 跟进 MCP 最核心的商业与技术考量。
所以,“突然”只是外部观感。从生态节奏看,MCP 已经积累了一年多的社区力量,Pi 现在支持 MCP 更像是补上短板,而不是战略突发。
2. 拆开看:MCP 和 CLI 到底是什么关系
2.1 MCP 做“外设”,CLI 做“驾驶舱”
很多人看到 Pi 支持 MCP 就担心 CLI 会失宠,这种焦虑其实是把层级搞混了。
CLI 是用户和 agent 之间的交互入口,承载的是会话、上下文、权限确认和命令管理。MCP 则是 agent 和外部工具之间的接入层,承载的是“我能调用哪些工具、怎么把结果回传给模型”。两者一个管人机交互,一个管机具交互,根本不在同一个层级。
我用一个有点直白的比喻:CLI 是驾驶舱,MCP 是外接设备。你坐在驾驶舱里,通过油门、刹车、仪表盘来控制车,这是 CLI。而 MCP 相当于你加装了行车记录仪、倒车雷达、胎压监测,这些设备通过统一接口接入你的车机系统。行车记录仪不会取代驾驶舱,它只会让驾驶舱里的你获得更多信息、更多操作能力。
放到实际开发里,你依然在终端里敲pi启动会话,依然用/compact压缩上下文,依然看到 agent 在逐步执行任务。MCP 只是让 agent 在需要时多了一个读数据库、操作文件、查调试器的“手”。
2.2 会话管理还是 CLI 的主场
再往细看,CLI 手里捏着几个 MCP 很难替代的硬功能:会话持久化、上下文的压缩与恢复、模型切换、交互确认。
比如有些人搜索“codex cli 命令哪些 /compact /model /resume”,问的就是 CLI 的会话管理能力。/compact负责把冗长上下文压缩成摘要,/model切换不同规格的模型,/resume从历史会话里恢复现场。这些操作都和“对话状态”强绑定,它们是 CLI 一直在做的事,MCP 协议压根没有染指。
还有一个关键点:权限确认。许多危险操作,比如执行 git 提交、删除文件、修改生产库,agent 在 CLI 里会发起确认,你在终端里按 y 或者 n。这种“人在回路”的交互,是 CLI 作为主入口的核心价值。MCP 服务器提供的能力越强,越需要一个可靠的 CLI 控制台来兜底权限边界。
所以说,MCP 并没有赢,因为它从一开始就没准备取代 CLI;CLI 也没输,因为它依然握着 agent 使用过程中最重要的控制权。真正的变化是:CLI 的职责变得更聚焦,它不再只是“打字交互界面”,而是成了对多工具、多上下文、多子代理进行统一调度的中央控制台。
3. 把 Pi 接上 MCP:一个完整配置实操
3.1 项目级和用户级配置怎么选
先提醒一句,我这里说的配置结构和路径,适用于大多数主流 agent CLI。不同工具会有差异,但思路完全一致。
MCP 配置通常分两个层级:用户级配置和项目级配置。用户级配置写在你的用户目录配置里,任何项目启动 agent 都会加载,适合放通用能力,比如文件系统、记忆服务、通用文档查询。项目级配置写在项目目录下,通常叫.mcp.json或者放在.agent/config.json里,适合放和当前项目强相关的工具,比如某个专有数据库、某个设计系统的接口、某个内部服务的 SDK。
我自己的习惯是:通用工具放用户级,业务工具放项目级。原因很简单,项目级配置跟代码一起进仓库,同事 clone 下来就能用,不会漏配置。但这也带来一个安全隐患,后面排障部分我会细说。
一个典型的 MCP server 定义大概是这样的结构:
{ "mcpServers": { "filesystem": { "command": "npx", "args": [ "-y", "@modelcontextprotocol/server-filesystem", "/Users/me/projects/demo" ] } } }你只需要搞清楚三件事:command 用什么启动、args 传什么参数、环境变量需要哪些。绝大多数 MCP server 都是这种 stdio 模式,agent 启动时会拉起子进程,通过标准输入输出和它通信。配置完成后的效果,就是你让 agent “看一下项目里的 README 并整理出技术栈”,它会在工具列表里挑 filesystem 的相关工具,而不是靠猜。
3.2 接 PostgreSQL 与本地文件:两个典型示例
数据库是 coding agent 最常需要的外设。你不想让 agent 只能看代码,还想让它能直接查表结构、跑一条验证 SQL,那就接一个数据库 MCP server。
以 PostgreSQL 为例,配置里需要提供连接串。这里特别强调:连接串里通常带密码,不要硬编码进项目级配置并提交到公开仓库。正确做法是用环境变量占位,很多 MCP 客户端支持在配置里声明 env 字段:
{ "mcpServers": { "postgres": { "command": "npx", "args": [ "-y", "@modelcontextprotocol/server-postgres", "postgresql://${DB_USER}:${DB_PASS}@localhost:5432/mydb" ] } } }有些实现支持字符串替换,有些不支持,更稳妥的做法是让 MCP server 进程自己读取环境变量,你传一个不带敏感信息的参数。总之,尽量别把生产库的明文密码放进 json。
本地文件系统 MCP 也常用。它解决了 agent 只能读当前工作目录的问题。你给它一个目录白名单,它就能读取、搜索、修改白名单内的文件。参数里写清楚路径,agent 才能知道你能接受的范围。
我实际用下来,文件系统 MCP 特别适合做跨仓库分析。你同时开着多个项目,让 agent 统一读一遍,它可以快速找出相关的接口定义和调用链。以前这活儿要么你手动开多个终端,要么靠 paste 代码,现在 MCP 把这一步自动化了。
3.3 接 Figma 这类第三方服务的授权细节
很多开发者会搜“codex 接入 figma mcp 怎么授权”,这是接入第三方 MCP 时最常遇到的问题。MCP 本身不负责账号体系,它只管“把工具暴露给 agent”,具体鉴权动作要你在第三方平台侧完成。
Figma MCP 是标准流程:先在 Figma 账号的开发者设置里生成 personal access token,然后把这个 token 通过环境变量传给 MCP server。常见的环境变量名是 FIGMA_API_KEY 或者 FIGMA_ACCESS_TOKEN,具体以 server 的文档为准。配置看起来像这样:
{ "mcpServers": { "figma": { "command": "npx", "args": ["-y", "figma-developer-mcp-server"], "env": { "FIGMA_API_KEY": "${FIGMA_TOKEN}" } } } }这里有个很隐蔽的坑:如果你在终端里直接export FIGMA_TOKEN=xxx,agent CLI 启动时可能会继承这个环境变量,这是没问题的。但如果 agent CLI 本身不把环境变量透传给 MCP server 子进程,那 token 就传不过去。遇到这种情形,你需要把 env 写进配置,或者在启动命令前手动 source 一下环境变量文件。
至于“同花顺 MCP”“x64dbg MCP”“IDA MCP”这些,授权逻辑也类似。行情终端需要你的账号 token 或者 cookie,调试器需要你打开远程调试端口或允许插件启动。MCP 只是把能力暴露出来,你有没有权限访问目标资源,协议管不着。用之前先确认授权链路能不能走通,比配 MCP 本身更花时间。
4. 上线后我踩过的坑:CLI 环境下的 MCP 排障实录
4.1 MCP server 起不来,先查这三样
我见过太多人配置写得很完整,但 agent 就是报工具不可用。这时候别急着怪 MCP 协议,按顺序查三样东西,90% 的问题都能定位。
第一查 command 能不能在 PATH 里找到。很多人喜欢用 npx 直接启动 server,但 node 环境没装好、npx 版本不对、镜像源超时,都会导致子进程起不来。你先在终端里手敲一遍同样的命令,确认能正常跑起来再回 agent 里试。
第二查参数顺序。MCP server 对参数顺序很敏感,尤其是连接串、目录路径这些,贴错位置会直接报错。仔细对照 server 官方文档里的示例,不要自己脑补顺序。
第三查 stdio 通信是否被破坏。MCP server 子进程通过标准输入输出和 agent 通信,如果 server 启动时打印了不必要的日志到 stdout,会把协议包搅乱。凡是“启动后看起来正常但 agent 就是感知不到工具”的毛病,八成是 stdout 污染。解决办法是看 server 有没有日志文件,让它把日志写到文件而不是终端。
4.2 授权、镜像源和超时问题
剩下的 10% 里,最常见的是授权问题和超时问题。
授权问题的表现通常是:agent 调用了 MCP 工具,但工具返回权限错误或者空数据。这时候别盯着 agent 日志看,直接检查你对目标服务的权限。比如 Figma 的 token 有没有过期、PostgreSQL 连接串里的账号有没有只读权限、同花顺账号是不是没有开通对应的数据接口权限。MCP 不会帮你绕过权限,它只是把工具递到你手里。
超时问题集中在 npx 首次下载上。Node 生态在国内环境下,下载包经常慢到让人崩溃。搜“node安装codex cli很慢”的人不少,其实不只是 Codex,所有依赖 npx 的 MCP server 都会受影响。我建议先把常用 npx 包预下载好,或者把 npm 镜像切成国内可用源,让npx -y 包名能在几秒内启动。否则 agent 启动 MCP 客户端时,server 一直没就绪,工具列表就会加载失败。
还有一种偏门情况:agent 进程缓存了工具列表。你新加了 MCP server,但 agent 没有重新扫描,看起来就是“找不到 MCP”。处理方式很粗暴:重启会话。有些 CLI 支持热重载,有些不支持,重启永远是最稳的办法。
4.3 边界问题:什么时候该用 MCP,什么时候该用 CLI 原生命令
工具多了以后,人会容易犯一个毛病:什么活儿都想让 MCP 干。我个人的经验是,要明确边界。
MCP 适合干那些“agent 需要感知外部状态”的事。查数据库、读取设计稿、操作调试器、搜索本地文件、访问内部服务,这些信息不进模型上下文,agent 就没法做准确判断,MCP 是补这个缺的。
CLI 原生命令适合干那些“本来就属于终端控制”的事。切换模型、压缩上下文、恢复会话、管理子代理、看任务执行记录,这些用 CLI 自带能力更顺手。你非要把这些塞给 MCP,反而是画蛇添足,增加协议开销和故障点。
正确姿势是两条线并行:CLI 管会话,MCP 管工具。agent 在 CLI 框架下跑流程,遇到需要外部数据的时候,调用 MCP 去取;取完继续在 CLI 里跟你交互。这样才能把两者的优势都发挥出来。
我把几个高频问题整理成速查表,大家可以先收藏:
| 现象 | 可能原因 | 处理办法 |
|---|---|---|
| MCP server 启动失败 | npx 包未下载、PATH 未配置 | 终端手动执行同一条命令验证 |
| agent 找不到 MCP 工具 | 配置文件路径错误、缓存未刷新 | 检查配置位置,重启会话 |
| 工具能调用但返回空数据 | 授权 token 无效、数据源权限不足 | 检查账号权限与接口开通状态 |
| 配置了连接串但报密码错误 | env 未透传给子进程 | 把环境变量写进 MCP 配置的 env 字段 |
| CLI 安装/下载特别慢 | Node 镜像源慢 | 切换镜像源、预下载依赖包 |
| 启动后协议乱码 | 子进程 stdout 被打日志污染 | 关闭 stdout 日志,改用文件日志 |
5. 我用下来的真实体会
MCP 这个概念最近半年热度一直没降,从“mcp 基础知识”到“mcp resource 实战”,再到“mcp 逆向”这些偏门方向都有人研究,说明大家已经不满足于看热闹,而是想真的拿它干活。
我实际把 Pi、Codex CLI 这类工具接上 MCP 之后,最大的感受是:工作流绕的弯路少了很多。以前让 agent 分析一个多模块项目,我得先把关键文件路径喂给它,再手动贴数据库结构。现在配置好文件系统和数据库 MCP,agent 自己就能找到该看的东西,直接给出带依据的判断。那种“模型一本正经地胡说八道”的情况明显少了,因为工具调用返回的真实数据把幻觉空间压缩了。
但也要清醒一点。MCP 不是银弹,它不会让 agent 突然变聪明,只是让 agent 有了更多靠谱的信息源。工具接得越多,权限风险也越大。MCP server 能操作文件、执行命令、访问数据库时,一旦配置被坏actor利用,后果比单纯聊天严重得多。所以我在每个项目里只开最小必要集,用完了能关就关,别一股脑全挂上。
至于 CLI,它反而因为 MCP 的兴起变得更重要了。你想控制哪些工具可用、确认哪些危险操作、切换不同模型组合来跑同一批工具,都离不开真正的终端界面。Pi 支持 MCP,不是承认 CLI 不行,而是承认“一个有外设加持的 CLI agent”才是现阶段最顺手的开发形态。
下次你再看到谁家 agent 宣布支持 MCP,不用惊讶。试试把你想接的工具塞进配置,跑起来再决定要不要长期用。工具是加出来的,能力是用出来的,这句话我用了大半年,依然觉得靠谱。