关于 Kobsidian
Kobsidian 是面向 Obsidian 用户的文件系统优先型 MCP 服务,适合借助 LLM 管理笔记与来源资料。它结合笔记和 Vault 工具与 LLM-Wiki 工作流,并支持会话内切换多个 Vault 及可选的 REST 操作。
主要功能
- 01以文件系统为先的 Vault 和笔记操作
- 02覆盖 Vault 内容的 66 个类型化 MCP 工具
- 03按会话切换多个 Vault
- 04LLM-Wiki 来源导入与索引维护
- 05检查孤立、损坏链接和过期页面
- 06支持 stdio 与 Streamable HTTP
适用场景
- 01无需启动 Obsidian 即可管理笔记
- 02在 MCP 会话中切换不同 Vault
- 03根据整理的来源构建并维护 Wiki
- 04通过 REST API 使用工作区或实时 Dataview 工具
MCP 相关
它向 MCP 客户端提供 Obsidian Vault、笔记、链接、标签、任务和 LLM-Wiki 操作工具。支持本地 stdio 和 Streamable HTTP;部分工作区及实时查询工具使用 Obsidian Local REST API。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
npx -y kobsidian-mcpOBSIDIAN_VAULT_PATHAbsolute path to the Obsidian vault this server should operate on.OBSIDIAN_API_URLBase URL of the Obsidian Local REST API plugin. Only required for workspace.* / commands.* / live dataview.query* tools.OBSIDIAN_API_VERIFY_TLSSet to 'true' if you've trusted the Local REST API's self-signed certificate.OBSIDIAN_REST_API_KEY密钥Bearer key for the Obsidian Local REST API plugin (only needed for REST-bridged tools).本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。
工具
66收录的工具列表 · 更新于 3 周前
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| refresh | boolean | 否 | 为 true 时,即使缓存未过期,也强制重新扫描文件系统和 obsidian.json。默认值为 false。 |
详细介绍
kObsidian MCP
以文件系统为先的 Obsidian 库 MCP 服务——并附带 LLM Wiki 层。
灵感来自 Andrej Karpathy 的 LLM Wiki 理念。 由你整理来源;LLM 负责记录整理。
🧰 唯一支持工作区的 Obsidian MCP。
vault.list/vault.select让 LLM 能在会话中发现并切换 Obsidian 库—— 无需重启、无需编辑配置,也无需为每个工具传入路径。向后 兼容OBSIDIAN_VAULT_PATH。在 v0.3.0 中加入。 参见 docs/WORKSPACES.md。
v0.3.7 新增内容
使用 .kobsidian.json 为每个库单独配置:自定义 Wiki 文件夹、文件名、标题和过期页面阈值,无需让所有库共用一份配置。notes.edit 的标题插入功能也会保留段落间距,并能与现有列表自然衔接。
为什么选择 kObsidian
- 文件系统优先。 直接操作你的知识库。66 个工具中,有 55 个以上无需运行 Obsidian。
- 66 个类型化 MCP 工具,涵盖知识库、笔记、链接、标签、任务、Dataview、Canvas、Kanban、围栏代码块、Marp、模板——每个工具都经过 Zod 验证,输出
structuredContent,并具备完整的 4 项 MCP 注解(readOnlyHint、destructiveHint、idempotentHint、openWorldHint)。 - 多知识库
vault.*(v0.3.0)。 LLM 可以通过vault.list列出已知的 Obsidian 知识库(从 Obsidian 自身的注册表或OBSIDIAN_VAULT_<NAME>环境变量中发现),并在会话期间通过vault.select切换知识库。完全向后兼容:OBSIDIAN_VAULT_PATH仍是默认值,每次调用中的vaultPath参数始终优先。 - LLM-Wiki 编排 —
wiki.*命名空间可将你的知识库转变为不断积累的知识库:摄取来源,自动更新索引和可搜索日志,并检查孤立页面、失效链接和过时页面。Agent 通过proposedEdits契约应用交叉引用,让每次写入都能在记录中查看。 - 支持两种传输方式。 经典 stdio 适用于本地 MCP 客户端,Streamable HTTP(Hono)适用于远程连接,支持 CORS 预检、
MCP-Protocol-Version处理、来源 403 和可选的 bearer 身份验证——均符合 2025-11-25 规范。 - 兼容 Claude Code 架构(v0.3.5+,并在 v0.3.6 中优化)。 工具通过 stdio 和无状态 Streamable HTTP 提供 JSON Schema 2020-12。具有联合类型结构的工具会向客户端公开其字段和选择器,同时仍由 Zod 验证每次调用和结构化输出。请参阅兼容性详情。
- 随处可用。 npm(
npx -y kobsidian-mcp)、可跨平台使用的.mcpb包(可拖放到 Claude Desktop)、用于 Smithery 的smithery.yaml,以及用于 MCP Registry 的server.json。每个.mcpb发行资源都经过 VirusTotal 扫描,并在发行说明正文中附上链接。
安装
选择下方的客户端。每个客户端都支持完整的混合模式:以文件系统为先的工具(80 多个)仅需使用知识库路径即可运行;同一份配置还可以同时携带 Local REST API 密钥,以启用 workspace.*、commands.* 和通过 dataview.query* 实时查询 DQL。每个客户端只需设置一次完整的环境变量块,所有工具命名空间就都会启用;如果 REST 密钥留空,以文件系统为先的工具仍可正常工作。
| 环境变量 | 用途 |
|---|---|
OBSIDIAN_VAULT_PATH | 所有场景下必需。 知识库的绝对路径。 |
OBSIDIAN_API_URL | Local REST API 插件的基础 URL。默认为 https://127.0.0.1:27124。 |
OBSIDIAN_API_VERIFY_TLS | 可选。 默认为 false(REST API 插件在 127.0.0.1 上使用自签名证书)。仅在操作系统钥匙串中信任该证书后才设为 true。 |
OBSIDIAN_REST_API_KEY | Local REST API 插件的承载密钥——仅用于 workspace.* / commands.* / 实时 dataview.query*。 |
完整列表见 docs/ENVIRONMENT.md。如果想将冷启动时间从约 200 毫秒缩短到约 10 毫秒,可在任何地方将 npx 换成 bunx。
Claude Code — claude mcp add
claude mcp add kobsidian -s user \
--env OBSIDIAN_VAULT_PATH=/absolute/path/to/vault \
--env OBSIDIAN_API_URL=https://127.0.0.1:27124 \
--env OBSIDIAN_REST_API_KEY=only-if-you-use-workspace-or-commands-tools \
-- npx -y kobsidian-mcp
在 Windows 上,请用 cmd /c 包装命令:
-- cmd /c npx -y kobsidian-mcp。
Claude Desktop — 拖放 .mcpb
从最新版本下载 kobsidian-<platform>.mcpb,然后将其拖入 Claude Desktop。安装程序会提示你填写知识库路径,以及可选的 API URL / 密钥。每个版本的资源都经过 VirusTotal 扫描——链接位于版本说明正文中。
在本地构建:
bun install
bun run build:compile # → dist/kobsidian (or .exe on Windows)
bun run bundle:mcpb # → kobsidian.mcpb
Codex CLI(OpenAI)— codex mcp add
codex mcp add kobsidian \
--env OBSIDIAN_VAULT_PATH=/absolute/path/to/vault \
--env OBSIDIAN_API_URL=https://127.0.0.1:27124 \
--env OBSIDIAN_REST_API_KEY=only-if-you-use-workspace-or-commands-tools \
-- npx -y kobsidian-mcp
Cursor — ~/.cursor/mcp.json 或深层链接
编辑 ~/.cursor/mcp.json(或项目专属的 .cursor/mcp.json):
{
"mcpServers": {
"kobsidian": {
"type": "stdio",
"command": "npx",
"args": ["-y", "kobsidian-mcp"],
"env": {
"OBSIDIAN_VAULT_PATH": "/absolute/path/to/vault",
"OBSIDIAN_API_URL": "https://127.0.0.1:27124",
"OBSIDIAN_REST_API_KEY": "only-if-you-use-workspace-or-commands-tools"
}
}
}
}
也可以向用户提供一键深层链接:
cursor://anysphere.cursor-deeplink/mcp/install?name=kobsidian&config=<base64-encoded-config>。
VS Code(Copilot)— code --add-mcp
code --add-mcp '{"name":"kobsidian","command":"npx","args":["-y","kobsidian-mcp"],"env":{"OBSIDIAN_VAULT_PATH":"/absolute/path/to/vault","OBSIDIAN_API_URL":"https://127.0.0.1:27124","OBSIDIAN_REST_API_KEY":"only-if-you-use-workspace-or-commands-tools"}}'
也可以在工作区中创建 .vscode/mcp.json,并在顶层 servers 键下使用相同的结构。
Gemini CLI — gemini mcp add
gemini mcp add kobsidian \
--env OBSIDIAN_VAULT_PATH=/absolute/path/to/vault \
--env OBSIDIAN_API_URL=https://127.0.0.1:27124 \
--env OBSIDIAN_REST_API_KEY=only-if-you-use-workspace-or-commands-tools \
-- npx -y kobsidian-mcp
也可以在 ~/.gemini/settings.json 的 mcpServers 下手动编辑。
Antigravity(Google)— mcp_config.json
编辑 ~/.gemini/antigravity/mcp_config.json
(Windows:%USERPROFILE%\.gemini\antigravity\mcp_config.json):
{
"mcpServers": {
"kobsidian": {
"type": "stdio",
"command": "npx",
"args": ["-y", "kobsidian-mcp"],
"env": {
"OBSIDIAN_VAULT_PATH": "/absolute/path/to/vault",
"OBSIDIAN_API_URL": "https://127.0.0.1:27124",
"OBSIDIAN_REST_API_KEY": "only-if-you-use-workspace-or-commands-tools"
}
}
}
}
Zed — context_servers 下的 settings.json
在 ~/.config/zed/settings.json 中:
{
"context_servers": {
"kobsidian": {
"source": "custom",
"command": "npx",
"args": ["-y", "kobsidian-mcp"],
"env": {
"OBSIDIAN_VAULT_PATH": "/absolute/path/to/vault",
"OBSIDIAN_API_URL": "https://127.0.0.1:27124",
"OBSIDIAN_REST_API_KEY": "only-if-you-use-workspace-or-commands-tools"
}
}
}
}
OpenCode — mcp 下的 opencode.json
{
"mcp": {
"kobsidian": {
"type": "local",
"command": ["npx", "-y", "kobsidian-mcp"],
"environment": {
"OBSIDIAN_VAULT_PATH": "/absolute/path/to/vault",
"OBSIDIAN_API_URL": "https://127.0.0.1:27124",
"OBSIDIAN_REST_API_KEY": "only-if-you-use-workspace-or-commands-tools"
}
}
}
}
Factory Droid — droid mcp add
droid mcp add kobsidian "npx -y kobsidian-mcp" \
--env OBSIDIAN_VAULT_PATH=/absolute/path/to/vault \
--env OBSIDIAN_API_URL=https://127.0.0.1:27124 \
--env OBSIDIAN_REST_API_KEY=only-if-you-use-workspace-or-commands-tools
其他客户端(Cline、JetBrains AI、Continue、自定义主机)— 通用 mcpServers JSON
任何读取标准 mcpServers 对象的 MCP 客户端都可使用:
{
"mcpServers": {
"kobsidian": {
"type": "stdio",
"command": "npx",
"args": ["-y", "kobsidian-mcp"],
"env": {
"OBSIDIAN_VAULT_PATH": "/absolute/path/to/vault",
"OBSIDIAN_API_URL": "https://127.0.0.1:27124",
"OBSIDIAN_REST_API_KEY": "only-if-you-use-workspace-or-commands-tools"
}
}
}
}
对于能根据 command 推断传输方式的客户端(Claude Code),"type": "stdio" 是可选的;但 Claude Desktop、Cursor、VSCode 和 Antigravity 都要求此项——为确保最大兼容性,请将其包含在内。
Smithery
smithery.ai 会直接根据 smithery.yaml 生成安装界面,并代你收集四个环境变量:知识库路径,以及可选的 Local REST API URL / TLS / 承载密钥三项配置,因此混合模式开箱即用。
从源代码构建(贡献 / 开发)
git clone https://github.com/bezata/kObsidian
cd kObsidian
bun install
bun run dev:stdio # or dev:http
Obsidian 插件
kObsidian 以文件系统为先——66 个工具中有 55 个以上可直接操作 vault 目录,无需安装 Obsidian 插件。只有需要使用依赖这些插件的特定工具命名空间时,才需要安装下列插件。
启用社区插件(一次性操作,若尚未启用)
Obsidian 默认禁用社区插件。请为每个 vault 启用一次:
- 在 Obsidian 中打开你的 vault。
- 设置(⚙️,左下角)→ 社区插件。
- 点击 启用社区插件。
- 浏览 → 搜索 → 安装 → 启用。
REST 桥接工具所需插件
Obsidian Local REST API(作者:Adam Coddington)——以下功能需要此插件:
workspace.*(activeFile、openFile、navigate、closeActiveFile、toggleEditMode)commands.*(execute、list)dataview.query/dataview.listByTag/dataview.listByFolder/dataview.table(运行时 DQL——离线的dataview.fields.*/dataview.index/blocks.*工具无需此插件)templates.use(engine: "templater")
安装后的设置:
- 启用插件。
- 打开插件设置——滚动到 API key → 点击 复制(如需生成新密钥,可先点击 重置)。
- 将密钥粘贴为 MCP 客户端配置
env:块中的OBSIDIAN_REST_API_KEY。默认的OBSIDIAN_API_URL(https://127.0.0.1:27124)开箱即用。
使用 REST 桥接工具时,请保持插件运行——该端点仅限本地访问(127.0.0.1),因此不会有任何内容离开你的计算机。
可增强特定工具命名空间(但并非必需)
| 插件 | 链接 | 可解锁的功能 |
|---|---|---|
| Dataview | id=dataview | 所有 dataview.* 工具仍可处理原始 Markdown;Dataview 插件可实际执行 dataview.query* 中的 DQL 查询。它还会在 Obsidian 中直观呈现字段和查询。 |
| Templater | id=templater-obsidian | 通过 REST API 在运行时渲染模板(templates.use,engine:"templater")。离线文件系统引擎(templates.use,engine:"filesystem")和 templates.list 无需此插件。 |
| Marp | id=marp-slides | 即使没有此插件,Marp marp.* 工具也能解析并编辑 Marp front matter Markdown;该插件可在 Obsidian 中渲染幻灯片 / 导出为 PDF。 |
| Kanban | id=obsidian-kanban | 无论是否安装此插件,kanban.* 工具都能读写纯 Markdown 看板格式;该插件可在 Obsidian 中将看板呈现为可拖动的列。 |
| Tasks | id=obsidian-tasks-plugin | 无论是否安装此插件,tasks.* 工具都能识别 Tasks 插件的表情符号语法(📅 ⏳ 🛫 ✅ 🔼 🔁);该插件可在 Obsidian 中提供筛选 / 查询 / 切换功能。 |
obsidian://show-plugin?id=…链接会直接跳转到 Obsidian 内置浏览器中的插件页面——在 Obsidian 已打开时点击链接,即可直达安装页面。
TLDR
| 你想要…… | 最低要求 |
|---|---|
使用 notes.* / tags.* / links.* / stats.vault / tasks.* / wiki.* / kanban.* / blocks.* / marp.* / canvas.* / templates.list + templates.use(engine:"filesystem")/ 离线 dataview.* | 只需提供 vault 路径。 无需插件。 |
使用 workspace.* / commands.* | + Local REST API 插件 + API key 环境变量 |
运行实时 DQL 查询(dataview.query / dataview.listBy* / dataview.table) | + Local REST API + Dataview |
| 在运行时运行 Templater 模板 | + Local REST API + Templater |
无论安装何种插件组合,kObsidian 都不依赖 Obsidian 保持运行——如果无法连接插件,REST 桥接工具只会返回清晰的错误信息,而以文件系统为先的工具会继续正常工作。
快速开始
开始第一个会话之前——kObsidian 可用于纯净的 Obsidian 知识库, 但启用几个 Obsidian 插件即可解锁完整的工具集。 请参阅下文的 Obsidian 插件,了解 5 分钟的 设置方法(Local REST API、Dataview、Templater、Marp、Kanban、Tasks)。 如果你只需要 80 多个以文件系统为先的工具,可跳过此步骤。
安装完成后,典型会话会从三个自然语言
提示词开始。wiki.* 工具和 .claude 技能会处理其余工作。
You: "Set up a wiki in this vault."
LLM: wiki.init → wiki/{Sources,Concepts,Entities}/ + index.md + log.md + wiki-schema.md
You: "Ingest this: https://… (paper on Memex)"
LLM: wiki.ingest → creates wiki/Sources/as-we-may-think.md + log entry
returns proposedEdits:
- insertAfterHeading index.md#Sources
- createStub Concepts/memex.md
- createStub Entities/vannevar-bush.md
LLM applies each via notes.* (you see every write in the transcript)
You: "What does the wiki say about memex vs hypertext?"
LLM: wiki.query memex → top-ranked pages
notes.read on each → cited synthesis
offers to file the synthesis back via wiki.summaryMerge
You: "Audit the wiki."
LLM: wiki.lint → {orphans, brokenLinks, stale, missingPages, tagSingletons, indexMismatch}
proposes concrete fixes; applies after you confirm
完整工作流、frontmatter 约定和 proposedEdits 设计请参阅
docs/wiki.md。
示例用例
相同的基础组件可用于多种真实场景下的知识库。
以下是三个完整示例;更详细的演练请参阅 docs/examples.md。
A. 个人研究 Wiki
You: "Ingest this paper on in-context learning: <url or pasted markdown>"
LLM: wiki.ingest title="In-Context Learning — A Survey" sourceType=paper
tags=[icl, prompting] relatedConcepts=[In-Context Learning, Few-Shot Prompting]
relatedEntities=[Brown 2020]
→ wiki/Sources/in-context-learning-a-survey.md
→ proposedEdits:
• createStub wiki/Concepts/in-context-learning.md
• createStub wiki/Concepts/few-shot-prompting.md
• createStub wiki/Entities/brown-2020.md
• insertAfterHeading wiki/index.md#Sources
LLM applies each via notes.create / notes.edit (mode: "after-heading").
B. 代码库的架构决策记录(ADR)
将每条 ADR 建模为一个 Source,将架构模式建模为 Concepts, 并将服务/团队/库建模为 Entities。这样,Wiki 就成为你的 ADR 档案库,并带有无需手动维护的交叉链接。
You: "Record ADR-004: we're switching internal service comms from REST
to gRPC. Context: <paste>"
LLM: wiki.ingest title="ADR-004 — gRPC for internal service comms"
sourceType=note tags=[adr, architecture, rpc]
relatedConcepts=[gRPC, Service Mesh, Internal RPC]
relatedEntities=[order-service, payment-service, inventory-service]
→ wiki/Sources/adr-004-grpc-for-internal-service-comms.md
→ proposedEdits:
• createStub wiki/Concepts/grpc.md
• createStub wiki/Concepts/service-mesh.md
• insertAfterHeading wiki/Entities/order-service.md#Notable Facts
• insertAfterHeading wiki/Entities/payment-service.md#Notable Facts
• …
Three weeks later —
You: "Why did we pick gRPC for internal comms?"
LLM: wiki.query "grpc internal comms"
notes.read top matches
→ "Per [[wiki/Sources/adr-004-grpc-for-internal-service-comms.md|ADR-004]],
chosen over REST because of native streaming + typed schemas; tradeoff
accepted: browser clients still use REST via an edge gateway
([[wiki/Concepts/service-mesh.md]])."
C. 代码库 Wiki(设计文档 + 事后复盘 + RFC)
工程团队会弃用 Wiki,因为没人更新。让 大模型来做这件事。将设计文档、RFC 和事后复盘作为 Sources 导入;架构模式成为 Concepts;服务和团队成为 Entities。
You: "We had an incident today — payment-service timeouts cascaded
into order-service. Here's the post-mortem: <paste>"
LLM: wiki.ingest title="Postmortem 2026-04-10 — Payment timeouts cascade"
sourceType=other tags=[postmortem, incident, reliability]
relatedConcepts=[Circuit Breaker, Cascade Failure, Timeout Budget]
relatedEntities=[payment-service, order-service]
→ wiki/Sources/postmortem-2026-04-10-payment-timeouts-cascade.md
→ proposedEdits:
• createStub wiki/Concepts/circuit-breaker.md
• createStub wiki/Concepts/cascade-failure.md
• insertAfterHeading wiki/Entities/payment-service.md#Notable Facts
• insertAfterHeading wiki/Entities/order-service.md#Notable Facts
Periodic housekeeping —
You: "Audit the codebase wiki."
LLM: wiki.lint
→ 3 orphan RFCs (unlinked from any Concept; link or archive?)
→ 1 broken link: [[wiki/Entities/legacy-auth-service.md]]
(deprecated in Q1; remove the link from
[[wiki/Sources/adr-002-session-migration.md]]?)
→ 4 post-mortems past the 180-day stale threshold — tag with
"needs-review" or re-ingest with updated lessons-learned?
→ 2 tag singletons: `retry-logic` (merge into `retry-policy`?),
`observability` (first use; keep).
这对工程团队有效的原因
proposedEdits约定意味着每次交叉引用写入都会 显示在对话记录中——避免大模型幻觉出某项决策影响哪些服务, 进而悄无声息地破坏知识库。- 可搜索的日志格式(
## [YYYY-MM-DD] ingest | ADR-004 …)使grep '^## \[' wiki/log.md | tail -20成为有效的“团队最近 做了什么决定”查询。 wiki.lint会找出指向数月前已弃用服务的失效链接——这是 人们一直抽不出时间处理的记录维护工作。
架构
┌──────────────────────────────────────────────────────────────────────┐
│ MCP Clients │
│ Claude Code · Claude Desktop · Cursor · VSCode · Antigravity · Zed │
│ JetBrains AI · Cline · Continue · ChatGPT · Smithery · … │
└────────────────────────────┬─────────────────────────────────────────┘
│ JSON-RPC 2.0 · MCP 2025-11-25
┌───────────────────┴──────────────────────┐
▼ ▼
┌──────────────────┐ ┌─────────────────────────┐
│ stdio transport │ │ Streamable HTTP (Hono) │
│ │ │ + OPTIONS / CORS │
│ │ │ + MCP-Protocol-Version │
│ │ │ + Origin 403 / bearer │
└────────┬─────────┘ └────────┬────────────────┘
│ │
└──────────────────┬───────────────────┘
▼
┌──────────────────────────────────┐
│ McpServer │
│ ┌────────────┐ ┌─────────────┐ │
│ │ 90 Tools │ │ 4 Resources │ │
│ └────────────┘ └─────────────┘ │
│ ┌────────────┐ ┌─────────────┐ │
│ │ 3 Prompts │ │ structured │ │
│ │ │ │ content │ │
│ └────────────┘ └─────────────┘ │
└────────────┬─────────────────────┘
│
▼
┌──────────────────────────────────┐
│ Domain layer (pure) │
│ notes · links · tags · tasks │
│ dataview · canvas · kanban │
│ blocks · marp · templates │
│ wiki/ orchestration │
└──────┬─────────────────┬─────────┘
│ │
▼ ▼
┌──────────────┐ ┌──────────────────────┐
│ vault/ (FS) │ │ Obsidian Local REST │
│ authoritative│ │ API plugin (optional)│
└──────────────┘ └──────────────────────┘
完整的模块图请参阅 docs/architecture.md。
LLM Wiki(60 秒了解)
维护知识库中最繁琐的部分不是阅读或思考,而是记录维护。人们会弃用 Wiki,因为 维护成本的增长速度超过了它带来的价值。大模型不会感到 厌倦。
kObsidian 实现了 Andrej Karpathy 的 gist 中的 LLM Wiki 模式: 由大模型维护、不断积累的持久知识库。知识库会变成一个 私有、精心整理的 Memex(Vannevar Bush,1945):交叉引用、 日志记录和 lint 工作由大模型负责,而你可以专注于整理 来源和提出问题。
“大模型不再只是在查询时从原始文档中检索信息,而是逐步构建并维护一个持久 Wiki——一个 结构化、相互链接的 Markdown 文件集合,位于你和 原始来源之间。”——Andrej Karpathy
User drops a source
│
▼
┌──────────────────────┐ proposedEdits
│ wiki.ingest │ ─────────────────────┐
└──────────┬───────────┘ │
│ creates 1 file ▼
│ ┌──────────────────────────────┐
▼ │ LLM applies edits via │
wiki/Sources/ │ notes.edit (after-heading) │
<slug>.md │ notes.edit (replace) │
│ │ notes.create │
│ appends └──────────────────────────────┘
▼
wiki/log.md
Anytime: wiki.query → top pages → notes.read → cited synthesis
Periodic: wiki.lint → orphans · broken · stale · missing · tag-drift
Curate: wiki.summaryMerge — add cited section to concept/entity page
知识库中的默认目录结构:
wiki/
├── Sources/ per-source summary pages
├── Concepts/ topic / idea pages (LLM-maintained)
├── Entities/ people / places / orgs / works
├── index.md categorized catalog (wiki.indexRebuild)
├── log.md greppable chronological log
└── wiki-schema.md vault-local copy of the contract
关键设计决策是,wiki.ingest 绝不会盲目重写
交叉引用。它只会创建一个文件(Sources 页面),追加一个文件(log.md),并返回一个
proposedEdits 数组,由 Agent 使用现有的 notes.* 工具应用。每次写入
都会显示在对话记录中——因此大模型的幻觉会以可供审核的编辑形式呈现,
而不是悄无声息地破坏知识库。
完整约定请参阅 docs/wiki.md。
Claude Code 技能
skills/ 中的四项技能可通过自然语言触发:
wiki-bootstrap、wiki-ingest、wiki-query、wiki-lint。将它们复制或
符号链接到 ~/.claude/skills/——请参阅
skills/README.md。
工具概览
16 个命名空间中共有 66 个 MCP 工具(v0.2.5 将数量从约 90 个整合至 62 个;
v0.3.0 新增了用于多知识库支持的 vault.* 命名空间——完整历史请参阅
CHANGELOG)。最新清单见
docs/tool-inventory.json。
| 命名空间 | 数量 | 主要功能 |
|---|---|---|
vault.* | 4 | list · current · select · reset — 多知识库发现和会话切换(v0.3.0) |
notes.* | 8 | read(通过 include 读取内容/元数据/统计数据)· create(笔记或文件夹)· edit(替换/追加/前置/标题后/区块后)· frontmatter · delete · move · list · search |
tags.* | 4 | modify(添加/移除/替换/合并)· search · analyze · list |
links.* | 8 | 反向链接 · 出站链接 · 失效链接 · 孤立笔记 · 枢纽 · 图谱 · 健康状况 · 连接 |
stats.* | 1 | stats.vault(每篇笔记的统计数据已移至 notes.read) |
tasks.* | 5 | Tasks 插件格式(📅 ⏳ 🛫 ✅ 🔼 🔁)— 搜索 · 创建 · 切换 · updateMetadata · 统计数据 |
dataview.* | 7 | query + 便捷封装(listByTag/listByFolder/table)· index · fields.read · fields.write |
blocks.* | 3 | 统一的围栏代码块 API(list/read/update),适用于 dataview、dataviewjs、mermaid |
marp.* | 2 | read(演示文稿/幻灯片/单页)· update(幻灯片/frontmatter) |
kanban.* | 3 | parse · stats · card(添加/移动/切换) |
canvas.* | 4 | create · parse · connections · edit(添加节点/添加边/移除节点) |
templates.* | 2 | list · use(引擎 × 操作) |
workspace.* | 5 | Obsidian 实时 UI 桥接(需要 Local REST API 插件) |
commands.* | 2 | list(可选查询)· execute |
wiki.* | 7 | 初始化 · 导入 · 记录 · 重建索引 · 查询 · lint · 合并摘要 |
system.* | 1 | version |
客户端安全性标注(MCP 2025-11-25):
| 提示 | 工具数 |
|---|---|
readOnlyHint: true(客户端可自动批准) | 47 |
destructiveHint: true(客户端会更严格地请求确认) | 6 |
idempotentHint: true(可安全重试) | 12 |
openWorldHint: true(访问知识库之外的内容) | 16 |
MCP 资源(可通过 URI 寻址;任何客户端都可浏览,无需调用工具):
kobsidian://wiki/index wiki/index.md
kobsidian://wiki/log wiki/log.md
kobsidian://wiki/schema wiki/wiki-schema.md
kobsidian://wiki/page/{+path} any Sources/Concepts/Entities page
MCP 提示词(供不使用 skills/ 文件的客户端使用):
ingest-source、answer-from-wiki、health-check-wiki。
详情请参阅 docs/tools.md。
配置
| 环境变量 | 默认值 | 用途 |
|---|---|---|
OBSIDIAN_VAULT_PATH | — | 必需。 知识库的绝对路径。 |
OBSIDIAN_API_URL | https://127.0.0.1:27124 | Obsidian Local REST API 基础地址;仅用于 workspace.* / commands.* / dataview.query*。 |
OBSIDIAN_API_VERIFY_TLS | false | 如果已信任 REST API 的自签名证书,请设为 true。 |
OBSIDIAN_REST_API_KEY | — | REST API 插件的 Bearer 密钥(如果使用)。 |
KOBSIDIAN_HTTP_HOST | 127.0.0.1 | dev:http 的绑定主机。 |
KOBSIDIAN_HTTP_PORT | 3000 | dev:http 的绑定端口。 |
KOBSIDIAN_HTTP_BEARER_TOKEN | — | Streamable HTTP 传输的可选 Bearer 令牌。 |
KOBSIDIAN_ALLOWED_ORIGINS | http://localhost,http://127.0.0.1 | 以逗号分隔的 CORS 允许列表。 |
KOBSIDIAN_WIKI_ROOT | wiki | 知识库中的 Wiki 目录。 |
KOBSIDIAN_WIKI_SOURCES_DIR | Sources | 每个来源的摘要页面。 |
KOBSIDIAN_WIKI_CONCEPTS_DIR | Concepts | 主题 / 想法页面。 |
KOBSIDIAN_WIKI_ENTITIES_DIR | Entities | 人物 / 地点 / 组织 / 作品。 |
KOBSIDIAN_WIKI_INDEX_FILE | index.md | Wiki 目录文件名。 |
KOBSIDIAN_WIKI_LOG_FILE | log.md | Wiki 日志文件名。 |
KOBSIDIAN_WIKI_SCHEMA_FILE | wiki-schema.md | 初始架构文件名。 |
KOBSIDIAN_WIKI_STALE_DAYS | 180 | wiki.lint 的过时页面阈值。 |
KOBSIDIAN_WIKI_INDEX_SOURCES_HEADING | Sources | index.md 中列出来源的部分;wiki.ingest 会在此部分下添加新条目。 |
KOBSIDIAN_WIKI_INDEX_CONCEPTS_HEADING | Concepts | index.md 中列出概念的部分。 |
KOBSIDIAN_WIKI_INDEX_ENTITIES_HEADING | Entities | index.md 中列出实体的部分。 |
KOBSIDIAN_WIKI_CONCEPT_PAGE_HEADING | Discussion | 概念页面中用于放置 wiki.ingest 引文 / wiki.summaryMerge 部分的标题。 |
KOBSIDIAN_WIKI_ENTITY_PAGE_HEADING | Notable Facts | 实体页面中用于放置 wiki.ingest 引文 / wiki.summaryMerge 部分的标题。 |
KOBSIDIAN_VAULT_CONFIG_FILE | .kobsidian.json | 知识库配置文件(如下所述)相对于知识库的路径。 |
每个 Wiki 工具也都接受单次调用的 wikiRoot 覆盖参数;对于页面使用本地化标题(例如 ## Fontes)的知识库,wiki.ingest 还接受单次调用的 indexHeading / conceptHeading / entityHeading 覆盖参数。如果页面缺少目标标题,提案会降级为 append,因此仍可通过 notes.edit 应用。
每个知识库的配置文件
属于单个知识库而非服务的设置——文件夹名称、文件名以及本地化 Wiki 的部分标题——应放在知识库根目录的 .kobsidian.json 文件中。所有键均为可选项,且优先级高于对应的环境变量;单次调用的工具参数优先级高于这两者
(单次调用 → .kobsidian.json → 环境变量 → 默认值)。
{
"$schema": "https://raw.githubusercontent.com/bezata/kObsidian/main/docs/kobsidian.config.schema.json",
"wiki": {
"root": "wiki",
"sourcesDir": "Fontes",
"staleDays": 90,
"headings": {
"indexSources": "Fontes",
"indexConcepts": "Conceitos",
"indexEntities": "Entidades",
"conceptPage": "Discussão",
"entityPage": "Fatos Notáveis"
}
}
}
未知键和格式错误的 JSON 会被拒绝,并在错误中指出文件路径,以便立即发现拼写错误;vault.current 会在 config 下返回生效的配置(或错误)。
文档
本地化文档提供**简体中文**、 日本語 和 **한국어**版本。
| architecture.md | 技术栈、模块概览、分层规则 |
| wiki.md | LLM-Wiki 约定、循环、frontmatter、lint 类别 |
| examples.md | 个人研究 Wiki · 工程 ADR · 代码库 Wiki——端到端示例 |
| tools.md | 命名空间表、注释、资源、提示词 |
| SECURITY.md | 来源 / CORS、VirusTotal 扫描、环境变量规范 |
| TESTING.md | bun run … 命令 + 覆盖率 |
| ENVIRONMENT.md | 所有环境变量及其默认值 |
| MIGRATION.md | 升级说明 |
路线图
接下来的两个里程碑记录在 TODO.md 中:
- v0.4 — Obsidian LiveSync 桥接。 通过社区 Self-Hosted LiveSync 插件(CouchDB / S3 / R2 / WebRTC 对等端)免费访问端到端加密的库——这样,MCP 客户端就能从用户拥有的任意设备访问同一个 Obsidian 库,而无需让 Obsidian 本身保持运行。
- v0.5 — 跨语义库验证。 提供
wiki.crossCheck工具,在 wiki 层协调两个或更多通过 LiveSync 配对的库;其运行受新增的 frontmatter 字段schema_version限制,该字段采用项目的 semver 规则作为兼容性约定。
TODO.md 说明了动机、各里程碑的任务拆分,以及条目从那里移入 CHANGELOG 的规则。
开发
bun install
bun run typecheck
bun run lint
bun run test # 56 tests across 14 files
bun run build # node-target stdio.js + bun-target http.js
bun run inventory # regenerate docs/tool-inventory.json
项目约定见 AGENTS.md。
安全与供应链
-
每个
.mcpb发布资源都会经过 VirusTotal 扫描。Release工作流会在发布完成后立即,通过crazy-max/ghaction-virustotal@v4将每个平台的kobsidian-<platform>.mcpb捆绑包上传至 VirusTotal,然后将分析链接附加到发布说明中。任何从 GitHub 发布页面安装的用户,都可以在运行捆绑包之前点击查看对应平台的公开 VirusTotal 报告——无需信任维护者。 -
传输加固。 Streamable HTTP 会根据允许列表验证
Origin(不匹配时返回 403),实现 CORS 预检 (OPTIONS /mcp→ 204 +Access-Control-*),要求提供或默认使用MCP-Protocol-Version,并支持通过KOBSIDIAN_HTTP_BEARER_TOKEN进行可选的 bearer 身份验证。stdio 没有网络攻击面。 -
固定 SDK 最低版本。
@modelcontextprotocol/sdk@^1.26.0——缓解GHSA-345p-7cg4-v4c7(跨客户端响应泄漏)和CVE-2026-0621(UriTemplate ReDoS)风险。本仓库固定使用1.30.0。 -
npm 可信发布。 仓库中不存储长期有效的
NPM_TOKEN。每次推送标签时,GitHub Actions 都会签发一个短期 OIDC 令牌,npm CLI 再将其兑换为仅限此工作流文件(bezata/kObsidian仓库中的.github/workflows/release.yml)的一次性发布令牌。来源证明会自动生成——每个已发布版本都有经过加密验证的构建声明,指向生成该版本的确切 Actions 运行记录。Fork、其他分支或经过修改的工作流文件都无法发布——OIDC 的受众声明将无法匹配。
完整说明见 docs/SECURITY.md。
兼容性说明
- 协议版本 —
2025-11-25(当前 MCP 规范)。根据规范,不带MCP-Protocol-Version的 HTTP 客户端会回退到2025-03-26;显式指定但不受支持的版本会返回 400。 - Dataview 拆分 — 离线工具会索引 frontmatter / inline / list /
task / fenced
dataview/ fenceddataviewjs代码块。运行时 DQL 会通过 Local REST API 委托给 Obsidian + Dataview。 DataviewJS 会保留源代码,但不会在此服务中执行。 - Mermaid + Marp — 仅解析和编辑,并保留源代码;渲染由客户端负责。
- SDK 最低版本 —
@modelcontextprotocol/sdk@^1.26.0(缓解GHSA-345p-7cg4-v4c7跨客户端响应泄漏 +CVE-2026-0621UriTemplate ReDoS 风险)。本仓库固定使用1.30.0。
致谢
- LLM Wiki 模式 — Andrej Karpathy 的 gist。 kObsidian 是这一理念的一种具体实现,采用 TypeScript 编写,并以文件系统为先。
- Memex — Vannevar Bush,《As We May Think》,1945 年。 维基的交叉引用图试图实现的,正是这种关联路径的概念。
- Model Context Protocol — Anthropic + Agentic AI Foundation。
- Obsidian — obsidian.md。知识库格式具有权威性;kObsidian 尊重该格式,不会迁移它。
许可证
MIT — 详见 LICENSE。欢迎贡献;对于任何较大的改动,请先提交 issue。
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。