Skip to main content
Glama

obsidian-cli-mcp

一个MCP服务器,让Claude和其他MCP客户端通过官方Obsidian CLI(Obsidian 1.12+)完全控制正在运行的Obsidian仓库,并在正确性允许的情况下使用快速直接的文件系统读取。

姊妹项目:things-for-mac-mcp

有何不同?

大多数Obsidian MCP服务器要么与社区REST插件通信,要么直接读取仓库文件夹。前者需要安装并信任一个插件。后者在移动或重命名文件时会悄悄破坏wiki链接,因为只有Obsidian知道指向它的每个链接、别名和嵌入。

此服务器按能力路由每个操作:

典型的纯文件系统MCP

obsidian-cli-mcp

跨数千篇笔记的全文搜索

快速

快速(文件系统)

移动或重命名笔记

破坏每个入站链接

链接安全(Obsidian CLI)

反向链接、别名、未解析链接

猜测

Obsidian自身的解析器

Bases查询、模板变量

不可能

通过应用运行时求值

写入操作进入Obsidian的索引和文件恢复

iCloud已驱逐的文件

读取为空笔记

检测到并通过Obsidian读取

需要社区插件

有时

其架构与姊妹项目完全一致:

things-for-mac-mcp

obsidian-cli-mcp

快速读取

SQLite直接读取

文件系统直接读取

权威写入

AppleScript

Obsidian CLI

便捷创建

URL方案

Obsidian CLI

分割规则:批量读取走文件系统(需要吞吐量),任何涉及移动、重命名、删除或依赖链接解析与应用状态的操作走CLI(需要Obsidian的知识)。文件系统适配器在结构上不能修改仓库,它完全不导出写入功能。

要求

  • macOS、Windows或Linux桌面版,Obsidian 1.12或更高版本

  • 已启用Obsidian CLI:Obsidian → 设置 → 通用 → 命令行界面

  • Obsidian必须正在运行。 CLI是应用的客户端,不是独立二进制文件。仅限桌面,不支持移动端。

  • Node.js 18或更高版本

安装

git clone https://github.com/jabaho9523/obsidian-cli-mcp.git
cd obsidian-cli-mcp
npm install
npm run build

连接到MCP客户端

Claude(桌面版 / Code)

添加到 claude_desktop_config.json(Claude Desktop)或运行 claude mcp add(Claude Code):

{
  "mcpServers": {
    "obsidian": {
      "command": "/absolute/path/to/node",
      "args": ["/absolute/path/to/obsidian-cli-mcp/dist/index.js"],
      "env": {
        "OBSIDIAN_VAULT": "YourVaultName"
      }
    }
  }
}

使用 node 的绝对路径,不要只写单词。 GUI启动的应用不会继承你的shell PATH,因此 "command": "node" 在许多客户端中会静默失败。用 which node 找到你的路径。

如果你有多个仓库,设置 OBSIDIAN_VAULT 否则CLI默认针对最后聚焦的仓库,这对于自动写入来说非常糟糕。只有一个仓库时,服务器会在启动时自动固定它。

配置

变量

默认值

用途

OBSIDIAN_BIN

/usr/local/bin/obsidian

Obsidian CLI二进制文件的路径

OBSIDIAN_VAULT

如果只有一个仓库则自动固定

每个命令针对的仓库名称

OBSIDIAN_VAULT_PATH

通过CLI自动检测

文件系统适配器的仓库文件夹

OBSIDIAN_MCP_TIMEOUT

20000

每条命令的超时时间(毫秒)

OBSIDIAN_MCP_ALLOW_DANGEROUS

未设置

设置为 1 以解锁第3层命令

OBSIDIAN_MCP_READONLY

未设置

设置为 1 以拒绝所有修改工具

安全护栏

三个层级,在生成二进制文件之前强制执行:

  • 第1层,免费: 读取、搜索和增量写入(create_noteappend_noteappend_dailyset_propertyupdate_taskcapture)。

  • 第2层,需要在工具调用中设置 confirm: true delete_notemove_noterename_noteremove_propertyrun_obsidian_command,以及通过透传:history:restorepublish:*plugin:enable/disable/reloadtheme:*snippet:*syncsync:restorereloadtemplate:insertworkspace:save/delete。任何带有 overwritepermanent 标志的调用也会升级到第2层。

  • 第3层,除非服务器以 OBSIDIAN_MCP_ALLOW_DANGEROUS=1 运行,否则被阻止: evalrestartplugin:installplugin:uninstallplugins:restrictdevtoolsdev:cdpdev:debugdev:mobile,以及带有 permanent: truedelete_note

一个诚实的说明。第2层是防止意外调用的减速带,而非安全措施:调用模型可以自行设置 confirm: true。第3层是真正的边界,因为只有配置服务器环境的人才能解锁它。如果你将自主代理指向一个你关心的仓库,请使用 OBSIDIAN_MCP_READONLY=1 运行,这会在分派前拒绝所有修改命令,无论层级如何。

安全的移动和重命名

此项目中最重要的一条规则:文件永远不会通过文件系统移动、重命名或删除。 Obsidian在执行操作时会更新仓库中的每个wiki链接。单纯的 mv 不会。

之前,Projects/Roadmap.md 从三个笔记中被链接:

Weekly Review.md:   Progress on [[Roadmap]] is on track.
Team Notes.md:      See [[Roadmap#Q3]] for the plan.
Index.md:           - [[Roadmap|2026 roadmap]]

在使用 to: "Archive/2026 Roadmap.md" 执行 move_note 之后:

Weekly Review.md:   Progress on [[2026 Roadmap]] is on track.
Team Notes.md:      See [[2026 Roadmap#Q3]] for the plan.
Index.md:           - [[2026 Roadmap|2026 roadmap]]

所有三个链接都已更新,包括标题锚点和别名,因为Obsidian执行了移动。文件系统的移动会导致三个链接断裂且无错误提示。

为什么混合?性能原理

每次CLI调用都是通过正在运行的Obsidian应用进行一次完整的IPC往返。这虽然正确但较慢:通过 obsidian read 读取2000篇笔记需要2000次往返,需要几分钟的墙钟时间。从磁盘读取则是一次目录遍历,在任何SSD上都远低于1秒。

因此,批量读取(搜索、列表、标签和属性扫描、导出、摘要)走文件系统,CLI保留用于只有Obsidian才能回答的操作(链接、别名、Bases、模板、应用状态)以及所有写入操作。要比较你自己的仓库,可以将 search_notes 与透传 obsidian_cli 配合 ["search", "query=..."] 计时。

故障排除

"Obsidian未运行。" 最常见的失败原因。CLI需要应用打开并完全加载。启动Obsidian并重试。

"找不到Obsidian CLI二进制文件。" 在Obsidian设置 → 通用 → 命令行界面中启用CLI,或者将 OBSIDIAN_BIN 指向该二进制文件。

第一条命令超时。 冷启动Obsidian可能超过默认的20秒。提高 OBSIDIAN_MCP_TIMEOUT

笔记读取为缺失,或服务器频繁回退到CLI。 如果你的仓库位于iCloud且开启了“优化Mac存储”,已驱逐的文件仅作为 .name.icloud 存根存在。服务器会检测到这些文件,并通过Obsidian读取它们(这会重新下载),而不是报告空笔记。批量扫描会跳过已驱逐的文件,并在输出中说明。

写入操作进入错误的仓库。 你有多个仓库且未设置 OBSIDIAN_VAULT。服务器会在启动时在stderr上对此发出警告。固定一个。

工具未在客户端中出现。 检查客户端的MCP日志,并检查上述的绝对node路径问题。

保持更新

git pull && npm install && npm run build

服务器在启动时检查更新,最多每24小时一次,将结果缓存在 ~/.config/obsidian-cli-mcp/update-check.json。离线时静默失败,并在存在更新版本时打印一行stderr信息。

工具(共39个)

读取工具(18个)

工具

适配器

描述

read_note

文件系统,回退到CLI

通过 wiki链接样式的名称或确切路径读取笔记

search_notes

文件系统

全文搜索,支持文件夹、大小写、上下文和限制选项

list_notes

文件系统

列出文件,按文件夹和扩展名过滤

list_folders

文件系统

列出文件夹

get_note_info

CLI

路径、大小、创建和修改日期

get_outline

文件系统

标题树,带行号

get_backlinks

CLI

入站链接,由Obsidian解析

get_outgoing_links

CLI

出站链接

get_tags

文件系统

所有标签及其计数,包括frontmatter和内联标签

get_properties

文件系统

整个仓库的frontmatter键及其计数

read_property

文件系统

单篇笔记上的一个frontmatter键

get_vault_info

CLI

仓库名称、路径、统计信息

get_recents

CLI

最近打开的文件

list_bases

CLI

所有.base文件

query_base

CLI

运行Bases视图查询,由应用求值

list_templates

CLI

配置文件夹中的模板

read_template

CLI

模板内容,可选包含已解析的变量

get_word_count

文件系统

单词和字符数,排除frontmatter

写入工具(16个)

所有写入操作都通过CLI进行。每个都需要显式的 filepath 目标,都不允许回退到当前活动文件。

工具

防护等级

描述

create_note

1, 2 带 overwrite

创建笔记,可选从模板创建

append_note

1

追加内容

prepend_note

1

在 frontmatter 后前置内容

read_daily

1

读取今日日记

append_daily

1

追加到今日日记

prepend_daily

1

前置到今日日记

get_daily_path

1

今日日记的路径

set_property

1

设置 frontmatter 属性

remove_property

2

移除 frontmatter 属性

move_note

2

链接安全的移动

rename_note

2

链接安全的重命名

delete_note

2, 3 带 permanent

删除到回收站,或永久删除

list_tasks

1

列出带有引用的 Markdown 任务

update_task

1

通过引用或行号切换或设置任务状态

open_note

1

在 Obsidian UI 中打开,仅导航

run_obsidian_command

2 执行

列出或运行命令面板命令,包括插件命令

run_obsidian_command 是服务器中最宽的门:它能访问所有命令面板操作,包括社区插件注册的。它被有意暴露,并在等级 2 进行防护。

工作流工具 (4)

工具

描述

capture

带时间戳追加到今日日记,实践中最高频的操作

daily_digest

将日期范围内的日记汇总到一个文档

export_notes

将文件夹导出为 JSON、Markdown 或 CSV,内联或导出到 vault 外的文件

vault_health

孤页、死链、未解析链接和空笔记的单一报告。有意限定在链接图范围内

逃生舱 (1)

工具

描述

obsidian_cli

运行任何 CLI 命令。接受 args 作为预分割的字符串数组,绝不是 shell 字符串,因此服务器无 shell 启动,内容无法突破引号。所有防护等级均适用。

MCP 资源

客户端对资源的支持各不相同,Claude Desktop 目前不展示它们。

资源

内容

obsidian://vault

Vault 信息

obsidian://daily

今日日记

obsidian://tags

所有标签及其计数

obsidian://recents

最近打开的文件

obsidian://orphans

没有入链的笔记

obsidian://note/{path}

通过 vault 相对路径访问的笔记

MCP 提示

提示

目的

daily_note_review

总结日记,展示未完成任务,建议后续行动

vault_cleanup

浏览 vault 健康报告并提出链接安全的修复方案

note_from_source

将粘贴的材料使用现有模板转换为笔记

weekly_digest

将一周的日记汇总为摘要笔记

架构

src/
├── index.ts              MCP server entry, stdio transport
├── config.ts             Environment configuration
├── adapters/
│   ├── cli.ts            execFile wrapper, vault injection, error contract
│   └── filesystem.ts     Read-only vault access, iCloud stub detection
├── tools/
│   ├── common.ts         Shared note loading with CLI fallback
│   ├── read.ts           18 read tools
│   ├── write.ts          16 write tools
│   ├── workflow.ts       4 composite tools
│   └── passthrough.ts    obsidian_cli escape hatch
├── resources/
│   └── vault.ts          MCP resources
├── prompts/
│   └── workflows.ts      MCP prompts
└── utils/
    ├── guardrails.ts     Tier policy, readonly allowlist
    ├── markdown.ts       Frontmatter, headings, tags, word counts
    ├── output.ts         Truncation at 60,000 characters
    └── update-check.ts   Daily update check

测试针对一个存根二进制文件运行,该文件扫描其完整 argv,并可被指示失败、挂起或输出过大内容,因此整个测试套件在未安装 Obsidian 的情况下也能通过:

npm test

支持

问题和功能请求:GitHub issues

作者的其他作品

许可证

MIT

-
license - not tested
-
quality - not tested
B
maintenance

Maintenance

Maintainers
Response time
Release cycle
Releases (12mo)
Commit activity

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

  • Read and write your Fresh Jots notes from Claude, Cursor, and any MCP client.

  • Search and reason over your Obsidian-style Markdown vault, right from ChatGPT.

  • Search, read, and write your Apple Notes from ChatGPT/Claude via a local Mac agent + MCP relay.

View all MCP Connectors

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/jabaho9523/obsidian-cli-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server