一问题引入:MCP 工具调用的"代价比想象中大得多"
想象一下:你是十九世纪的一艘海盗船船长,最近刚抢到一件名为"AI 工具"的宝贝。过去几个月里,你一直让船员(也就是 Claude)通过 MCP(Model Context Protocol) 协议去调用各种外部服务。比如船上挂着 Gmail 的 MCP 接口,Claude 想看邮件时,得先调用一次 search 工具搜出线程,再用 read 工具逐条读,最后用 reply 工具发回复。整个过程看起来很顺畅,但每一步都在让模型"重新学一次该怎么做"。
视频作者一上来就抛出了一个反直觉的设想——如果 Gmail MCP 不是一种"协议",而是一个真实的文件夹呢?Claude 完全可以像读本地代码库里的 markdown 文件一样走进去、读邮件、再走出来。这正是 Mirage 这个项目的核心承诺:把任何外部服务包装成一个虚拟文件系统,让 AI Agent 像操作本地文件一样操作它。
这个设想看似只是把"调用 API"换成了"读文件",但它背后撬动的,是过去两年 LLM Agent 架构中一个被严重低估的系统性税。
当你给 Claude 添加一个新工具时,不管它是 MCP 还是 API,模型都被迫当场学会一个新动作——就像一个婴儿被人拿枪指着头逼他立刻学会走路。每加一个工具,都要重新读 description、规划调用顺序、记住上下文……这是持续不断的 token 开销。
二核心概念:从零讲透 MCP / File System / Mirage 三层关系
要把 Mirage 讲明白,先得把背后三个概念拆清楚。
1. 什么是 MCP(Model Context Protocol)
MCP 是 Anthropic 在 2024 年推出的一个标准协议,让外部服务(Gmail、Notion、Google Drive、Figma 等)以一种统一的方式暴露"工具列表"给大模型。每个工具都需要写一段 description,模型在调用前先读它,再决定要不要用、用哪个、参数怎么填。这套机制的好处是通用,坏处是——通用背后是反复的临时学习。
2. 什么是 File System(文件系统)
文件系统是 Unix 用五十年时间打磨出来的最古老也最稳定的人机接口。ls、cd、cat、cp、grep、find……这些命令在过去半个世纪里被写入的代码数量以百亿行计。每一个现代 LLM 的训练数据里都泡在它们之中。所以模型对"文件系统怎么用"这件事,不是临时学的,而是骨子里会的。
3. 什么是 Mirage(虚拟文件系统)
Mirage 是一个开源项目(视频里说可以从源码直接 clone),它做的事只有一件:把任何支持 API 的外部服务,映射成你操作系统上的一个文件夹。在 macOS 上,它依赖 MacFUSE 这套用户态文件系统框架;在 Linux 上则依赖 FUSE。挂载之后,Gmail 的每一封邮件就是 /mirage/gmail/inbox/xxx.md,Google Drive 的每个文件就是 /mirage/drive/yyy.pdf。Claude 用最熟悉的 Read / Glob / Bash 工具就能直接操作它们,不用学任何新工具。
Unix 把文件系统打磨了五十年,这恰好也是 LLM 在训练数据里见过最多次的抽象层。文件系统之所以是 Agent 跨服务工作的最佳中介,是因为它根本不需要模型再学一次。
三者关系一览
| 层级 | 形态 | 对模型而言 | 由谁提供 |
|---|---|---|---|
| 应用层:Gmail / Notion / Drive | 一个个 MCP server | 每个都要重新学一次 | 各家 SaaS 服务方 |
| 抽象层:Mirage 虚拟文件系统 | 本地挂载的文件夹 | 用现成的 ls / cat 就能搞定 | Mirage 开源项目(MacFUSE / FUSE) |
| 底层:操作系统文件系统 | 真实文件 + 目录树 | 模型已经"精通"的接口 | Unix / Linux / macOS 内核 |
三关键论点:为什么"把 MCP 变文件夹"是范式级变革
视频里反复强调一件事:工具调用 vs 文件系统,本质上不是两种 API 风格,而是两种认知负担的分配方式。前者把"重新学习"的压力交给模型,后者把"统一接口"的稳定性交给底层。下面分五个论点展开。
论点 1:每次 tool call 都是一次"上下文税"
当你给 Claude 接了 5 个 MCP,模型每开一个新对话,都要先读这 5 个 MCP 的全部 description,记住哪个工具负责什么、参数格式是什么、错误码长啥样。这部分是纯开销,不产生任何业务价值。MCP 越多,这笔税越重。视频里提到一种情形:模型同时接了 13 个工具,最终真正用上的只有 3 个,剩下 10 个的 description 一直在污染上下文。
论点 2:文件系统是 LLM 唯一"反复练过"的接口
Unix 文件系统命令在 GitHub 上的代码里出现频次远高于任何新兴协议。LLM 在 pretrain 阶段读过的数十 T token 里,cat README.md 这类操作的 co-occurrence 概率极高。结果就是:当你想让模型"读一份邮件",与其让它先理解 IMAP 协议,再调 MCP 的 read_email 工具,不如直接 cat /mirage/gmail/inbox/foo.md——模型立刻就知道该干什么。
论点 3:附件、文件、二进制内容再也不用"塞回上下文"
原版 Gmail MCP 只能看到附件文件名,无法读取内容——Claude 面对一张发票就像盲人摸象。Mirage 的解法非常朴素:附件在 Drive MCP 上本来就是个文件,挂载到 Mirage 之后,模型可以直接 cat 它。原本需要把附件 base64 塞进上下文的笨办法被彻底跳过。
更有意思的是大文件场景。一个 100MB 的 CSV,如果用传统 MCP 下载,要么超时要么爆 context。Mirage 的做法是不下载,让模型在文件所在位置直接 grep / awk / head——上下文里只回传匹配到的几行,而不是整个文件。这跟之前 Will 在 Anthropic 那场关于 Agent 设计的分享里强调的"用 bash + 代码执行替代自定义工具"是同一思路。
论点 4:JSON 工具调用不再需要"每次重新解析"
传统 MCP 工作流是:模型输出 {"tool": "search", "args": {...}} → 框架解析 → 调用 → 返回字符串 → 模型再读字符串。每一步都在 token 里兜圈子。换成文件系统后,模型直接 grep -r "sponsor" /mirage/gmail/,整个回路都是 shell 原语,模型甚至不用"调用工具",只是在"写代码"。这种从工具调用退化为代码生成的体验,正是视频反复暗示的"Codex CLI / Claude Code 真正强大的原因"。
论点 5:复合工具不再需要写 TypeScript wrapper
视频里专门对比了 Docker 之前演示的"Code Mode"——它允许用 TypeScript 写一个新工具,把多个 MCP 的能力组合起来。但 Mirage 的逻辑更进一步:你不需要写新工具,直接用 bash 把几个 cp / cat / grep 串起来就行。视频里的例子是"在收件箱里找提到 sponsor 的邮件,取出金额最大的三封,把摘要写到 Notion 页面"——这套流程用 bash 一行命令搞定,完全不需要注册一个新 MCP。
Code Mode 解决了"工具组合"问题,但 Mirage 干脆消灭了"工具"这个概念本身——所有跨服务操作都退化成 bash 管道。这就是标题里说的"greatest shift"。
四对比表格:MCP 工具调用模式 vs Mirage 文件系统模式
下面这张表把两种范式在五个维度上做了直接对比,方便快速判断什么时候该用哪种。
| 对比维度 | MCP 工具调用模式 | Mirage 文件/目录模式 |
|---|---|---|
| 上下文开销 | 每个工具都要占一段 description,工具多时上下文很快被污染 | 零额外开销——只用到 LLM 已熟的 ls / cat / cp 原语 |
| 学习成本 | 每个新 MCP 都是一次"现场教学",模型要重新规划调用顺序 | 模型天然会文件操作,跨服务不需额外学习 |
| 灵活性 / 复合操作 | 需要写 TypeScript wrapper 或 Code Mode 才能组合多个工具 | 直接用 bash 管道 + grep/awk 串起来,几乎无限组合 |
| 大文件 / 附件处理 | 要么 base64 塞上下文,要么超时爆 context | 不下载,grep / head 流式处理,只回传命中行 |
| 维护成本 | MCP server 要单独部署、版本管理、OAuth 配置 | 挂载一次即可,认证交给底层 API key,重启进程即可恢复 |
| 生态成熟度 | Anthropic 官方主推,主流 IDE 客户端都支持 | 早期项目,需要 MacFUSE / FUSE,macOS 上还需要授权系统扩展 |
简而言之:MCP 是为多 Agent 共享治理而设计的协议层,Mirage 则是把单 Agent 工作流里的"工具"概念彻底解构。两者并不冲突——可以同时用:跨团队共享的工具走 MCP,跨服务的工作流走 Mirage。
五实操步骤:从 clone 到跑通
视频里演示的安装流程不算短,但作者特意说"不用死记文档,让 Claude 带着你走完"——这是把 Will 在《过度膨胀的 Agent》里强调的"用 bash + 文件系统替代自定义工具"理念反过来又示范了一次。下面是关键节点。
1. 克隆源码
不要读 README,直接 git clone Mirage 仓库,然后在仓库根目录启动 Claude Code,让它自己 cat README.md 并逐步引导你执行。这是 Will 那场 workshop 里反复强调的"先让模型看本地代码再行动"原则。
2. macOS 上装 MacFUSE
Mirage 需要把虚拟文件系统挂载到本地目录。macOS 用户态文件系统依赖 MacFUSE,安装命令大致是 brew install macfuse。安装完成后必须重启 Mac——这是 macOS 出于安全考虑强制要求的。重启后还得到"系统设置 → 隐私与安全性"里手动允许 MacFUSE 的系统扩展加载,整个过程"像在火山口安装一块砖头"。
3. 配置 OAuth 与凭据
每个要挂载的服务(Gmail / Drive / Notion 等)都需要先在 Google Cloud Console 里开 API、生成 OAuth client,再把凭据写到 Mirage 的配置目录。这一步"用户体验像在用外语填税表",但好在 Claude 可以自动打开浏览器走 OAuth 流程,不需要用户手动复制粘贴。
4. 执行 mount 命令
凭据就绪后,跑 mirage mount,系统会新开一个终端窗口,把虚拟文件系统挂到 ~/Mirage/ 之类的位置。视频里建议把这条命令跑成 background process,否则一关终端整个挂载就掉了。但 background 模式每次重启都会丢失缓存和索引——这点后面"持久化"一节会展开。
5. 在 Mirage 目录里启动 Claude
cd ~/Mirage && claude,新会话里的 Claude 看到的目录结构是:
~/Mirage/
├── gmail/
│ ├── inbox/
│ ├── sent/
│ └── drafts/
├── drive/
│ ├── documents/
│ └── spreadsheets/
└── notion/
└── pages/
模型可以直接 ls gmail/inbox/ 看到所有邮件文件名,cat gmail/inbox/xxx.md 读全文。这种体验对模型来说跟操作本地代码库完全一致——没有"工具调用"的概念。
六视频关键观点引用(blockquotes)
工具调用 vs 文件系统,本质上是给 LLM 已有原语 vs 强迫它现场学新工具。前者是站在巨人肩膀上,后者是每次都从零学起。
Mirage 不是一个新工具,它是一个让"工具"这个概念消失的抽象层。当所有外部服务都变成文件夹,bash 就成了万能的胶水。
视频里反复出现的一句话:"It's basically a virtual file system for AI agents." 后面紧跟的论点是——这是过去两年里 Agent 架构第一次真正意义上的"范式切换",而不是又一种新协议。
一个反直觉的结论:把 Gmail MCP 挂成文件夹后,Claude 反而更"懂"邮件了——因为它用的是grep,而grep是它训练数据里出现频率最高的命令之一。
最后作者留了一个开放问题:"Every new AI founder has been doing this for the past 2 years." 意思是——大家都在重复造"Agent + 工具"的轮子,而 Mirage 提醒我们:也许根本不需要那么多新工具,只需要一个老掉牙的文件系统。
七时间戳目录:视频关键节点
下面是按字幕节奏梳理出来的时间戳索引,方便对照原视频定位。
| 时间 | 节点 | 核心内容 |
|---|---|---|
00:00 | 海盗比喻引入 | 用 Gmail MCP 的搜索→读→回复三步流程,类比海盗发现新工具 |
00:48 | 反问:如果 MCP 是文件夹 | 引出 Mirage 的核心承诺——把外部服务挂载成本地目录 |
01:30 | Mirage 是什么 | "Virtual file system for AI agents"——抽象层定义 |
02:00 | 为什么文件系统重要 | LLM 的训练数据里文件命令出现频次远超新协议 |
03:00 | 工具调用的"上下文税" | 每次加 MCP 都要重新读 description、重新规划调用 |
03:50 | Gmail MCP 盲区 | 无法读取附件,只能看到文件名——Mirage 直接读文件解决 |
04:30 | Google Drive 大文件问题 | 100MB 文件 MCP 下载会爆 context,Mirage 用 cp 流式处理 |
05:00 | 安装流程概述 | clone 源码 → 让 Claude 引导 → 配 MacFUSE |
05:45 | MacFUSE 与 macOS 授权 | 系统扩展机制 + 必须重启 Mac |
06:20 | OAuth 凭据配置 | Google Cloud Console → 开 API → 写 credentials.json |
07:00 | 挂载命令与 background process | 挂载后即可在 Mirage 目录里启动 Claude |
07:30 | 与 Code Mode 的对比 | Code Mode 用 TS 包装组合工具,Mirage 用 bash 管道组合 |
08:00 | 自定义服务举例 | 理论上任何 API 都能挂载:Figma、Google Chat、Notion 都可以 |
08:40 | 持久化问题 | 后台进程重启后缓存丢失,需要 demon 进程做持久化 |
09:30 | 总结与 Super Thanks | 再次强调"工具调用 → 文件系统"的范式转变 |
八决策矩阵:什么场景该用 Mirage
并非所有 Agent 场景都适合 Mirage。下面这张表帮你判断什么时候该切到虚拟文件系统,什么时候老老实实用 MCP。
| 场景 | 推荐方案 | 理由 |
|---|---|---|
| 单 Agent 处理跨多个 SaaS 的工作流 | Mirage | 避免每个服务都注册一个 MCP,bash 管道就够了 |
| 需要读附件、PDF、大文件 | Mirage | 流式 grep/awk 不污染 context |
| 多个 Agent / 团队共享同一套治理工具 | MCP | MCP 的核心价值是治理与共享,不是性能 |
| 需要细粒度权限控制和审计日志 | MCP | 成熟的权限模型 + 集中管控 |
| 极简 demo / 一次性脚本 | Mirage | 克隆即用,不需要部署 MCP server |
| 需要 TypeScript 强类型工具契约 | Code Mode | TS 包装比 bash 更适合大型项目 |
九与同站其他视频的关联
Mirage 的"文件即接口"思路其实在好几期往期视频里都出现过。下面列出与本片最相关的三段课程,方便延伸阅读。
- mWvtOHlZM-I:Anthropic Will 那场 workshop 的核心结论是"用 bash + 文件系统 + 代码执行替代自定义工具"——Mirage 等于把这个结论从"代码库"扩展到了"整个 SaaS 世界"。
- gv0WHhKelSE:Docker 的 Code Mode 演示了用 TypeScript 包装 MCP 组合工具的能力——Mirage 是 Code Mode 思路的"更激进版本",连包装都省了。
- HNzH5Us1Rvg:另一期讲 Codex CLI 改造的实战——视频里展示的"用文件系统原语代替专用工具"在本期 Mirage 上得到了完整的工程化落地。
如果你只看一期,那就先看 Will 那场 workshop;如果你想看 Mirage 这条思路的实战形态,本期就是答案。
十附:核心术语速查
| 术语 | 一句话解释 |
|---|---|
| MCP | Model Context Protocol,让外部服务以统一协议暴露工具给 LLM |
| Mirage | 开源虚拟文件系统,把任意 API 服务挂载成本地目录 |
| MacFUSE | macOS 用户态文件系统框架,Mirage 在 mac 上的底层依赖 |
| 上下文税 | 每个 MCP 工具的 description 持续占用 token 而不产生业务价值 |
| Code Mode | 用 TypeScript 组合多个 MCP 工具的能力,Docker 之前的演示 |
| virtual file system | 由 Mirage 实现的"看起来像文件其实是 API"的抽象层 |
| background process | 挂载 Mirage 时推荐的运行方式,避免占着终端 |
| persistent demon | Mirage 用来解决"后台重启缓存丢失"的常驻进程方案 |