om
Enables AI assistants to interact with a Markdown-based knowledge base with backlinks, tags, and full-text search, supporting note creation, reading, updating, renaming, and deletion through MCP tools.
README
om — 插件化知识库(基于 Foam 二次开发)
<p align="center"> <a href="https://github.com/xuanlinAI/overmind-slim/blob/main/LICENSE"><img alt="License: MIT" src="https://img.shields.io/badge/license-MIT-green.svg"></a> <img alt="Node" src="https://img.shields.io/badge/node-%3E%3D22.5-blue.svg"> <img alt="Dependencies" src="https://img.shields.io/badge/dependencies-0-brightgreen.svg"> <a href="https://github.com/xuanlinAI/overmind-slim"><img alt="Stars" src="https://img.shields.io/github/stars/xuanlinAI/overmind-slim?style=social"></a> </p>
把超脑 v4 的 66 模块砍到只剩知识库核心,以 Foam 为底子重写,按 DeepSeek Harness 的方式插件化:
- Obsidian 兼容 — 你的 vault 就是知识库:纯 markdown 文件 +
[[双链]]+#标签+ frontmatter - 零依赖 — 只用 Node 内置
node:sqlite(FTS5 全文检索,内置中文分词) - 插件化 — 核心暴露稳定接口,用户自己写插件扩展(命令 / MCP 工具 / 事件 / 索引提取器)
- AI 可接入 — MCP stdio 服务器,Claude Code / Cursor 直接调用
致敬 Foam(MIT):双链解析语义与图谱模型深受其启发。本项目为独立重写(零依赖,无任何运行时依赖),不是代码 fork。
快速开始
cd ~/om
./core/cli.js init demo # 初始化(demo 已有示例笔记)
./core/cli.js scan --vault demo # 建索引
./core/cli.js search 图谱 --vault demo
./core/cli.js rename 图谱 知识图谱 --vault demo # 重命名,全库双链自动更新
./core/cli.js deadlinks --vault demo # 死链检查
./core/cli.js orphans --vault demo # 孤岛笔记
./core/cli.js daily --vault demo # 今日笔记
./core/cli.js graph 插件系统 --vault demo
./core/cli.js backlinks 记忆系统 --vault demo
./core/cli.js tags --vault demo
日常使用:cd <你的库> && om search xxx(npm link 后可全局用 om 命令)。
MCP 接入(Claude Code)
// ~/.claude.json 的 mcpServers
{
"om": {
"command": "node",
"args": ["/data/data/com.termux/files/home/om/core/cli.js", "mcp", "--vault", "/path/to/vault"]
}
}
内置工具:search_notes / read_note / create_note / update_note / rename_note / delete_note / backlinks / graph_bfs / list_notes / list_tags,加上插件注册的工具。
架构
vault/ 你的 Obsidian 库(文件即真身)
.om/config.json 配置(插件开关等)
.om/index.db SQLite 索引(可随时删除重建)
.om/plugins/ 你的插件放这里
om/
core/
vault.js 解析 frontmatter / [[双链]] / ![[嵌入]] / #标签
tokenize.js 中文分词(CJK 单字+双字)+ FTS 查询构造
db.js / indexer.js SQLite 索引 + 增量扫描
graph.js 图谱查询(邻居 / backlinks / BFS)
context.js 插件上下文(全部暴露接口)
plugins.js 插件加载器(dsh 式)
cli.js / mcp.js CLI 与 MCP stdio 服务器
plugins/ 内置示例插件(recent / todos)
插件编写指南(暴露接口)
插件 = 一个 JS 文件(ESM),默认导出 { name, version, description, activate(ctx) }。
放到 <vault>/.om/plugins/my-plugin.js,重启任意 om 命令即生效。config.json 里 "plugins": {"my-plugin": false} 可禁用。
两条快捷命令:
om plugin create my-plugin # 生成插件模板
om plugin install https://github.com/xxx/om-plugin-repo # 从 git 仓库安装(仓库根目录需含 index.js)
activate(ctx) 拿到全部能力:
| 接口 | 说明 |
|---|---|
ctx.notes |
get(name) / search(q,{limit}) / create(name,{folder,content,tags}) / update(name,content) / remove(name) / list({tag}) |
ctx.graph |
resolve(name) / neighbors(ref) / backlinks(ref) / bfs(ref,depth) |
ctx.tags |
list() / notes(tag) |
ctx.storage |
get/set/del(key) — 插件私有 KV(按插件名隔离) |
ctx.events |
on('note:save'|'note:delete', fn) — 跨上下文共享的事件总线 |
ctx.commands |
register('名字', async (args) => 输出) — 新增 CLI 子命令 |
ctx.tools |
register({name,description,inputSchema}, handler) — 新增 MCP 工具 |
ctx.index |
register(({id,name,frontmatter,body,text}) => ({tags?,links?})) — 索引提取器,自定义从笔记提取知识 |
ctx.health |
deadlinks() 未解析链接 / orphans() 孤岛笔记 |
ctx.db |
原生 SQLite 句柄(进阶) |
ctx.vaultRoot / ctx.plugin |
库路径 / 插件名 |
最小插件示例
// <vault>/.om/plugins/hello.js
export default {
name: 'hello',
activate(ctx) {
ctx.commands.register('hello', async () => `你好,库里有 ${ctx.db.prepare('SELECT COUNT(*) c FROM notes').get().c} 篇笔记`);
},
};
$ om hello --vault demo
你好,库里有 5 篇笔记
完整示例见 plugins/recent.js(命令+工具+存储+事件)与 plugins/todos.js(frontmatter/标签查询)。
测试
cd ~/om && node --test
覆盖:分词 / vault 解析 / 索引与增量 / 图谱 / 插件全接口 / MCP 协议端到端。
与超脑 v4 的差异
| 超脑 v4 | om | |
|---|---|---|
| 模块数 | 66 | 核心 10 文件 + 插件 |
| 架构 | 6 通道认知神经系统 | 纯知识库 + dsh 式插件 |
| 存储 | 自建多套 | Obsidian 兼容 markdown(文件即真身) |
| 依赖 | npm + pip + 守护进程 | 零依赖(node:sqlite) |
| 扩展 | 不可编程 | 暴露接口,用户写插件 |
已知限制(诚实声明)
- 检索为字面匹配(FTS5 + 中文单双字分词),非语义检索;同义词/概念检索需靠插件或外部向量服务扩展
update_note传入正文时自动保留原 frontmatter;如需整篇覆写,请连同---头一起传- 重命名(
rename/rename_note)会自动更新全库指向它的双链,但不会改其他文件里的文本提及 - 单机单进程设计,无分布式/多设备同步(vault 本身是纯文件,可自行用 git 同步)
- 索引为文件系统快照,外部编辑器改动后需
om scan(或om watch)刷新
推荐服务器
Baidu Map
百度地图核心API现已全面兼容MCP协议,是国内首家兼容MCP协议的地图服务商。
Playwright MCP Server
一个模型上下文协议服务器,它使大型语言模型能够通过结构化的可访问性快照与网页进行交互,而无需视觉模型或屏幕截图。
Audiense Insights MCP Server
通过模型上下文协议启用与 Audiense Insights 账户的交互,从而促进营销洞察和受众数据的提取和分析,包括人口统计信息、行为和影响者互动。
Magic Component Platform (MCP)
一个由人工智能驱动的工具,可以从自然语言描述生成现代化的用户界面组件,并与流行的集成开发环境(IDE)集成,从而简化用户界面开发流程。
VeyraX
一个单一的 MCP 工具,连接你所有喜爱的工具:Gmail、日历以及其他 40 多个工具。
Kagi MCP Server
一个 MCP 服务器,集成了 Kagi 搜索功能和 Claude AI,使 Claude 能够在回答需要最新信息的问题时执行实时网络搜索。
graphlit-mcp-server
模型上下文协议 (MCP) 服务器实现了 MCP 客户端与 Graphlit 服务之间的集成。 除了网络爬取之外,还可以将任何内容(从 Slack 到 Gmail 再到播客订阅源)导入到 Graphlit 项目中,然后从 MCP 客户端检索相关内容。
Neon MCP Server
用于与 Neon 管理 API 和数据库交互的 MCP 服务器
Exa MCP Server
模型上下文协议(MCP)服务器允许像 Claude 这样的 AI 助手使用 Exa AI 搜索 API 进行网络搜索。这种设置允许 AI 模型以安全和受控的方式获取实时的网络信息。
mcp-server-qdrant
这个仓库展示了如何为向量搜索引擎 Qdrant 创建一个 MCP (Managed Control Plane) 服务器的示例。