mcpField
K
Kobsidian

Kobsidian

本地服务
github.com记忆与知识87 周前更新

关于 Kobsidian

Kobsidian 是面向 Obsidian 用户的文件系统优先型 MCP 服务,适合借助 LLM 管理笔记与来源资料。它结合笔记和 Vault 工具与 LLM-Wiki 工作流,并支持会话内切换多个 Vault 及可选的 REST 操作。

主要功能

  1. 01以文件系统为先的 Vault 和笔记操作
  2. 02覆盖 Vault 内容的 66 个类型化 MCP 工具
  3. 03按会话切换多个 Vault
  4. 04LLM-Wiki 来源导入与索引维护
  5. 05检查孤立、损坏链接和过期页面
  6. 06支持 stdio 与 Streamable HTTP

适用场景

  1. 01无需启动 Obsidian 即可管理笔记
  2. 02在 MCP 会话中切换不同 Vault
  3. 03根据整理的来源构建并维护 Wiki
  4. 04通过 REST API 使用工作区或实时 Dataview 工具

MCP 相关

它向 MCP 客户端提供 Obsidian Vault、笔记、链接、标签、任务和 LLM-Wiki 操作工具。支持本地 stdio 和 Streamable HTTP;部分工作区及实时查询工具使用 Obsidian Local REST API。

配置

本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。

mcp.json · 通用配置
{
"mcpServers": {
"kObsidian": {
"command": "npx",
"args": [
"-y",
"kobsidian-mcp"
],
"env": {
"OBSIDIAN_VAULT_PATH": "<OBSIDIAN_VAULT_PATH>",
"OBSIDIAN_API_URL": "<OBSIDIAN_API_URL>",
"OBSIDIAN_API_VERIFY_TLS": "<OBSIDIAN_API_VERIFY_TLS>",
"OBSIDIAN_REST_API_KEY": "<OBSIDIAN_REST_API_KEY>"
}
}
}
}
启动命令npx -y kobsidian-mcp
需要配置的环境变量
OBSIDIAN_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+)。各客户端的配置文件位置不同,请参考客户端文档。

安装包
npmkobsidian-mcp0.2.1

工具

66

收录的工具列表 · 更新于 3 周前

参数类型必填说明
refreshboolean否为 true 时,即使缓存未过期,也强制重新扫描文件系统和 obsidian.json。默认值为 false。

详细介绍

kObsidian MCP

以文件系统为先的 Obsidian 库 MCP 服务——并附带 LLM Wiki 层。

灵感来自 Andrej Karpathy 的 LLM Wiki 理念。 由你整理来源;LLM 负责记录整理。


npm version npm downloads GitHub release license Release CI

MCP Bun TypeScript Tools Resources Prompts Smithery MCP Registry VirusTotal


安装 · 快速开始 · 架构 · LLM Wiki · 工具 · 文档

文档:简体中文 / 日本語 / 한국어

kObsidian MCP server


🧰 唯一支持工作区的 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_URLLocal REST API 插件的基础 URL。默认为 https://127.0.0.1:27124。
OBSIDIAN_API_VERIFY_TLS可选。 默认为 false(REST API 插件在 127.0.0.1 上使用自签名证书)。仅在操作系统钥匙串中信任该证书后才设为 true。
OBSIDIAN_REST_API_KEYLocal 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 启用一次:

  1. 在 Obsidian 中打开你的 vault。
  2. 设置(⚙️,左下角)→ 社区插件。
  3. 点击 启用社区插件。
  4. 浏览 → 搜索 → 安装 → 启用。
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")

安装后的设置:

  1. 启用插件。
  2. 打开插件设置——滚动到 API key → 点击 复制(如需生成新密钥,可先点击 重置)。
  3. 将密钥粘贴为 MCP 客户端配置 env: 块中的 OBSIDIAN_REST_API_KEY。默认的 OBSIDIAN_API_URL(https://127.0.0.1:27124)开箱即用。

使用 REST 桥接工具时,请保持插件运行——该端点仅限本地访问(127.0.0.1),因此不会有任何内容离开你的计算机。

可增强特定工具命名空间(但并非必需)
插件链接可解锁的功能
Dataviewid=dataview所有 dataview.* 工具仍可处理原始 Markdown;Dataview 插件可实际执行 dataview.query* 中的 DQL 查询。它还会在 Obsidian 中直观呈现字段和查询。
Templaterid=templater-obsidian通过 REST API 在运行时渲染模板(templates.use,engine:"templater")。离线文件系统引擎(templates.use,engine:"filesystem")和 templates.list 无需此插件。
Marpid=marp-slides即使没有此插件,Marp marp.* 工具也能解析并编辑 Marp front matter Markdown;该插件可在 Obsidian 中渲染幻灯片 / 导出为 PDF。
Kanbanid=obsidian-kanban无论是否安装此插件,kanban.* 工具都能读写纯 Markdown 看板格式;该插件可在 Obsidian 中将看板呈现为可拖动的列。
Tasksid=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.*4list · current · select · reset — 多知识库发现和会话切换(v0.3.0)
notes.*8read(通过 include 读取内容/元数据/统计数据)· create(笔记或文件夹)· edit(替换/追加/前置/标题后/区块后)· frontmatter · delete · move · list · search
tags.*4modify(添加/移除/替换/合并)· search · analyze · list
links.*8反向链接 · 出站链接 · 失效链接 · 孤立笔记 · 枢纽 · 图谱 · 健康状况 · 连接
stats.*1stats.vault(每篇笔记的统计数据已移至 notes.read)
tasks.*5Tasks 插件格式(📅 ⏳ 🛫 ✅ 🔼 🔁)— 搜索 · 创建 · 切换 · updateMetadata · 统计数据
dataview.*7query + 便捷封装(listByTag/listByFolder/table)· index · fields.read · fields.write
blocks.*3统一的围栏代码块 API(list/read/update),适用于 dataview、dataviewjs、mermaid
marp.*2read(演示文稿/幻灯片/单页)· update(幻灯片/frontmatter)
kanban.*3parse · stats · card(添加/移动/切换)
canvas.*4create · parse · connections · edit(添加节点/添加边/移除节点)
templates.*2list · use(引擎 × 操作)
workspace.*5Obsidian 实时 UI 桥接(需要 Local REST API 插件)
commands.*2list(可选查询)· execute
wiki.*7初始化 · 导入 · 记录 · 重建索引 · 查询 · lint · 合并摘要
system.*1version

客户端安全性标注(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_URLhttps://127.0.0.1:27124Obsidian Local REST API 基础地址;仅用于 workspace.* / commands.* / dataview.query*。
OBSIDIAN_API_VERIFY_TLSfalse如果已信任 REST API 的自签名证书,请设为 true。
OBSIDIAN_REST_API_KEY—REST API 插件的 Bearer 密钥(如果使用)。
KOBSIDIAN_HTTP_HOST127.0.0.1dev:http 的绑定主机。
KOBSIDIAN_HTTP_PORT3000dev:http 的绑定端口。
KOBSIDIAN_HTTP_BEARER_TOKEN—Streamable HTTP 传输的可选 Bearer 令牌。
KOBSIDIAN_ALLOWED_ORIGINShttp://localhost,http://127.0.0.1以逗号分隔的 CORS 允许列表。
KOBSIDIAN_WIKI_ROOTwiki知识库中的 Wiki 目录。
KOBSIDIAN_WIKI_SOURCES_DIRSources每个来源的摘要页面。
KOBSIDIAN_WIKI_CONCEPTS_DIRConcepts主题 / 想法页面。
KOBSIDIAN_WIKI_ENTITIES_DIREntities人物 / 地点 / 组织 / 作品。
KOBSIDIAN_WIKI_INDEX_FILEindex.mdWiki 目录文件名。
KOBSIDIAN_WIKI_LOG_FILElog.mdWiki 日志文件名。
KOBSIDIAN_WIKI_SCHEMA_FILEwiki-schema.md初始架构文件名。
KOBSIDIAN_WIKI_STALE_DAYS180wiki.lint 的过时页面阈值。
KOBSIDIAN_WIKI_INDEX_SOURCES_HEADINGSourcesindex.md 中列出来源的部分;wiki.ingest 会在此部分下添加新条目。
KOBSIDIAN_WIKI_INDEX_CONCEPTS_HEADINGConceptsindex.md 中列出概念的部分。
KOBSIDIAN_WIKI_INDEX_ENTITIES_HEADINGEntitiesindex.md 中列出实体的部分。
KOBSIDIAN_WIKI_CONCEPT_PAGE_HEADINGDiscussion概念页面中用于放置 wiki.ingest 引文 / wiki.summaryMerge 部分的标题。
KOBSIDIAN_WIKI_ENTITY_PAGE_HEADINGNotable 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.mdLLM-Wiki 约定、循环、frontmatter、lint 类别
examples.md个人研究 Wiki · 工程 ADR · 代码库 Wiki——端到端示例
tools.md命名空间表、注释、资源、提示词
SECURITY.md来源 / CORS、VirusTotal 扫描、环境变量规范
TESTING.mdbun 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 / fenced dataviewjs 代码块。运行时 DQL 会通过 Local REST API 委托给 Obsidian + Dataview。 DataviewJS 会保留源代码,但不会在此服务中执行。
  • Mermaid + Marp — 仅解析和编辑,并保留源代码;渲染由客户端负责。
  • SDK 最低版本 — @modelcontextprotocol/sdk@^1.26.0(缓解 GHSA-345p-7cg4-v4c7 跨客户端响应泄漏 + CVE-2026-0621 UriTemplate ReDoS 风险)。本仓库固定使用 1.30.0。

致谢

许可证

MIT — 详见 LICENSE。欢迎贡献;对于任何较大的改动,请先提交 issue。

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。