00:00:00在过去的两个月里,AI 社区已经意识到 MCP 协议存在一个巨大的问题。
00:00:04正因如此,社区其实已经提出了一些解决方案。
00:00:08但所有的这些方案都存在巨大的缺陷。
00:00:10不久前我们做过一期关于 Docker 解决方案的视频,
00:00:12直到目前为止,我们仍认为那是解决 MCP 问题最好的方案。
00:00:16Docker 发布了“代码模式”,允许智能体编写 JavaScript 代码来直接调用 MCP 工具。
00:00:21这解决了 MCP 工具占用大量上下文的问题,
00:00:24以往需要将工具及其描述全部暴露在上下文窗口中。
00:00:27所以如果你使用了大量的 MCP,你的上下文窗口就会被大量
00:00:32不必要的工具信息填满,而其中大部分在多数时间里根本用不到。
00:00:36但使用 Docker MCP 网关,你会被限制在 Docker 配置好的 MCP 中,
00:00:41且在本地和远程 MCP 的使用上也存在限制。
00:00:43此外,你也无法将这些自定义工具保存为函数。
00:00:47这一切的转机源于 Cloudflare 发现了这个问题并提出了一个方案,
00:00:51建议让这些工具以可执行代码的形式存在,而不是塞进上下文窗口。
00:00:56作为该协议的原始设计者,Anthropic 承认了其产品中的这一短板,
00:01:00随后发布了一篇论文,专门强调了这正是目前存在的问题。
00:01:04此后,人们开始认真对待这个问题,并开始探索各种解决方案。
00:01:09但他们那种将每个工具都转换成 TypeScript 文件的方案也存在不足。
00:01:13当连接了大量 MCP 时,你必须逐个将它们转换为代码,
00:01:18而且你还得花大量时间来确保转换过程中没有出错。
00:01:22不过既然这已成为公认的问题,
00:01:24人们仍在努力推出更好的解决方案。
00:01:26就在这时,我们发现了一个名为 MCP to CLI 的新工具。
00:01:30MCP to CLI 通过将所有 MCP 服务器
00:01:36转换为可通过 Bash 命令运行的 CLI 工具,解决了上下文膨胀的问题。
00:01:40现在,我们团队主要使用 Claude Code,它其实有一个 CLI 标志位旨在
00:01:45解决部分问题。该工具通过不在上下文窗口中预先暴露所有工具,
00:01:50初步解决了 MCP 上下文膨胀的问题。它允许 Claude Code 根据需要动态加载
00:01:55每个工具。但这仍然没有解决 Claude Code 的另一个问题。正如你所知,
00:02:00MCP 会将输出直接返回到上下文窗口。万一
00:02:05MCP 工具返回了巨大的输出,它依然会留在上下文窗口中,
00:02:10导致不必要的上下文膨胀。现在,你可能也听说过其他开源工具,
00:02:15比如针对同一问题的 CLI Hub,但它们效率不高,因为它们是在构建时转换,
00:02:20而不是在运行时转换。那么,“运行时转换”到底是什么意思呢?
00:02:25这意味着工具只有在被实际调用时才会被转换为 Bash 命令。这听起来可能没什么,
00:02:29但如果原始 MCP 本身更新了会怎样?因为
00:02:34这个工具是在运行时构建 MCP 工具的,实际 MCP 的任何更改都会自动反映在转换后的工具中。
00:02:39如果我们是在构建时构建工具,这是不可能实现的。
00:02:43在那这种情况下,我们每次都必须手动获取并更新工具。但你可能会想,
00:02:48每次调用都要重新转换同一个工具,会不会让重复调用变得很慢?
00:02:53这就是他们内置在工具中的缓存机制发挥作用的地方。它会将所有 MCP 工具
00:02:58保存在缓存中,默认生存时间为一小时。因此,所有常用的 MCP 工具
00:03:03都会直接进入缓存并保存一小时。智能体可以从中快速检索工具,
00:03:08而无需牺牲运行时的灵活性。此外,该工具直接构建在 MCP Python
00:03:13SDK 之上,也就是每个 MCP 服务器底层所使用的那个。所以,对于所有的 MCP 工具调用,
00:03:19它只是将其作为 Bash 命令执行,并且仅在需要时才将响应注入到智能体的
00:03:24上下文窗口中。它还通过同样的 CLI 接口处理 OpenAPI 和 REST API,
00:03:30这意味着任何还没有 MCP 服务器的现有 API 仍然可以以完全相同的方式使用。
00:03:35如果没有这个工具,你连接 MCP 的类型将会受到限制。
00:03:39其他类似的解决方案通常无法让你在一个地方灵活地处理所有类型的 MCP。
00:03:44为了证明其在 Token 效率方面的优势,他们使用 Tiktoken(一个用于计算 Token 的 Python 库)
00:03:49运行了一个自动化测试套件。测试结果显示,该工具成本更低,
00:03:54且执行速度更快。所以你不必只听我们的一面之词,
00:03:59它确实有数据支持。你可以使用 pip 在系统中安装它,也可以
00:04:03直接运行而不安装。我们选择不安装直接运行,因为这样可以保持工作环境整洁。
00:04:07他们还提供了一个“技能”(skill),可以帮助智能体更好地配合该工具工作。它规划了
00:04:13核心工作流,并提供了处理身份验证和缓存等任务的 Bash 命令示例,
00:04:18而这些是你的智能体原本不具备的上下文。但在继续之前,让我们先听听
00:04:22我们的赞助商 Orchids 的介绍。大多数 AI 构建工具能很好地处理简单的原型,
00:04:27但在面对复杂的逻辑或多文件结构时就会捉襟见肘。这就是 Orchids 的用武之地。
00:04:32它是第一个可以直接从你的环境中在任何技术栈上构建并部署任何应用的 AI 智能体。
00:04:36你可以使用自己的订阅来以成本价运行模型,无论是你现有的 ChatGPT、Claude 还是 Gemini 账号,
00:04:41甚至是 GitHub Copilot。它专为处理任何堆栈上的任何应用而设计,不仅限于 Web。
00:04:47你可以构建和部署从移动应用、Chrome 扩展到复杂的 AI 智能体
00:04:52和 Slack 机器人的一切。看看这些案例:一个能够管理复杂硬件级逻辑的
00:04:57全功能 OpenClaw 设置;一个能够实时处理海量直播数据馈送的
00:05:02多功能彭博终端;以及像这个直接利用设备相机
00:05:07实时画面来识别建筑的原生移动应用。点击置顶评论中的链接开始构建吧。此外,使用代码“March 15”
00:05:12即可享受订阅计划 85 折优惠。像大家一样,我们也想变富有。而一种方法就是发现
00:05:17市场空白。于是我们想到了这个绝妙的主意:给马儿用的 Grinder(社交软件)。开个玩笑,
00:05:22构建大型产品需要大量的 MCP 工具,因为它们有很多依赖项,
00:05:27而且会迅速撑爆上下文窗口。我们使用 MCP to CLI 将智能体连接到 Supabase MCP,
00:05:34因为那是我们使用的后端基础设施。现在你不需要
00:05:38手动配置任何东西,因为我们之前安装了那个“技能”。那个技能会自动处理一切,
00:05:43并为你配置好 MCP。但在急着安装之前,你需要获取
00:05:47你正在使用的任何 MCP 的访问令牌(Access Token)。因为如果你不这样做,
00:05:52就会像我们一样报错,之后我们生成了访问令牌并交给 Claude 添加进去。
00:05:57配置正确后,你应该能看到可用的工具。现在你可能会想,
00:06:01如果这个工具作为 Bash 命令运行,在列出进程时,API 密钥和
00:06:06访问令牌等敏感数据可能会暴露,这不安全。但这个工具增加了一个
00:06:11保护层。它不会将敏感数据放在命令行参数中。相反,它通过
00:06:15环境变量来处理,或者引用保存访问令牌的文件路径,
00:06:21亦或是使用在运行时注入这些数据的密钥管理器。所以运行起来很安全。类似于
00:06:26Supabase 的连接,我们还连接了用于版本控制的 GitHub MCP,用于浏览器测试的
00:06:32Puppeteer MCP,以及用于为智能体提供最新文档支持的 Context 7 MCP。
00:06:37当所有的 MCP 都连接好后,我们让 Claude 验证了一下。
00:06:42它确认我们已经连接了全部四个 MCP,在我们的案例中总共有 78 个工具。另外,如果你
00:06:47喜欢我们的内容,请考虑点击“Hype”按钮,这能帮助我们创作更多内容
00:06:52并接触到更多观众。现在我们真正连接好了,是时候开始
00:06:57逐步实现应用了。我们首先将客户端代码连接到 Supabase
00:07:02后端。当 Claude 运行 MCP to CLI 命令来创建项目时,我们注意到它并没有
00:07:07直接在工具调用中放入访问令牌。相反,它引用了项目级别下
00:07:12.env.local 文件里的令牌。它创建了项目,设置好了一切,并添加了代码中的
00:07:17连接逻辑。但我们发现它在会话刷新逻辑中使用了 middleware 文件,
00:07:22而它不应该用那个,因为那个已经弃用了。新版本的 Next.js 使用
00:07:27代理,我们知道在实际运行应用时这会报错。这恰恰说明了,
00:07:31仅仅连接工具是不够的,还需要让智能体听从工具,并在需要时
00:07:36正确使用它们。所以我们创建了一个 claude.md 文件,告诉它在编写任何代码之前
00:07:42先使用 Context 7 MCP。这样这种错误就不会再发生了。如此一来,它就知道在实现之前
00:07:47应该参考 Context 7 MCP。在它完成添加数据表和设置 Supabase 身份验证后,
00:07:52我们向 Claude 指出了弃用的中间件警告,以便它可以修正。在按照我们的要求操作后,
00:07:57它终于使用了 Context 7 MCP 来提取文档并妥善解决了这个问题。
00:08:03但在进一步探索这个工具时,我们发现还有一种比创建 claude.md 文件
00:08:07更好的处理方法。“技能”更好用,因为它们的
00:08:11描述是直接加载到智能体上下文中的。因此,它已经知道有哪些工具
00:08:16可用以及何时使用它们,而不是像我们那样只是把指令塞进 claude.md 并寄希望于
00:08:21它能读到。所以,我们让它为所有已连接的 MCP 创建技能。随后 Claude
00:08:26为每个 MCP 都创建了技能。每个技能都详细说明了包含哪些工具、如何使用以及何时使用。
00:08:32搞定之后,我们进入下一个问题。但我们当时做的东西离“功能完备”还差得远。
00:08:36马儿们的反馈告诉我们,它们已经等得不耐烦了,因为它们无法在平台上
00:08:41直接聊天。于是我们让 Claude 在 UI 之上实现聊天功能。
00:08:46当我们自己测试时,消息无法加载,只显示一个加载屏幕。于是我们
00:08:51要求它使用 Puppeteer MCP 来测试消息流。我们让它自我检查,因为
00:08:56一个能够点击、滚动并与其自身 UI 交互的智能体,能发现静态代码审计
00:09:01永远发现不了的问题。为了测试,它创建了两个用户。但它无法跨工具调用
00:09:06保持会话数据,因为每次调用都会启动一个新的浏览器实例。它使用的工具数量
00:09:10以及在无头浏览器中工作所耗费的时间让我们意识到一件事:更好的选择是
00:09:15直接让 MCP 处理。这比我们在这种简单任务上浪费的 7 分钟要快得多,也省时得多。
00:09:21我们更倾向于使用 Claude 自家的浏览器扩展,它的功能更强大,
00:09:25并且在进行此类端到端测试时能更好地保持会话。而且
00:09:30MCP 作为持久进程运行,这就是它们能跨整个会话保持状态的原因。
00:09:35这个工具还提供了对输出格式的控制,比如 JSON 和原始输出。它还
00:09:40支持 TOON,这是一种专为 LLM 消费设计的 Token 高效编码格式。当我们使用像
00:09:46Context 7 这样的 MCP 时,它们通常会将巨大的输出直接返回到上下文窗口。
00:09:51为了防止这种情况,我们在 claude.md 文件中添加了一条指令:每当它使用 Context 7 MCP 时,
00:09:57都应该使用 TOON 格式进行输出。这是一种高效的格式,因为它结合了缩进和 CSV
00:10:02样式的列表,与 JSON 和 YAML 相比,能将大量信息压缩成更小的块。这样一来,
00:10:07你就不会浪费任何不必要的 Token。但最大的突破来自于一个
00:10:12以前智能体原生处理 MCP 时根本不可能实现的功能。如果你还记得的话,
00:10:16Cursor 在其产品中发布了一个上下文编辑工作流。他们将 MCP 结果视为文件,
00:10:22并允许智能体使用像 grep 这样的 Bash 脚本进行模式匹配来提取数据。我们在之前的视频中
00:10:27提到过这一点。我们尝试在其他编码智能体中实现这个想法,但由于 MCP 是由智能体
00:10:32原生处理的,我们无法从中获益太多。但现在有了这个 CLI,这变成了可能,因为
00:10:37MCP 被视为 Bash 命令行工具。因此,我们在 claude.md 文件中添加了一条指令:每当
00:10:43任何 MCP 工具产生大量输出时,不要将其加载到上下文窗口,而是
00:10:49将其重定向到我们指定的路径下的一个文件。我们一直在通过一个
00:10:54progress.json 文件来跟踪这个项目的进展。添加指令后,我们让 Claude 实现列表中的
00:10:59一个功能。然后它使用 Context 7 MCP 进行工具调用,但它没有将输出倾倒到
00:11:05上下文窗口,而是将其通过管道传输到文件,并使用 grep 提取数据并完成了实现。
00:11:10包含使用该工具所有最佳实践的 claude.md 文件已在 AI Labs Pro 中提供。
00:11:16对于那些还不了解的人,这是我们最近推出的社区,你可以在那里获得即插即用的模板,
00:11:20直接用于本视频及之前所有视频的项目。如果你觉得
00:11:25我们所做的工作有价值并想支持这个频道,这是最好的方式。链接在说明栏中。
00:11:29这就是本期视频的全部内容。如果你想支持频道
00:11:33并帮助我们继续制作此类视频,可以通过点击下方的 Super Thanks 按钮来实现。
00:11:38一如既往,感谢观看,我们下期再见。