Model Context Protocol ( MCP ) Python server to use with continue.dev について
Obsidian のノートを使う AI エージェント向けの MCP サーバーで、ノート検索とウェブ調査を提供します。ノートの構成、タグ、リンクを活用したハイブリッド検索が特徴です。
主な機能
- 01Obsidian ノートのハイブリッド検索
- 02タグとパスによる絞り込み
- 03ウェブの詳細調査
- 04Markdown ファイルのインデックス作成
- 05タグとフォルダーのガイド参照
活用シーン
- 01大規模なノートから情報を探す
- 02技術的な質問をウェブで調査する
- 03複数の AI ツールでノートを共有する
MCP 対応
MCP サーバーは Obsidian 検索、ウェブ調査、タグとフォルダーのガイドを読むツールをクライアントに提供します。HTTP 経由で複数の AI ツールから利用できます。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
このサーバーのパッケージやリモートエンドポイントはまだ取得できていません。プロジェクトの README の手順に従ってください。
ツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
Obsidian Vault 用 Model Context Protocol(MCP)サーバー
これは、主に AI エージェントや情報検索、AI ツールの評価に焦点を当てた、個人的な調査・学習プロジェクトです。
このサーバーでは、検索ツールと読み取りツールを使って、Obsidian.md の Vault にアクセスできます。Obsidian はプレーンテキストの Markdown エディターで、すべてのノートファイルを1つのフォルダーに保存します。この形式は、AI エージェントの優れた相棒であり、ナレッジの保存先として最適です。
2024年から、Andrej Karpathy LLM Wiki と同様に、AI コーディングエージェント(Claude Code、Cursor)と Obsidian.md Vault を組み合わせて使っていますが、彼の提案よりも少し複雑です。 ノートが1,500件を超えると、エージェントが重要な情報を見落とすことがよくあります。そのため、私が使っているナレッジの整理方法を認識できる検索ツールを作ることにしました。
提供機能
Web の詳細調査
web_research ツールは、インターネット上の公開情報に基づいて質問に回答する、Perplaxity.ai と同様の機能を持つ AI エージェントです。技術的な質問や学術的な質問に回答するよう最適化されています。
主な処理の流れ:
- Web 検索クエリを生成します
- 検索結果の URL からコンテンツを取得します。ボット対策を回避しようとはしませんが、Arxiv.org の記事、Github リポジトリ、Reddit フォーラム、Wikipedia、PDF ドキュメントなど、幅広い公開ソースに対応しています。各ソースから情報を抽出するための特別な処理も用意されており、たとえば Web ページを読む代わりに Reddit API に切り替えたり、HTML ページの代わりに Github の raw 形式を使ったりします。
- LLM を使って取得結果から関連情報を抽出し、メインエージェントのコンテキストを削減します
- 結果を分析して、調査を終了するか、知識の不足を補うためにループを繰り返すかを判断するリフレクションステップです
- 最終回答の生成処理では、簡潔な回答、結論に至った経緯の詳しい説明、回答を裏付ける関連リンクを作成します
評価結果
コストを抑えるため、Gamini Flash lite や GPT 5.4 nano などの小規模モデルを使い、一部の質問で評価を実施しました。 GAIA dataset - 20問で60% DRACO dataset - 約40%。主な理由は、評価基準で求められるほど回答が詳細ではないことです。
評価コードはこのリポジトリには含まれていません。私のスタートアップ Jobsflow.ai の開発プロセス最適化を目的として作成した、チーム全体で利用する AI ソフトウェア開発ツールの社内プロジェクトの一部です。このツールは、そのプロジェクトから移植したものです。
Obsidian Vault RAG
obsidian_search は、主に従来型の RAG を用いた、ベクトル検索と BM25 を組み合わせた検索エンジンです。私が使っている Vault の構成に合わせて最適化されています。
ノート形式の前提
すべてのノートを同じパターンで作成しており、インデックス作成ツールは想定される形式に基づいてノートをチャンクに分割し、追加のメタデータを生成します。この形式は、新しいノートの処理に使う専用の Claude Code スキルで適用しています。
- フロントマターのプロパティ:
title- 内容を表す短い文description- ノートの内容を説明する3~4文。複数のチャンクを要約する RAPTOR の統合要約と同様の要約として使用しますtags- ノートを3つの観点で分類する、あらかじめ定義したタグのセットです。知識領域(ai、programming、finances、...)、ノートの種類(article、tutorial、action item、...)、詳細な主題(プログラミング言語、ツールの種類、アクティビティ)で分類します。ツールを使ってタグの分類体系を取得し、タグで絞り込むことができます
- ノートの本文 - すべてのノートは、各セクションを第1レベルまたは第2レベルの見出しで区切った、科学論文の形式に沿っています。セマンティックチャンク分割では、セクションごとにノートを分割します。ノート間のリンクには `[[Wikilinks]] 形式を使い、抽出してデータベースにも保存します。これにより、グラフのように移動できます
- ノートのサイズ - 200行を超えないようにします
インデックス作成
このツールはパターンに一致するVaultフォルダーをクロールし、すべてのMarkdownファイルを抽出します。各ファイルを解析してフロントマターのプロパティを抽出し、見出しごとに分割します(500トークン以下)。その後、メタ情報とともにデータベースに保存します。チャンクの内容と説明もベクトル埋め込みとして保存されます。チャンクは重複なしで作成され、検索で関連性の高い結果が得られた場合は、代わりに隣接するチャンクと組み合わせます。
検索結果に含まれる可能性を高めるため、ノート全体の内容からLLMが作成する追加の要約チャンクも作成されます。
Vaultの内容が変更された場合、またはコマンドラインから明示的に実行した場合に、再インデックスが開始されます。
検索
クエリはLLMに渡され、仮説上の回答が作成されます。クエリ自体は全文検索に使用され、生成された回答はベクトル検索に使用されます。これはqmd markdown searchと似ています。
データベースの検索結果は、Reranker API(CohereまたはVoiage.ai)への呼び出し、またはLanceDBのReciprocal Rank Fusionによって絞り込まれます。RRFRerankerは生のスコアではなく順位に基づいて結果を統合するため、ベクトル検索と全文検索のスコアを比較可能にする必要がありません。
2段階目の絞り込みでは、LLMを使用してクエリに関連するチャンクを選択します。選択されたチャンクは隣接するチャンクと組み合わされます(たとえば、ノートの5番目のチャンクが選択された場合、検索結果は4〜6番目のチャンクを組み合わせたものになります)。
追加のフィルター
検索対象を絞り込むには、次のオプションパラメーターを指定します。
tags結果に含まれている必要があるタグのリストpathファイルパスのパターン タグの分類体系を記載したTags.mdと、Vaultの構成を説明したFolders.mdという特別なノートを2つ用意しています。MCP サーバーは、それらを読み取るためのツールと指示を提供します。
評価
シンプルな評価ツールを使用しています。このツールはMy Vaultのスナップショットに対してクエリを実行し、期待される単語(適合率)と不要な単語(再現率)の数をカウントします。質問は合計25件で、F1スコアは約0.9です。
使用方法
サーバーで使用するLLM APIプロバイダーは1つだけです。LiteLLM AI Gateway (LLM Proxy) を使用していますが、Openrouterでも動作します。
リポジトリをクローンし、env.exampleから.envファイルを作成して、次を実行します。
# Create vault index
uv run --project <local copy> mcps --vault <Vault Folder> --reindex
# run as HTTP MCP Server
uv run --project <local copy> mcps --vault <Vault Folder> --port 1234
HTTPプロトコルでは、すべてのAIツールから利用できる単一のサーバーが提供されます。すべてのプロジェクトで共有するナレッジベースおよびメモリーとして使用しています。
Docker
ストリーミング可能なHTTPトランスポートを使用するスタンドアロンコンテナとして、サーバーをビルドして実行します。
# Build image
docker build -t mcps:local .
# Run container (vault and secrets are mounted/injected explicitly)
docker run --rm --env-file .env -e VAULT=/vault -v <host-vault-path>:/vault -p 8000:8000 mcps:local
サーバーにはhttp://localhost:8000/mcpからアクセスできます。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。