obsidian について
Obsidian の保管庫操作向けスキルです。ノート操作には MCP、アプリのコンテキストが必要な作業には CLI、Git 同期には定められた安全手順を使い分けます。
主な機能
- 01作業内容に応じて MCP、CLI、Git を選択
- 02ノート移動後の明示的なバックリンク修復
- 03ノート検索、書き込み、タグ操作の指針
- 04Git 同期の事前確認と安全手順
- 05エラー処理と復旧のガイダンス
活用シーン
- 01Obsidian ノートの検索、編集、整理
- 02ノート名変更とリンク修復の確認
- 03Obsidian でノートを開く、プラグインを実行
- 04Git による保管庫のバックアップや同期
MCP 対応
ノートの読み取り、書き込み、検索、タグ、メタデータ更新には MCP を標準で使用します。ノートの移動や名前変更の後は、バックリンクを別途修復して確認します。
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ bitbonsai/ mcpvault --skill obsidianインストール後、Claude Code で/obsidianを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
resources/git-sync.mdobsidian-conventions.mdtool-patterns.md詳細
Obsidian スキル
ルーティングポリシー
ユーザーの意図に最も合ったバックエンドを使用します。
-
MCP(ボルトデータの操作ではデフォルト)
- ノートの読み取り/書き込み/パッチ/検索
move_noteでノートを移動/名前変更し、その後、バックリンクを明示的に修復- フロントマターとタグの更新
- メタデータとノートの一括操作
-
Obsidian CLI/アプリのコンテキスト(アプリのコンテキストが必要な場合のみ)
- URI から Obsidian でノートを開く
- MCP では実行できないアプリ/プラグインのワークフローを起動する
-
CLI git(同期/バックアップのワークフロー)
- リポジトリの初期化、リモートの設定、コミット、プル、プッシュ
- 定期的または手動でのボルトのバックアップ/同期の依頼
依頼の内容が曖昧な場合、ユーザーが同期/バックアップ/git/アプリの操作を明示的に求めていない限り、まず MCP を選択します。
安全なノートの名前変更ワークフロー
Obsidian が起動している場合も含め、ノートを移動または名前変更するたびに MCP の move_note を使用します。Obsidian CLI の move コマンドを自動的に実行しないでください。リンクの書き換えが遅れて実行されると、移動の開始後に編集されたノートに古いバイトオフセットが適用され、無関係な内容が気付かれないまま破損するおそれがあります(#176)。上流の修正が独立して再テストされた後にのみ、CLI による移動を再検討してください。
バックリンクの保持は、明示的かつ検証可能な2つ目の手順です。
- 移動前に、ボルトからの相対パスと、拡張子を除いたファイル名の両方を使って、古い wikilink のリンク先を検索します。Obsidian が起動している場合、読み取り専用の
backlinksコマンドで検索を補完できますが、MCP による検索の代わりにはなりません。 - MCP の
move_noteでノートを移動します。 - 参照元の各ノートを読み込み、埋め込みやエイリアスまたはフラグメント付きのリンクを含め、完全一致する wikilink のリンク先のみをパッチします。リンク先を変更する際は、表示テキスト(
|alias)と#heading/#^block-idの接尾辞を保持します。 - 古いパスとベース名を再度検索します。残っている参照があれば、成功したと主張せずに報告します。
search_notesが返す結果は最大20件です。検索結果が上限に達した場合、または古いベース名が曖昧な場合は、バックリンクを漏れなく修復できたことを証明できないとユーザーに伝え、より広範なスキャンを続ける前に確認を求めます。
移動とバックリンクの修復は別々に報告します。移動したノート、変更した参照元ノートの数、残っている古い参照を伝えてください。
注意点
-
patch_note はデフォルトで複数一致を拒否します。
replaceAll: falseの場合、oldStringが複数回出現すると呼び出しは失敗し、matchCountが返されます。意図している場合に限りreplaceAll: trueを設定するか、前後の文脈を加えて一致箇所を一意にしてください。 -
patch_note はフロントマター内も検索します。 置換は YAML ブロックを含むファイル全体に対して実行されます。
title:のような一般的な文字列はフロントマターのフィールドに一致します。対象の箇所を指定できるよう、十分な文脈を含めてください。 -
patch_note では空文字列を使用できません。
oldStringとnewStringはどちらも空ではなく、空白文字のみでもない必要があります。テキストを削除するには、newStringに半角スペースを 1 つ指定するか、write_noteでノートを再構成してください。 -
search_notes は最小化された JSON を返します。 フィールド名は短縮されています。
p(パス)、t(タイトル)、ex(抜粋)、mc(一致数)、ln(行番号)、uri(obsidianUri)です。limitの値にかかわらず、結果は最大 20 件です。 -
search_notes の複数語クエリは、各語とフレーズの両方でスコアを付けます。 各語は OR 条件で照合されるため、いずれかの語に一致するドキュメントが結果に表示されます。フレーズ全体には追加のスコアが付与されます。
-
write_note はディレクトリを自動作成します。 親フォルダーは再帰的に作成されます。
append/prependモードでは、ノートが存在しない場合に作成されます。フロントマターはappend/prependではマージされ(新しいキーが優先)、overwriteでは全体が置き換えられます。 -
delete_note ではパスの完全一致による確認が必要です。
confirmPathはpathと文字単位で完全に一致する必要があります。正規化は行われず、末尾のスラッシュも許容されません。一致しない場合、success: falseで暗黙的に失敗します。 -
move_file では二重の確認が必要です。
confirmOldPathとconfirmNewPathは、対応するパスと完全に一致する必要があります。Markdown ファイルの名前変更には、テキストを考慮し確認が不要なmove_noteを使用してください。move_fileはバイナリファイルの場合、またはバイナリセーフな移動が必要な場合にのみ使用してください。 -
manage_tags は 2 つのソースを読み取りますが、書き込み先は 1 つです。
listはフロントマターのタグとインラインの#hashtagsを統合します。add/removeはフロントマターのtags配列のみを変更します。インラインタグは変更されません。 -
read_multiple_notes は失敗を拒否しません。 内部で
allSettledを使用します。失敗したファイルはerr配列に、成功したファイルはok配列に含まれます。必ず両方を確認してください。1 回の呼び出しで指定できるパスは最大 10 件です。
エラーからの復旧
| エラー | 次の手順 |
|---|---|
| patch_note "Found N occurrences" | oldString に前後の行を加えて一致箇所を一意にするか、replaceAll: true を設定します |
| delete_note / move_file の確認不一致 | read_note または list_directory でノートのパスを再確認してから、完全一致する文字列で再試行します |
| search_notes が 0 件を返す | フレーズではなく単一のキーワードを試すか、searchFrontmatter を切り替えるか、部分語句を使って検索範囲を広げます |
read_multiple_notes の err が一部のみ | list_directory で失敗したパスを確認し、誤字や拡張子の欠落を修正して、失敗したものだけ再試行します |
Git 同期モード
ユーザーが「sync」「backup」または「vault を git で保存」と依頼した場合は、次の動作で CLI git を使用します。
-
変更を加える前に、事前確認を実行します:
gitが利用可能であること- 現在のディレクトリが git リポジトリであること(または初期化を提案すること)
git config user.nameとgit config user.emailが設定されていること- push/pull 同期用のリモートが少なくとも 1 つ存在すること
-
事前確認が完了していない場合は、推奨されるデフォルトを添えて、対象を絞った質問を 1 つだけします。
- 動作を大きく変える判断には askuserquestion を使用します。
- 適切な例:
- 「git リポジトリが見つかりません。この vault で初期化しますか?(推奨:はい)」
- 「リモートが設定されていません。利用可能な場合は gh で GitHub リモートを設定しますか?それともリモート URL を指定しますか?(推奨:gh で設定)」
- 「ローカルとリモートで履歴が分岐しています。今すぐ
git pull --rebaseを試しますか?(推奨:はい)」
-
安全な同期手順(デフォルトでは force push を行いません):
git add -Agit commit -m "vault sync: YYYY-MM-DD HH:mm"(変更がなければコミットをスキップ)git pull --rebasegit push
-
ghは任意です:- 要求された場合に限り、リモートの初期設定(リポジトリの作成/origin の設定)に
ghを使用します。 - リモートの設定後、通常の同期に
ghは必要ありません。
- 要求された場合に限り、リモートの初期設定(リポジトリの作成/origin の設定)に
-
競合が発生した場合は停止し、次に行うべきことを明確に伝えます。
- マージの競合を黙って自動解決しないでください。
- 何が失敗したのか、ユーザーが次に実行すべき内容を説明します。
Obsidian CLI モード
ユーザーからアプリのコンテキストを伴う操作(アクティブファイル、エディターで開く、テンプレートを使ったデイリーノート、バックリンク)を依頼された場合は、シェルコマンドから Obsidian CLI を直接使用します。
-
CLI を初めて使用する前に事前確認を実行します:
-
次の候補のうち、最初に見つかったものを CLI バイナリとして解決します:
優先度 macOS Linux Windows 1 obsidian(PATH)obsidian(PATH)obsidian.exeまたはObsidian.com(PATH)2 /Applications/Obsidian.app/Contents/MacOS/obsidian-cli— — 3 /Applications/Obsidian.app/Contents/MacOS/Obsidian— — Obsidian 1.12.7+ のインストーラーには、専用の
obsidian-cliバイナリが同梱されています(従来の Electron ベース CLI より約 10 倍高速で、1 回の呼び出しあたり約 25 ms 対約 250 ms です)。macOS では、1.12.7+ のインストーラーをインストールした後、設定 > 一般 > 詳細設定で CLI を無効にしてから再度有効にし、PATH 登録を更新します。これにより、古い~/.zprofileの PATH エントリーが、obsidian-cliを指す/usr/local/bin/obsidianシンボリックリンクに置き換わります。Linux では、PATH 登録によって
/usr/local/bin/obsidian(またはフォールバックとして~/.local/bin/obsidian)にシンボリックリンクが作成されます。Windows では、インストーラーによってObsidian.comターミナルリダイレクターがObsidian.exeと同じ場所に配置されます。注: 優先度テーブルと古い PATH の確認は、macOS でのみ検証されています。Linux と Windows でも 1.12.7+ のインストーラーに
obsidian-cliが同梱される可能性がありますが、確認されていません。Issue または PR での貢献を歓迎します。 -
古い PATH の確認(macOS): 優先度 1 で PATH 上の
obsidianが解決された場合、高速なバイナリを指しているか、低速な Electron ランチャーを指しているかを確認します:解決されたパス 意味 対応 /usr/local/bin/obsidian→obsidian-cli1.12.7 のシンボリックリンク登録 不要 — 高速なバイナリです /Applications/.../MacOS/obsidian古い ~/.zprofileエントリー(1.12.7 より前の登録、または再登録していない 1.12.7 インストーラー)バンドル内に obsidian-cliが存在するか確認しますobsidianが MacOS ディレクトリに解決され(/usr/local/binではなく)、かつ/Applications/Obsidian.app/Contents/MacOS/obsidian-cliが存在する場合は、ユーザーに次のように伝えます: 「Obsidian 1.12.7+ はインストールされていますが、PATH はまだ低速な Electron バイナリを指しています。Obsidian で、設定 > 一般 > 詳細設定に移動し、CLI を無効にしてから再度有効にして、PATH 登録を更新してください。」 一致した優先度の候補をそのまま使用して続行します。これは案内であり、処理を妨げるものではありません。 -
Obsidian が実行中であることを確認します:
pgrep -xiq obsidian(macOS/Linux)またはtasklist /FI "IMAGENAME eq Obsidian.exe" /NH(Windows) -
いずれかの確認に失敗した場合はユーザーに伝え、MCP ツールと
obsidian://URI にフォールバックします。
-
-
Vault の指定:
obsidian vault="VaultName" <command>。OBSIDIAN_VAULT_NAMEが設定されている場合は、その明示的な値を使用します。設定されていない場合はobsidian vaultsを実行し、MCP の Vault パスを登録済み Vault と照合して、登録名を使用します。一意に一致するものがない場合は、ユーザーに確認します。フォルダーのベース名から登録名を推測してはいけません。 -
主なコマンド:
# Read the currently active file obsidian read # Read a specific file obsidian read file="My Note" # Open a file in Obsidian obsidian open path="Notes/example.md" # Open today's daily note obsidian daily # Append to daily note obsidian daily:append content="- [ ] New task" # Search (Obsidian's own search, different from MCP's BM25) obsidian search query="meeting notes" limit=10 # List all tags with frequency obsidian tags sort=count counts # Get backlinks for a note obsidian backlinks file="My Note" # Find unresolved links obsidian unresolvedobsidian moveは使用せず、MCP のmove_noteと明示的なバックリンク修復による安全なノート名変更ワークフローに従います。 -
コマンドの全リファレンスは
obsidian helpを実行して確認します。CLI は Obsidian のリリースに伴って進化します。 -
CLI と MCP の使い分け:
- 読み取り/書き込み/検索/タグ/フロントマター、およびすべてのノートの移動/名前変更には MCP を使用します(サンドボックス化され、検証済みで、ヘッドレス環境でも動作します)。
- アクティブファイル、テンプレート展開を伴うデイリーノート、読み取り専用のバックリンク検出、エディターで開く操作、プラグインコマンドには CLI を使用します。
move_noteの実行後は、安全なノート名変更ワークフローに従ってバックリンクを明示的に修復し、確認します。- 判断に迷う場合は MCP を優先します。
リソース
必要な場合にのみ読み込み、呼び出しごとに読み込む必要はありません。
- ツールのパターン - ツールのレスポンス形式やモードの詳細、move_note と move_file のどちらを選ぶかを確認する必要がある場合に読みます
- Obsidian の規約 - ノートの内容を作成・書き込みする場合(リンク構文、フロントマターのフィールド、デイリーノートの形式、テンプレート変数)に読みます
- Git Sync - git/gh を使ったバックアップ、同期、保管庫のワークフローをユーザーが求めた場合に読みます