mcpField
O
Obsidian MCP Server

Obsidian MCP Server

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

关于 Obsidian MCP Server

Obsidian MCP 是一个本地 MCP 服务,允许助手读写用户明确配置的 Obsidian 库。它直接处理 Markdown 文件,无需打开 Obsidian,并以安全校验和冲突检测为设计重点。

主要功能

  1. 01按 vault id 显式配置可访问的库
  2. 02读取、创建、编辑、移动和删除笔记
  3. 03基于 etag 的并发冲突检测
  4. 04搜索内容、文件名和标签
  5. 05垃圾箱与事务快照恢复机制

适用场景

  1. 01让助手按需读取和整理本地 Obsidian 笔记
  2. 02批量添加、移除或重命名标签
  3. 03移动笔记时更新无歧义的反向链接

MCP 相关

该项目是 MCP 服务,向 MCP 客户端提供 obsidian_read_note、obsidian_edit_note、obsidian_search_vault 等工具。通过 stdio 启动,要求 Node.js 22 或更高版本。

配置

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

mcp.json · 通用配置
{
"mcpServers": {
"obsidian": {
"command": "npx",
"args": [
"-y",
"obsidian-mcp"
]
}
}
}
启动命令npx -y obsidian-mcp

本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。

安装包
npmobsidian-mcp

工具

还没有获取到工具列表

本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。

详细介绍

Obsidian MCP

一个本地 Model Context Protocol 服务,让兼容 MCP 的助手能够安全地读取和修改明确配置的 Obsidian 库。

版本 2 默认同时支持 MCP 2026-07-28 和 2025 年代的客户端,并要求 Node.js 22 或更高版本。它直接处理 Markdown 文件,因此无需打开 Obsidian。旧版协议和 v1 位置参数路径兼容性已弃用,并会将精确的迁移说明打印到 stderr。

重要

MCP 客户端可以调用具有破坏性的工具。请备份重要库,仔细查看客户端的权限提示,并在并发编辑笔记时使用修订版本前置条件。

快速开始

需要 Node.js 22 或更高版本:

node --version # v22 or newer

使用 npx 运行,无需全局安装软件包。固定主版本可获取兼容的 2.x 更新,而不会自动升级到未来的主版本:

npx -y obsidian-mcp@2 serve --vault notes=/absolute/path/to/vault

配置 MCP 客户端,通过 stdio 启动相同的命令:

{
  "mcpServers": {
    "obsidian": {
      "command": "npx",
      "args": ["-y", "obsidian-mcp@2", "serve", "--vault", "notes=/absolute/path/to/vault"]
    }
  }
}

或者,全局安装软件包,并使用 "command": "obsidian-mcp",参数与之前相同,从 "serve" 开始:

npm install -g obsidian-mcp@2

每个库都必须已包含 .obsidian 目录,并且必须使用绝对路径进行配置。

两个协议时代的客户端都通过相同的工具定义提供服务。确认 MCP 客户端协商使用 2026-07-28 后,可通过在 args 中添加 "--legacy", "reject",选择仅支持现代协议的模式。

库 ID 使用小写字母、数字、_ 和 -,必须以字母开头,助手会将其作为传递给工具的值。最多可配置十个库。重复使用 --vault 可公开多个库:

obsidian-mcp serve \
  --vault work=/Users/me/Documents/WorkVault \
  --vault personal=/Users/me/Documents/PersonalVault

允许使用网络、可移动、隐藏和同步位置,因为显式指定 --vault 即视为授权;所有位置均适用相同的路径包含性保护。

设计原则

  • 在进程启动时明确列出允许访问的库。
  • 所有工具路径均相对于库目录,经过路径段检查,并禁止访问符号链接和保留状态。
  • 文件变更会写入日志、进行冲突检查、以原子方式替换,并作为一个事务回滚。
  • 服务绝不会监听网络接口,也不会发送遥测数据。
  • stdout 专用于 MCP 消息;结构化诊断信息会发送到 stderr。
  • 结果大小受限,适当时支持分页,并同时提供文本和结构化内容。

工具

工具用途
obsidian_list_vaults列出已配置的 vault ID,不暴露主机路径。
obsidian_read_note读取笔记的限定页面,并返回其 SHA-256 etag。
obsidian_create_note以原子方式创建笔记,不覆盖现有内容。
obsidian_edit_note追加、前置或替换笔记的精确内容。
obsidian_delete_note将笔记移至 MCP 回收站,或在明确确认后永久删除。
obsidian_move_note移动或重命名笔记,并以事务方式更新明确无歧义的反向链接。
obsidian_create_directory以事务方式在 vault 中创建目录。
obsidian_search_vault使用带游标的分页搜索内容、文件名或标签。
obsidian_add_tags以原子方式为一个或多个笔记添加标签。
obsidian_remove_tags以原子方式移除精确匹配、嵌套或通配符选中的标签。
obsidian_rename_tag以原子方式重命名整个 vault 中的标签。
obsidian_manage_tags使用相同实现的统一标签添加/移除工作流。

所有架构都是根据 Zod 生成的严格 JSON Schema 2020-12 契约。变更操作的结果包含事务 ID;工具失败时会返回 isError: true 以及可执行的错误代码。

读取与并发

obsidian_read_note 会返回 etag。在需要避免更新丢失时,将其作为 if_match 传给编辑、移动或删除操作。批量标签操作接受 expected_etags 映射。笔记已更改时会返回 REVISION_CONFLICT,而不会覆盖笔记。

较大的笔记会使用与路径和 etag 绑定的不透明游标进行分页。搜索使用与查询和选项绑定的不透明游标。工具文本响应上限为 25,000 个字符。

删除与恢复

默认使用回收站。已删除笔记的字节内容和元数据会分别存储在 .obsidian-mcp/trash 下;元数据绝不会注入笔记。永久删除要求 confirm_path 与规范相对路径完全匹配。

事务和恢复快照存储在 .obsidian-mcp/transactions 中。已完成的数据会保留 30 天;默认情况下,超过 1 GiB 时会从最旧的数据开始清理:

obsidian-mcp serve --vault work=/path \
  --recovery-days 14 \
  --recovery-max-bytes 536870912

MCP 服务停止时,可检查或恢复已完成的事务:

obsidian-mcp recovery list --vault work=/path
obsidian-mcp recovery restore --vault work=/path --id <transaction-id>

如果所选事务之后内容已发生更改,恢复操作会拒绝覆盖。永久删除的快照会在提交后清除,无法恢复。

路径和文件系统安全

服务端会:

  • 规范化已配置的 vault 根目录,并拒绝重复或嵌套的根目录;
  • 拒绝绝对路径、UNC 路径、Windows 驱动器路径、NUL、反斜杠、空路径和点段工具路径;
  • 禁止工具访问 .obsidian、.obsidian-mcp、.git、.backup 和 .trash;
  • 检查现有目标,以及新目标最近的现有祖先;
  • 拒绝符号链接、联接和重解析点路径,并在扫描时跳过这些路径;
  • 不通过执行 shell 来验证文件系统;
  • 严格解码 UTF-8,不会静默替换无效字节。

进程需要对每个已配置的 vault 具有读写权限。obsidian-mcp doctor --vault id=/path 会验证启动就绪状态和恢复状态。

链接和标签行为

移动操作可识别 Obsidian Wikilinks、嵌入内容、Markdown 链接、别名、URL 编码的目标、标题和块锚点。只有在链接明确指向源笔记时才会重写;有歧义的链接会被报告并保持不变。除非请求 backlink_action: "mark_broken",否则删除操作会保留反向链接。

标签遵循 Obsidian 不区分大小写的规则,并支持 Unicode、表情符号、_、-、/ 和嵌套标签。Frontmatter 标签以 YAML 列表形式写入。行内标签处理会忽略围栏代码、行内代码和 HTML 注释。通配符使用有界匹配器,而非正则表达式。

开发

npm ci
npm run typecheck
npm test
npm run build
npm run ci

每个工具都在 src/tools/<tool>/index.ts 下有一个类型化定义;src/tools/index.ts 中的小型注册表负责应用共享的 MCP 注册和响应行为。文件系统、事务、Markdown、链接和搜索行为位于可复用的实用工具中。新增工具必须对每条路径使用 VaultFs,使用 TransactionManager 执行修改,并采用严格的输入/输出架构、结构化结果、注释以及安全/集成测试。

有关 1.x 迁移,请参阅 MIGRATING.md;有关漏洞报告,请参阅 SECURITY.md。

启动错误和兼容性警告只会写入 stderr,并包含稳定的代码、检测到的问题、确切的修复方法、验证步骤,以及指向对应迁移章节的链接。如果看不到服务,请在 MCP 客户端日志中查找代码,并使用诊断参考。

许可证

MIT

评论

支持 Markdown

第一次接触 MCP?

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

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