はじめに
Obsidian × Cursorが話題になっていたので試したくてやってみました。
途中で気づいたけどCursorからmdファイルをいい感じに編集できればいいだけでもしかしてmcpを設定しなくてもやりたいことは達成できたかもしれないということに気づいたけど時すでに遅し...
プロジェクト内のことをいろいろまとめてーって言ったら勝手にObsidianに書いてくれることを期待しようと思います
注意
ファイアーウォールいじったりObsidian local REST APIのBinding Hostを0.0.0.0とかにして外部公開したりしてます。セキュリティ的に問題がありそうなので設定は自己責任でお願いします
選んだmcpサーバー
Obsidianのmcpサーバーは執筆時点の自分が調べた限り2種類あります。
今回はMarkusPfundstein
のmcpサーバーを使います。Obsidian local REST API
を使用してより高度な検索やファイルの読み書きができて自由度が高かったです
smithery-ai
のmcpサーバーを最初に試してみましたが、ローカルディレクトリのファイルを読み込む方式でread_notes
とsearch_notes
の2種類しかAPIがなかったです。自分はコードで詰まったところをObsidianにまとめてもらって書き込みして欲しかったので見送りました。
ただし、こちらのほうが簡単に設定できたのでファイルが読み込めればいいだけの人はこちら推奨です。書き込み権限って怖いですしね
環境構築
Windows上の操作
Obsidian local REST APIの設定
pluginのinstall
設定 > Community plugins > Community plugins-Browseから「Local REST API」を検索&インストールして有効化
一番下にLocal REST APIが表示されるのでAPI Keyなどを確認する
詳細設定
WSLからの接続に必要な追加設定を行う
-
Settings
のEnable Non-encrypted(HTTP) Server
をオンにする- WSLからの接続確認のためだけなので後でオフにする
-
Show advanced settings
をオンにし、Binding Host
を0.0.0.0
にする。これをすることでWSL側からもアクセスすることができる
Windows FireWallの設定
WSLからWindowsホストへのアクセスは外部からのアクセスとして認識されるのでファイアーウォールの設定をしてポートを開けておく
- 「ファイアウォールの状態と確認」を開く
- Windows Defenderファイアーウォールを介したアプリまたは機能を許可
- 「許可されたアプリおよび機能」の中から
obsidian.exe
を探しチェックを入れる
WSL上での操作
WindowsホストのIPの確認
WSLから見たWindowsはlocalhostではなく外部接続になるのでWindows側のIPを調べておく
$ ip route show | grep -i default | awk '{print $3}'
WSLからObsidian local REST APIの接続確認
設定しておいたhttpの方のポートでObsidian local REST APIが動かせるかどうか確認する
疎通確認が出来たらGUI上でObsidianを開いてEnable Non-encrypted(HTTP) Server
の設定はオフにしておく
$ curl http://{WINDOWS_HOST_IP}:27123
mcp-obsidianリポジトリのクローン
リポジトリのREADMEを見るとuvxを使ったやり方もあるが、なぜか環境変数が設定されずHost IPがデフォルトの127.0.0.1
を見に行ってしまったのでcloneしてローカル実行する方法をとりました。
uvも必要なのでインストールしていない人はインストールしておきましょう
$ git clone git@github.com:MarkusPfundstein/mcp-obsidian.git
$ cd mcp-obsidian
# ディレクトリパスをmcp.jsonに保存するので確認しておく
$ pwd
Cursor上での設定
mcp.jsonにmcp serverを設定
ここまででいろいろ確認したものを記載していく
{
"mcpServers": {
"mcp-obsidian": {
"command": "uv",
"env": {
"OBSIDIAN_API_KEY": "{Obsidian local REST APIに書いてあるAPI_KEY}",
"OBSIDIAN_HOST": "{WSLで確認したWindowsのIP}
},
"args": [
"--directory",
"{WSL上でクローンしたリポジトリのパス}",
"run",
"mcp-obsidian"
]
}
}
}
動作確認
WSL上で動いているディレクトリをCursor経由で接続し、Chatからmcp試してみてとプロンプト実行して、うまく読み込めればOKです
勝手にファイルとか作られてすごい&怖いって感じでした。消されるの怖いのでGit使おうかな
おまけ
smithery-aiのmcpサーバーの動かし方
wslから見たObsidianのVaultがあるパスを書いておく
※npxが使えるようにしておく
{
"mcpServers": {
"mcp-obsidian": {
"command": "npx",
"args": [
"-y",
"@smithery/cli@latest",
"run",
"mcp-obsidian",
"--config",
"\"{\\\"vaultPath\\\":\\\"/mnt/c/Users/{User名}/{ObsidianのVault名}/\\\"}\""
]
}
}
}
おわりに
「xxxってタグのついたファイル探してー」とかプロンプトで投げたら情報とってきてくれていい感じでした。接続テストとか言ってテスト用ファイル作ったり消したりされたときはファイル消されていないか焦りましたけど
AIの挙動を見ているとファイル名が一番検索しやすそうだったので、内部のタグよりもディレクトリ構造やファイル名をちゃんとつけておくことがmcpからObsidianを使うコツなのかもしれないですねー
トラブルシューティングのディレクトリとか作って、プロジェクトではまったエラーとかさっとまとめて検索できる世界観になったらいいなー
参考文献