1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

WSLからWindows-Obsidianに接続するObsidian MCP

Posted at

はじめに

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_notessearch_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からの接続に必要な追加設定を行う

  • SettingsEnable Non-encrypted(HTTP) Serverをオンにする
    • WSLからの接続確認のためだけなので後でオフにする
  • Show advanced settingsをオンにし、Binding Host0.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を使うコツなのかもしれないですねー

トラブルシューティングのディレクトリとか作って、プロジェクトではまったエラーとかさっとまとめて検索できる世界観になったらいいなー

参考文献

1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?