TECH BLOG

エルカミーの技術ブログです

【Difyで作るシリーズ8】Dify × Obsidian連携|MCPサーバーで自然言語操作

はじめに

Dify というサービスを聞いたことがあるけれど、「何ができるかわからない」、「どう使うのかわからない」などの理由で使ったことがない方は多いのではないでしょうか。

そのような方のために、「Dify で何ができるのか?や Dify を使った活用事例」を紹介する記事をシリーズ化していきます。

今回は第8回目で、DifyとObsidianを連携します。

具体的には、ObsidianのMCPサーバーの構築とDifyのワークフローを作成して、自然言語を使ってObsidian ノートを操作し、必要な情報を取得する方法について紹介します。

🙂
この記事の対象者
  • Dify という言葉を聞いたことがあるが、何ができるのかがわからない方
  • Dify を業務に取り入れたいと検討している方
事前準備
  • Dify へのサインアップ
  • OpenAI APIまたはGemini APIのAPIキーの取得
    • Gemini APIの場合
      1. ここにアクセスし、「APIキーを作成」を選択します。
      2. 「新しいプロジェクトでAPIキーを作成」を押します。
      3. APIキーをコピーします。
    • Open AI APIの場合
      • サインアップした後、こちらからAPIキーを作成し、保存します。
  • APIキーのセットアップ
  • Obsidianのインストール
    1. こちらからmacOS用のObsidianをインストールしてください。
    2. ローカルのVault(ノート保存フォルダ)を準備し、ノートを管理できる状態にしてください。
💡
Obsidianとは ?

Obsidianは、Markdown形式でノートを作成・管理できるデスクトップ向けのノートアプリケーションです。

ファイルはローカルに保存され、リンクやタグを活用した双方向的な情報整理が可能です。

💡
MCPサーバーとは ?

MCPは、アプリケーションと大規模言語モデル(LLM)を標準化された方法でツールやデータソースに接続するためのオープンプロトコルです。

例えると、MCPはAIのためのUSB-Cポートのようなものです。USB-Cが1つの規格でさまざまなデバイスをつなぐように、MCPはLLMをNotion、Slackなどのツールに簡単につなぐことができます。

image block
環境
  • macOS Sequoia 15.5
  • Python 3.12.4
  • Dify v1.4.3(セルフホスト版)
⚠️
今回は、Difyのクラウド版ではなくセルフホスト版を使っています

概要

本記事では、mcp-obsidian-sseを利用し、DifyからObsidianを自然言語で操作します。

完成イメージ
📌
イメージ

実際の使用画面

  1. image block
  2. Obsidanにファイルが作成され、TODOリストが作成されました。
    image block

上記のアプリを構築するためにワークフローを作る説明をします。

💡
ワークフローとは

一つ一つの処理を小さなブロック(ノード)としてつなぎ合わせて、一連のプロレスを自動化する機能です。

今回作成するワークフローのDifyの画面です。

image block

このワークフローは、以下のブロックで構成されます。

graph LR
  A["開始<br/>(入力:text)"] --> B
  B["エージェント<br/>戦略:FunctionCalling<br/>モデル:gpt-4o-mini"] --> C
  C["終了<br/>エージェント/text"]
  1. 開始:ユーザからの指示をテキストで受け取ります。
  2. エージェント:LLMが指示をもとに、MCPを使用してタスクを実行します。
  3. 終了:ワークフローを終了します。

作業手順

ここからは、ワークフローの構築の手順について説明します。

手順
  1. Obsidianの設定
  2. Difyワークフローの作成
  3. MCPサーバーのセットアップ
  4. 環境変数の設定
  5. MCPサーバーの起動
  6. Difyの接続設定
  7. ワークフローの動作確認
1. Obsidianの設定
  1. Obsidianの設定を開きます。「コミュニティプラグイン」から、コミュニティプラグインの「閲覧」を選択します。
    image block
  2. 「Local REST API」プラグインをインストールします。
    image block
  3. プラグインを有効化します。
    image block
  4. 「オプション」を選択します。
    image block
  5. APIキーを取得し、メモしておきます。
    image block
2. Difyワークフローの作成
  1. ワークフローを新規作成します。
  2. 「開始」ノードを選択し、「+」ボタンを押します。

    入力フィールドで以下の表のように項目を設定します。

    項目名
    フィールドタイプ 段落
    変数名 text(任意の文字列)
    ラベル名 text(任意の文字列)
    最大長 256
    image block
  3. 「プラグイン」を選択し、「マーケットプレイスを探索する」を選択後、検索欄に「MCP」と入力します。
    image block
  4. 「Agent Strategies (Support MCP Tools)」を選択し、インストールします。
    image block
  5. ワークフロー作成画面に戻り、「エージェント」ノードを追加します。

    その後、「エージェンティック戦略」で「Support MCP Tools Agent」の「FunctionCalling(Support MCP Tools)」を選択します。

    image block
  6. 任意のモデルを追加します。

    今回は、gpt-4.1-miniを選択しました。

    image block
  7. 「QUERY」項目で「開始」の「{x}text」を記述します。
    image block
  8. 「終了」ノードを追加し、「出力変数」に「エージェント」の「{x} text」を選択します。
    image block
3. MCPサーバーのセットアップ
  1. GitHubからmcp-obsidian-sseのリポジトリをクローンします。
    git clone https://github.com/duncanchiu409/mcp-obsidian-sse.git
    cd mcp-obsidian-sse

    以下のようなディレクトリ構造になっていることを確認してください。

    .
    ├── README.md
    ├── main.py
    ├── pyproject.toml
    ├── src
    │   └── mcp_obsidian_sse
    │       ├── __init__.py
    │       ├── obsidian.py
    │       └── server.py
    └── uv.lock
  2. 仮想環境を作成し、有効化します。
    # myenvという名前の仮想環境を作成
    python3 -m venv myenv
    
    # 仮想環境を有効化
    source myenv/bin/activate
  3. 仮想環境内でuvicornをインストールします。
    pip install uv
  4. 依存環境をインストールします。
    # uvで依存関係をインストール(uv.lock に従う)
    uv sync
    
    # uvに現在の仮想環境を登録
    uv venv add
  5. パッケージの読み込み設定を行います。
    1. 開発モードをインストールします。
      pip install --editable .
    2. PYTHONPATH に追加します。
      export PYTHONPATH="${PWD}/src:${PYTHONPATH}"
4. 環境変数の設定

プロジェクトのルートディレクトリで.env ファイルを作成し、ファイルに以下の内容を記載してください。

OBSIDIAN_API_KEY=<YOUR-API-KEY>
5. MCPサーバーの起動

main.appがあるディレクトリで、以下のコマンドを打ちます。

uvicorn main:app --reload --host 0.0.0.0 --port 3001

これを実行することで、ポート3001でサーバーが立ち上がります。

6. Difyの接続設定
  1. Difyのワークフロー作成画面で「エージェント」ブロックを選択し、「MCP SERVERS CONFIG」で以下のコードを記述します。
    image block
    {
      "obsidian": {
        "url": "http://host.docker.internal:3001/sse"
      }
    }
7. ワークフローの動作確認
  1. 「公開する」を選択し、「アプリを実行」を選択します。
    image block
  2. LLMに指示したい内容を入力します。

    今回は以下の内容を入力します。

    testフォルダのtestにいかのTODOリストを追加して
    - [ ] 明日の会議資料を確認・提出する
    - [ ] 書類スキャンしてPDF化する
    - [ ] メール返信(3件)
    image block
  3. Obsidian内でファイルが作成されました。
    image block

応用

今回は、単純にDifyとObsidianの連携をするために最低限のワークフローを作りました。

連携を活用した応用例として、以下のようなシナリオが考えられます。

  • 知識ベースとして活用: Obsidianに保存されたノートをDifyに取り込み、AIに要約や質問応答をさせることで、より効率的な情報検索が可能になる。
  • 定期的なレポート生成と通知: Obsidian内のノートを自動的に生成・更新し、関係者へ通知する。
  • レビューと修正: 会話を通じてObsidian内のノートをAIにレビューしてもらい、レビューを元にAIが修正もする。

おわりに

本記事では、DifyとObsidianをMCPサーバーを通じて連携する手順を紹介しました。設定が意外に難しく、現状ではローカル環境でしか実現できないという課題がありますが、両ツールの連携による可能性は非常に大きいと感じています。今後もDifyを利用したアプリの作成手順を紹介していきますので、ぜひ引き続きご覧ください。