工具做脏活,AI做智能:一个人如何用 40 个 MCP 工具搭出知识操作系统
MCP, 工具设计, AI架构

工具做脏活,AI做智能:一个人如何用 40 个 MCP 工具搭出知识操作系统

**MCP 工具只配做三件事:读、写、搬。所有需要「理解」才能做好的事,全部交给 LLM。**

16分钟阅读

工具做脏活,AI做智能:一个人如何用 40 个 MCP 工具搭出知识操作系统


一句话核心观点

MCP 工具只配做三件事:读、写、搬。所有需要「理解」才能做好的事,全部交给 LLM。

这不是技术选型偏好,这是架构铁律。违反它,你会得到一个看起来很智能、实际上又脆又蠢的系统。


先说反面教材

最常见的 MCP 工具设计错误,是把「智能」塞进工具里。

比如你做一个「收藏文章」的工具。直觉告诉你:工具应该抓网页、提取正文、顺便生成摘要和关键要点、然后存起来。一步到位,多优雅。

错。大错特错。

问题出在「顺便」两个字。当你把摘要生成写进工具代码里,你要么用模板拼凑出一个假摘要(「本文主要讲述了……」),要么在工具内部再调一次 LLM。前者是垃圾,后者是浪费——你的对话里已经有一个 LLM 了,何必再开一个?

更深层的问题是:工具内部的「智能」是不可调试的黑盒。用户看不到中间过程,无法干预,无法纠正。AI 生成了一个烂摘要?对不起,已经存进去了。


「脏活」的精确定义

什么是脏活?问自己一个问题:

这个操作是否需要「理解」才能做好?

  • 不需要理解 → 工具干。文件读写、目录创建、网页抓取、HTML 解析、数据格式转换、索引重建、Frontmatter 注入——这些都是确定性操作,输入确定则输出确定,不需要任何「智能」。

  • 需要理解 → AI 干。生成摘要、提炼要点、设计思考问题、分析项目结构、制定学习计划、撰写复盘报告——这些需要「读懂」才能做好,而「读懂」是 LLM 的核心能力。

这条分界线清晰得令人愉悦。一旦你接受它,系统设计中 90% 的纠结都会消失。


核心架构:Tool → AI → Tool

所有复杂功能都拆成三步:

Step 1: IO 工具(读)→ 返回原始数据给 AI
Step 2: AI(LLM)→ 理解数据,生成智能输出
Step 3: IO 工具(写)→ 把 AI 的输出持久化

这不是理论。ThirdSpace 的 40 个 MCP 工具中,有 9 对遵循这个模式:

读取工具保存工具场景
collect_contentsave_knowledge_card网页收藏 → 知识卡片
gather_reflectionssave_reflection思考采集 → 深度反思
create_ship_plansave_ship_plan知识素材 → 实践计划
generate_project_docsave_project_doc项目扫描 → 项目文档
analyze_eventsave_event_analysis事件上下文 → AI 分析
review_eventsave_event_analysis事件复盘 → 经验沉淀
weekly_reviewsave_weekly_review周数据 → 周报
monthly_reviewsave_monthly_review月数据 → 月报
draft_articlesave_article素材聚合 → 成型文章

每一对中间那个「→」,就是 LLM 在工作。


为什么不合并成一步?

因为拆开之后,你获得了三个关键能力:

1. 可见性

AI 阅读原始数据后,它的分析过程和结果直接展示在对话中。你看得到它在想什么,它提炼了什么,它遗漏了什么。

这意味着你可以在 Step 2 和 Step 3 之间插手:「这个要点不对,应该强调 XX」「摘要太长了,压缩到三句话」。

如果一步到位,你连纠正的机会都没有。

2. 可替换性

Step 1 和 Step 3 是纯 IO,代码简单,几乎不会出 bug。中间的 AI 是「活的」,它的能力随模型升级而升级。

今天用 Claude,明天换 GPT-5,后天用本地模型——工具层一行代码不用改。因为工具根本不关心谁在中间做「理解」这件事。

3. 可组合性

同一个读取工具可以接不同的 AI 处理逻辑。draft_article 返回的素材,你可以让 AI 写 insight 风格的文章,也可以写 tutorial,也可以写 story。工具不需要知道你想写什么风格——风格是 AI 的事,不是工具的事

反过来,同一个保存工具也能接不同的输入。save_article 不关心文章是 AI 写的还是你自己写的,它只管存。


一个完整案例:从收藏到闭环

看看「收藏一篇文章」这个最简单的场景,拆开后是什么样:

你说:收藏 https://mp.weixin.qq.com/s/xxxxx

Step 1: collect_content
  → Playwright 打开网页
  → 提取正文(去广告、去导航、去评论区)
  → 解析元数据(作者、发布日期、站点名)
  → 下载配图到本地
  → 原文存入 flux/intake/(溯源备份)
  → 返回正文给 AI

Step 2: AI 阅读正文
  → 一段精练摘要
  → 3-5 个关键要点
  → 3 个深度思考问题(连接层 / 挑战层 / 行动层)

Step 3: save_knowledge_card
  → 生成标准 Frontmatter
  → 写入 space/found/{topic}/{site_type}/
  → Obsidian 兼容格式

Step 1 做的全是脏活:网络请求、DOM 解析、文件写入。这些代码写完就稳了,不需要「聪明」。

Step 2 是纯智能:摘要质量、要点提炼、思考问题的深度——这些全取决于 LLM 的理解能力。换一个更强的模型,同样的工具链立刻产出更好的结果

Step 3 又是脏活:拼 Frontmatter、创目录、写文件。

这就是「工具做脏活,AI 做智能」的完整含义。


这个原则的边界在哪?

诚实地说,这个原则有一个灰色地带:数据预处理

比如 weekly_review 工具在返回数据给 AI 之前,需要做聚合:把本周的工作日志、知识卡片、反思记录、Ship 计划进度全部扫描一遍,按时间排序,拼成一个结构化的数据包。

这算「理解」吗?严格说,排序和拼接不算。但「哪些内容值得放进周报素材」这个筛选,已经有点靠近理解的边界了。

当前的处理方式是:宁可多给,不要漏给。工具把所有可能相关的数据都丢给 AI,让 AI 自己判断哪些重要。这会导致 token 消耗偏高,但保证了 AI 有完整的上下文做决策。

未来的优化方向是在工具层加一个轻量级的本地模型做「预筛选」——但注意,这仍然不是让工具「变聪明」,而是让工具「搬运得更精准」。搬运的活,还是脏活。


广义工具层:不只是 MCP

到这里你可能已经注意到一个问题:我一直在说「MCP 工具做脏活」,但系统里干脏活的远不止 MCP。

事实上,「工具」是一个角色,不是一个技术名词。在 ThirdSpace 的架构里,至少有五层东西在扮演工具的角色:

第一层:MCP 工具

这是最显眼的一层。40 个 Python 函数,负责读写搬运。你已经很熟悉了。

第二层:Obsidian

Obsidian 是这个系统里最大的「工具」——只是它太大了,大到你容易忘记它的本质。

想想 Obsidian 做了什么:文件存储和组织、Frontmatter 解析和索引、双向链接渲染、模板应用、习惯打卡的 checkbox 交互。它从不「理解」你的笔记内容,它只是忠实地存储和展示。搜索是机械匹配,Dataview 查询是结构化过滤,Graph View 是链接关系的可视化——没有一个操作需要「读懂」你写了什么。

这正是工具该做的事。Obsidian 是最称职的脏活工人。

第三层:文件系统与目录约定

vault/space/crafted/ vs vault/space/found/ 的分区,flux/intake/ 作为原文溯源区,INDEX.md 作为索引文件——目录结构本身就是一种「工具」

它用约定替代了编程,用文件夹路径表达了分类逻辑。当你把一篇知识卡片存入 found/ai/wechat/ 时,路径本身就携带了三重信息:这是外部采集的内容(found)、属于 AI 主题(ai)、来源是微信(wechat)。不需要任何 AI 来判断文件该放哪里——路径就是元数据,目录就是分类器

第四层:Frontmatter 规范

typetopicoriginstatus 这套 YAML 字段体系,是人和 AI 之间的数据合约

MCP 工具按合约写入标准字段,AI 按合约读取和理解上下文,Obsidian 的 Dataview 按合约做聚合查询。三方各自独立运作,唯一的耦合点就是这几行 YAML。

Frontmatter 不聪明,但它让聪明的东西能协同工作。这是基础设施的最高境界。

第五层:AI 自身——当它在搬砖的时候

这听起来矛盾,但仔细想想:当 AI 执行 read_file 读取一个文件,当它调用 replace_in_file 修改一行代码,当它运行一个 shell 命令——这些时刻它就是工具

AI 在「做脏活」和「做智能」之间不断切换。关键不是谁在干,而是这个操作的性质是什么。同一个 AI,上一秒在帮你分析一篇文章的核心论点(智能),下一秒在把生成的知识卡片写入文件系统(脏活)。角色随操作切换,而不是随身份固定。

重新理解「工具」

所以更准确的表述不是「MCP 工具做脏活」,而是:

任何执行确定性操作的组件都是「工具」,无论它是 MCP 函数、文件系统、Obsidian 插件、还是 AI 自身在执行机械操作时的那个角色。

判断标准只有一个:

问题回答角色
需要「理解」才能做好吗?AI 的活
输入确定则输出确定吗?工具的活
换一个更强的模型,结果会更好吗?AI 的活
换一个更强的模型,结果完全一样吗?工具的活

如果你接受这个广义定义,会发现一个有趣的事实:ThirdSpace 里真正「不是工具」的部分其实很少——只有 AI 在对话中阅读、分析、生成的那些瞬间,才是「智能」。其他一切——文件系统、Obsidian、MCP、Frontmatter、目录约定——全是工具层。

这反而解释了为什么这个架构有效:你用大量「笨但稳定」的基础设施,去服务少量「聪明但概率性」的智能输出。智能是稀缺资源,工具是规模化基建。基建越厚实,智能发挥的空间就越大。


对个人开发者的启示

如果你也在用 MCP 搭建自己的工具链,记住两个判断标准:

第一,你的工具代码里,有没有出现「生成一段话」的逻辑?

如果有,停下来。把它拆成两步:工具返回原始数据,AI 生成那段话,然后再调一个工具存起来。

第二,你的系统里,有没有「隐形工具」在默默干脏活?

目录约定、命名规范、Frontmatter 协议、模板文件——这些不起眼的东西,其实是系统最坚实的地基。不要小看它们。一个好的目录结构,顶得上十个花哨的工具。

这不是过度设计。这是你在 AI 时代能做的最正确的架构决策之一。

因为当你把「理解」这件事锁在工具内部,你就把系统的智能上限锁死在了你写代码那天的水平。而当你把「理解」交给 LLM,你的系统会随着模型进步而自动变强。

工具的本分是稳定、可靠、快速地搬砖。至于砖要砌成什么样的建筑——那是建筑师的事。


最后

「工具做脏活,AI 做智能」不是一句口号,它是 ThirdSpace 整个架构背后的统一设计语言。

它回答了一个很朴素的问题:在人、AI、工具三者的协作中,谁该干什么?

  • 工具(MCP + Obsidian + 文件系统 + Frontmatter + 目录约定):读写搬运,确定性操作,不出错
  • AI:理解分析生成,概率性操作,越来越好
  • :审查决策干预,在 Step 2 和 Step 3 之间把关

三者各归其位,系统才能越用越强。

这就是一个人搭出知识操作系统的秘密——不是工具有多厉害,而是工具知道自己不该做什么。而「工具」这个词,比你以为的要大得多。