obsidian-cli-mcp
obsidian-cli-mcp
実行中のObsidianボールトを、公式のObsidian CLI(Obsidian 1.12以降)を介してClaudeや他のMCPクライアントから完全に制御できるMCPサーバーです。高速な直接ファイルシステム読み取りも、正確性が許す範囲で行います。
things-for-mac-mcp の仲間プロジェクトです。
他のMCPサーバーと何が違うのか?
ほとんどのObsidian MCPサーバーは、コミュニティ製のRESTプラグインと通信するか、ボールトフォルダーを直接読み取ります。前者はプラグインのインストールと信頼が必要です。後者は、ファイルを移動または名前変更した瞬間にウィキリンクを静かに壊します。なぜなら、そのファイルを指すすべてのリンク、エイリアス、埋め込みを知っているのは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を通じて行われます。ファイルシステムアダプターは構造的にボールトを変更できず、書き込み関数を一切エクスポートしません。
要件
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 buildMCPクライアントに接続する
Claude(デスクトップ/コード)
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で起動されたアプリはシェルのPATHを継承しないため、多くのクライアントで"command": "node"は静かに失敗します。which nodeで自分のパスを見つけてください。
複数のボールトがある場合はOBSIDIAN_VAULTを設定してください。 そうしないと、CLIは最後にフォーカスされたボールトをターゲットにしますが、これは自動化された書き込みには最悪の特性です。単一ボールトの場合、サーバーは起動時に自動的に固定します。
設定
変数 | デフォルト | 目的 |
|
| Obsidian CLIバイナリへのパス |
| ボールトが1つだけ存在する場合は自動固定 | すべてのコマンドがターゲットとするボールト名 |
| CLI経由で自動検出 | ファイルシステムアダプター用のボールトフォルダー |
|
| コマンドごとのタイムアウト(ミリ秒) |
| 未設定 |
|
| 未設定 |
|
ガードレール
バイナリが起動される前に強制される3つのティア:
ティア1、自由: 読み取り、検索、追加書き込み(
create_note、append_note、append_daily、set_property、update_task、capture)。ティア2、ツールコールで
confirm: trueが必要:delete_note、move_note、rename_note、remove_property、run_obsidian_command、およびパススルー経由:history:restore、publish:*、plugin:enable/disable/reload、theme:*、snippet:*、sync、sync:restore、reload、template:insert、workspace:save/delete。overwriteまたはpermanentフラグを持つ呼び出しもティア2に引き上げられます。ティア3、サーバーが
OBSIDIAN_MCP_ALLOW_DANGEROUS=1で実行されていない限りブロック:eval、restart、plugin:install、plugin:uninstall、plugins:restrict、devtools、dev:cdp、dev:debug、dev:mobile、およびpermanent: true付きのdelete_note。
これらが何であるかについて正直に述べておきます。ティア2は偶発的な呼び出しに対する速度バンプであり、セキュリティではありません。呼び出し元のモデルは自分でconfirm: trueを設定できます。ティア3は真の境界です。サーバー環境を設定する人だけがそれを解除できるからです。重要なボールトに自律エージェントを向ける場合は、OBSIDIAN_MCP_READONLY=1で実行してください。これは、ティアに関係なく、ディスパッチ前にすべての変更コマンドを拒否します。
リンクセーフな移動と名前変更
このプロジェクトで最も重要なルール:ファイルはファイルシステムを通じて移動、名前変更、削除されることはありません。 Obsidianは操作を実行するときにボールト内のすべてのウィキリンクを更新します。単純なmvではそれを行いません。
変更前:Projects/Roadmap.mdが3つのノートからリンクされている場合:
Weekly Review.md: Progress on [[Roadmap]] is on track.
Team Notes.md: See [[Roadmap#Q3]] for the plan.
Index.md: - [[Roadmap|2026 roadmap]]move_noteをto: "Archive/2026 Roadmap.md"で実行した後:
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]]3つのリンクすべてが、見出しアンカーとエイリアスを含めて更新されました。これはObsidianが移動を行ったためです。ファイルシステムでの移動では、3つのリンクが壊れ、エラーも発生しません。
なぜハイブリッドなのか?パフォーマンスの理論的根拠
CLI呼び出しはすべて、実行中のObsidianアプリを通じた1回の完全なIPCラウンドトリップです。これは正確ですが遅いです。obsidian readで2000のノートを読むことは2000回のラウンドトリップとなり、数分の壁時計時間がかかります。ディスクから読むことは1回のディレクトリウォークで、どんなSSDでも1秒未満です。
そのため、バルク読み取り(検索、リスト、タグとプロパティのスキャン、エクスポート、ダイジェスト)はファイルシステムにヒットし、CLIはObsidianだけが答えられるもの(リンク、エイリアス、Bases、テンプレート、アプリ状態)とすべての書き込みのために予約されています。自分のボールトで比較するには、パススルーobsidian_cliを["search", "query=..."]で使用してsearch_notesを時間測定してみてください。
トラブルシューティング
「Obsidianが実行されていません。」 最も一般的な失敗。CLIはアプリが開いて完全に読み込まれている必要があります。Obsidianを起動して再試行してください。
「Obsidian CLIバイナリが見つかりません。」 Obsidianの設定、一般、コマンドラインインターフェースでCLIを有効にするか、OBSIDIAN_BINでバイナリを指定してください。
最初のコマンドでタイムアウト。 コールドスタートのObsidianは20秒のデフォルトを超える可能性があります。OBSIDIAN_MCP_TIMEOUTを引き上げてください。
ノートが欠落していると読み取られる、またはサーバーが頻繁にCLIにフォールバックする。 ボールトがiCloudにあり「Macストレージを最適化」がオンの場合、退避されたファイルは.name.icloudスタブとしてのみ存在します。サーバーはこれらを検出し、空のノートを報告する代わりにObsidianを通じて読み取り、再ダウンロードします。バルクスキャンは退避されたファイルをスキップし、その出力でその旨を伝えます。
書き込みが間違ったボールトに届く。 複数のボールトがあり、OBSIDIAN_VAULTが設定されていません。サーバーは起動時にstderrでこれについて警告します。1つを固定してください。
ツールがクライアントに表示されない。 クライアントのMCPログを確認し、上記の絶対nodeパスの問題を確認してください。
最新情報の入手
git pull && npm install && npm run buildサーバーは起動時に更新を確認し、最大24時間に1回、結果を~/.config/obsidian-cli-mcp/update-check.jsonにキャッシュします。オフライン時は静かに失敗し、新しいバージョンが存在する場合はstderrに1行出力します。
ツール(全39)
読み取りツール(18)
ツール | アダプター | 説明 |
| ファイルシステム、CLIフォールバック | ウィキリンク形式の名前または正確なパスでノートを読む |
| ファイルシステム | フォルダー、大文字小文字、コンテキスト、制限オプション付きの全文検索 |
| ファイルシステム | フォルダーと拡張子でフィルタリングされたファイルのリスト |
| ファイルシステム | フォルダーのリスト |
| CLI | パス、サイズ、作成日、更新日 |
| ファイルシステム | 行番号付きの見出しツリー |
| CLI | Obsidianによって解決された受信リンク |
| CLI | 送信リンク |
| ファイルシステム | カウント付きのすべてのタグ、フロントマターとインライン |
| ファイルシステム | ボールト全体のフロントマターキーとカウント |
| ファイルシステム | 1つのノートの1つのフロントマターキー |
| CLI | ボールト名、パス、統計 |
| CLI | 最近開いたファイル |
| CLI | すべての.baseファイル |
| CLI | Basesビュークエリを実行、アプリによって評価 |
| CLI | 設定されたフォルダー内のテンプレート |
| CLI | テンプレート内容、オプションで変数を解決 |
| ファイルシステム | 単語数と文字数、フロントマターを除く |
書き込みツール(16)
すべての書き込みはCLIを通じて行われます。それぞれに明示的なfileまたはpathターゲットが必要で、現在アクティブなファイルにフォールスルーすることはありません。
ツール | ガード階層 | 説明 |
| 1, 2( | ノートを作成(テンプレートからも可能) |
| 1 | コンテンツを追加 |
| 1 | フロントマターの後にコンテンツを先頭追加 |
| 1 | 今日のデイリーノートを読む |
| 1 | 今日のデイリーノートに追加 |
| 1 | 今日のデイリーノートに先頭追加 |
| 1 | 今日のデイリーノートのパス |
| 1 | フロントマターのプロパティを設定 |
| 2 | フロントマターのプロパティを削除 |
| 2 | リンクセーフな移動 |
| 2 | リンクセーフな名前変更 |
| 2, 3( | ゴミ箱に移動、または完全に削除 |
| 1 | 参照付きでマークダウンタスクを一覧表示 |
| 1 | 参照または行番号でタスクの状態を切り替えまたは設定 |
| 1 | Obsidian UIで開く(ナビゲーションのみ) |
| 2(実行時) | コマンドパレットのコマンド(プラグインコマンドを含む)を一覧表示または実行 |
run_obsidian_command はサーバーの中で最も広い扉です。コミュニティプラグインが登録したものを含む、すべてのコマンドパレットアクションに到達します。意図的に公開されており、階層2で制限されています。
ワークフローツール(4)
ツール | 説明 |
| タイムスタンプ付きで今日のデイリーノートに追加。実践上最も頻度の高い操作 |
| 指定された日付範囲のデイリーノートを1つのドキュメントに集約 |
| フォルダをJSON、Markdown、またはCSVとしてエクスポート。インラインまたは保管庫外のファイルに出力 |
| 孤立ノート、行き止まり、未解決リンク、空のノートを1つのレポートにまとめる。リンクグラフに意図的に範囲を限定 |
エスケープハッチ(1)
ツール | 説明 |
| 任意のCLIコマンドを実行します。 |
MCPリソース
リソースのクライアントサポートはさまざまで、Claude Desktopは現在これらを表示しません。
リソース | コンテンツ |
| 保管庫情報 |
| 今日のデイリーノート |
| カウント付きのすべてのタグ |
| 最近開いたファイル |
| インバウンドリンクのないノート |
| 保管庫相対パスによる任意のノート |
MCPプロンプト
プロンプト | 目的 |
| デイリーノートを要約し、未完了タスクを表示し、フォローアップを提案 |
| 保管庫ヘルスレポートを確認し、リンクセーフな修正を提案 |
| 貼り付けた素材を既存のテンプレートを使ってノートに変換 |
| 1週間のデイリーノートをダイジェストノートに要約 |
アーキテクチャ
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。
作者のその他の作品
things-for-mac-mcp、Things 3用の姉妹MCPサーバー
ライセンス
MIT
This server cannot be installed
Maintenance
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.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
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