Hermes Agent 的应用 · 第 2 篇
0x00 序※
想让 agent 操作知识库(Trilium),就得给它一条通道。一开始我用的 ETAPI——上一篇讲邮件接入时,建笔记、删分支、改属性,全是手写 ETAPI 脚本干的。后来 Trilium 更新(0.103.0+)内置了 MCP server,接进来之后 23 个 note 工具直接可用,操作知识库变得跟聊天一样自然。这篇记录两条通道:ETAPI 怎么用、MCP 怎么接、按什么选。
0x01 先有 ETAPI,后有 MCP※
顺序是这样的:ETAPI 是 Trilium 从 v0.50 就有的完整 REST API,我在邮件接入那会儿就一直在用——所有知识库操作都是现写 Python 脚本调它。直到后来升级 Trilium,发现 0.103.0+ 内置了 MCP server(Model Context Protocol,AI 工具的标准协议),才把这条新通道接进来。
所以两条通道不是同时出现的:ETAPI 是老通道、一直在用;MCP 是新通道、升级后发现就接上了。现在 Hermes 操作 Trilium 优先走 MCP 工具,批量脚本仍用 ETAPI。
0x02 ETAPI:脚本化的完整 API※
ETAPI 是 Trilium 的完整 REST API,35+ 个端点覆盖全部操作:笔记/分支/属性/附件的增删改查、搜索、导出导入、历史版本、日历/inbox、metrics。鉴权用 token(Authorization: Bearer <token>),token 在 Trilium 设置页生成。
ETAPI 适合脚本化和批量操作:固定流程、定时任务、跨机器访问。我的博客发布脚本、Hermes 系列的结构重组,都是走 ETAPI 完成的。
0x03 MCP:交互式的 note 工具※
Trilium 内置的 MCP server 挂在主服务上:http://127.0.0.1:8080/mcp(与 ETAPI 同端口,路径 /mcp),无认证、仅本机可访问。接进来之后暴露 23 个工具:search_notes、get_note、get_note_content、set_note_content、create_note、delete_note、rename_note、move_note、clone_note、属性读写、附件读写、子节点/子树查询等——笔记 CRUD 全覆盖。
MCP 适合交互式操作:agent 在对话中直接调工具,不用现写脚本。判断连对了没:握手时 serverInfo 返回 trilium-notes 才是真的 Trilium(记忆引擎系列接入时踩过端口认错的坑,别连到别的服务上)。
0x04 怎么选※
两条通道不冲突,按场景选:
- ETAPI:脚本、批量、定时、跨机器——token 认证、端点全、适合自动化流程
- MCP:agent 对话中即时操作——工具化、会话内直接调、不用写代码
现在 Hermes 操作 Trilium 优先走 MCP 工具,批量脚本仍用 ETAPI。两个都是官方通道,按需用。
0xFF 跋※
知识库的读写通道都打通了:ETAPI 管批量,MCP 管交互。实际评估过现有的自动化脚本,结论是一致的:
- 配置同步(skills/SOUL 监听)——ETAPI:常驻轮询、无状态、大量小请求,MCP 的 session 会话反成负担
- 双向记忆同步(fact_store ↔ 知识图谱)——ETAPI:全量扫描比对几百个实体/事实,MCP 只有单笔记工具,没有批量接口
- 博客发布 / RSS 生成——ETAPI:批处理、定时任务
- agent 对话中操作(写笔记、改属性、查知识)——MCP:交互式、单点操作、会话感
所以规律很简单:机器对机器用 ETAPI,agent 对人用 MCP。MCP 不是 ETAPI 的替代,是互补——它把 agent 操作知识库从写脚本变成对话。以后写笔记、发博客、整理知识图谱,agent 直接动手;定时任务和批量同步,脚本继续跑。这条路接好之后,邮件进来的事处理完,结果可以直接落进知识库。