通过MCP服务器给Claude Code直接访问Redis、Airtable、Fly.io等外部工具的能力,结合Agent实现有上下文和规则作用域的工作委托,替代人工粘贴CLI输出的低效模式。
如果之前两个视频都跟上了,你的 Claude Code 配置已经让 AI 了解你的项目(CLAUDE.md + rules),并且有现成的工作流可以调用(skills),同时 enforcement 运行在模型外部(hooks)。然而——每次有任务涉及到代码库以外的内容,你就又回到了中间人的角色。Claude 想查看 Redis 里有什么?你粘贴 CLI 输出。它需要当前的 Airtable 记录?截图。Fly.io 上的部署状态?你运行 fly status 再把结果复制回聊天窗口。
每一次粘贴都是你在替一个完全有能力自己完成 I/O 的模型打工——而每一次这样的往返都在消耗你的 Claude Pro 用量,却只是在传送数据,而不是在调用判断力。
这就是最后一层要解决的问题。MCP servers 让 Claude 直接连接你的工具。Agents 则赋予它委托能力——带独立上下文、独立工具访问权限、独立规则的 scoped workers。一次连接,永久委托。
这个系列的新读者?从 CLAUDE.md & Rules 开始,然后看 Skills & Hooks——下面所有内容都建立在这几层之上。
项目还是 PortfolioPulse,我的 Go 服务,把 Trading212 投资组合数据快照到 Redis 和 Airtable。两个视频下来,各层的样子是这样的:CLAUDE.md 和 rules 定义了 Claude 知道什么,skills 是我指向它而不是重新提示的工作流,hooks 则以确定性的方式强制执行 lint、build 和 commit 格式,零 token 消耗。
缺的是触及外部的能力。所有这些都是针对代码操作的。生产环境中的 PortfolioPulse 是代码加上 Upstash Redis 缓存、Airtable base 和 Fly.io 部署——而直到现在,Claude 只能通过我的复制粘贴来访问这些。
MCP server 是一种标准方式,把一个带有独立 API 访问权限的工具交给 Claude。配置成本是每个服务一条命令——真的是一次搞定。视频里我接了三个,每个都是同一流程的略微不同版本:
Upstash(Redis)——直接从终端:
claude mcp add --scope <scope> upstash \
-- <email> <api-key>
在 Upstash 控制台创建 API key,传递一次,搞定。
Fly.io——CLI 帮你引导:
brew install flyctl
fly auth login # paste the code from the auth page
fly mcp # registers the MCP server
Airtable——这个我用了不同的方式,通过 Claude Desktop 的 connector/plugin 系统而不是 CLI。结果一样:模型直接连接到 base——读取记录、修改字段——不需要打开浏览器标签页。
一个注意事项,和上次关于 skills 的警告精神一致:MCP server 用真实凭证访问你的真实数据。给 API key 限定作用域,服务提供只读选项时就优先用只读,并且在添加之前清楚一个 server 能触及什么。
为了证明这不只是管道工作,我让 Claude 读取 Airtable base——记录是前几个视频里已经填好的。它不需要我打开 Airtable 就能拉取数据。
然后是写路径:把一个列改名为"stock name",清理不需要的字段。看着 base 自己更新——一个我从未触碰的字段,正确地改变了,刷新确认——这就是 MCP 让人豁然开朗的时刻。这些数据以前是必须导出来截图喂给另一个模型分析的东西;现在它就是……可查询的。
demo 中两个真实的观察,因为它们比顺利路径更重要:
Claude 读取 base 时,在动用 MCP 之前先用纯 REST 走了一遍。模型是很会找办法的——MCP 并不总是读取所必需的。它标准化的是认证的、结构化的、双向的访问,不依赖模型临时构造 API 调用。
删除操作被拒绝了。改名可以,删除不行——权限划定了边界。这不是失败;这恰恰是你想要看到的边界。
MCP 给 Claude 装上了手。Agents 则决定用哪只手、做什么——不需要你来调度每一步动作。
Claude Code 中的 agent 是 .claude/agents/ 下的一个 markdown 文件:名称、描述何时调用它、它被允许使用的工具,以及它自己的指令。主 Claude session 作为父节点负责路由到它们。对于 PortfolioPulse,我创建了三个,每个有一个委托任务:

ai-broker——对 live Trading212 账户的只读访问。工具:Bash、Read、Grep、Glob——不多不少。它的文件固定了凭证(来自 .env 的 HTTP Basic Auth)、base URL 和一条硬规则:你只需要 GET /equity/portfolio 端点。API key 本身是只读作用域的——只有 Portfolio/Account,没有 Orders。任何连接 live 券商账户的东西都不获得写权限,在 agent 级别和 key 级别都是如此。
data-agent——拥有历史/缓存层:Airtable(永久历史)和 Upstash Redis(热缓存),通过第一部分中的 MCP server。看截图里它的工具列表:除了基础工具外,还获得了特定的 Airtable MCP 工具——list_tables_for_base、get_table_schema、create/update/delete_records——不是笼统的 MCP 访问。它的文件也写明了 base ID、table 和 snake_case 字段名,这样我不需要反复解释自己的 schema。
deployment-agent——PortfolioPulse 应用的 Fly.io 专家。它承载了部署命令、机器工具、隧道检查,除此之外没有别的。
让路由真正生效的细节在 description 字段里。每一个都定义了它的职责并且排除了它兄弟的职责:ai-broker 的 description 原文说"Do NOT use for historical/point-in-time questions — that's data-agent. Do NOT use for deployment questions — that's deployment-agent." 父节点通过读取这些 description 来路由,所以负向边界和正向边界一样重要。
需要留意的模式:每个 agent 被限定在自己的工具和 MCP server 范围内。broker agent 不能碰部署。deployment agent 没有通往券商的路径。最小权限,但这是针对委托的。
Claude 生成了这些 agent 文件,很容易接受后继续前进。别这样做。在你开始在其上构建之前通读一遍——description 字段决定父节点何时调用每个 agent,而 instructions 是你的护栏。在这里花五分钟moderation,省得以后调试路由错误的委托。(视频里的一个 case in point:agent 也可以被告知按特定顺序调用特定 skills——这个关联是我读生成文件时才注意到的,然后收紧了。)这也是整个系列合成一个循环的地方:rules 路由到 skills 和 agents,agents 携带自己的 MCP 访问权限,hooks 强制执行输出。你可以在 data-agent 的文件里看到:"follow the /airtable skill's tool-call order: search_bases → list_tables_for_base → get_table_schema → read/write." 一个 agent 通过 MCP server 调用一个 skill,受 rules 约束——四层在一行里。我在问一个问题——"Airtable 和 Trading212 live 现在匹配吗?"——而父节点自己调用了正确的 agents。
最后的 demo 从一个 prompt 触发所有三个 agents。ai-broker 报告持仓和下行。deployment-agent 检查 fly 隧道,发现 Docker 被改动了,运行状态检查——无需部署,guard 确认。data-agent 和 Airtable 对账。
不完美——部署检查暴露了真实问题,而且是在镜头前——但这就是要点。三个 scoped workers 在我观察的同时并行发现了它们,而不是我在终端间粘贴输出折腾了半小时。

三个视频之后,系列停在这里:
最后一层的思维模型:MCP 取代你作为数据信使;agents 取代你作为调度员。剩下的部分才是真正的工作——决定应该构建什么,以及阅读你的工具报告回来的内容。
我认为这是运行项目的新方式:在写任何代码之前先把各层设置好,然后不再做自己 AI 的基础设施。
整个配置在仓库里:https://github.com/Mozes721/PortfolioPulse
端到端看构建过程:https://youtu.be/Ze-JEvDE_7E