Seekstone Obsidian Mcp Server について
Seekstoneは、Obsidianアプリやプラグインを起動せずに、ClaudeなどのMCPクライアントからObsidianのナレッジベースを読み書きできる、ファイルシステム直結型のMCPサーバーです。インデックス検索、任意のローカルセマンティック検索、構造化クエリを備え、簡潔な結果を返します。
主な機能
- 01ナレッジベースのファイルへ直接アクセス
- 02ランキング付き全文検索
- 03任意のローカルセマンティック検索
- 04Frontmatterとメタデータのクエリ
- 05簡潔な抜粋と読み取り専用モード
活用シーン
- 01短い検索結果で大規模なObsidianナレッジベースを検索
- 02タグ、Frontmatter、更新日時でノートを探す
- 03実行時のネットワーク接続なしで意味検索
- 04Obsidianを閉じたままMCPクライアントからアクセス
MCP 対応
ローカルサーバーを介して、MCPクライアントにObsidianナレッジベースの読み書き機能を提供します。セットアップ用CLIでナレッジベースを検出し、対応クライアントを設定できます。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
ツール
19掲載時のツール一覧 · 3 週間前に更新
| パラメーター | 型 | 必須 | 説明 |
|---|---|---|---|
| query | string | はい | 検索クエリ。 |
| mode | enum | いいえ | lexical = キーワード検索(デフォルト)。semantic = 意味ベースの検索(SEEKSTONE_SEMANTIC=1 が必要)。hybrid = タイトルの完全一致検索には lexical、それ以外には semantic を使用します。lexical | semantic | hybrid |
| limit | number | いいえ | 最大結果数(1–50、デフォルトは 10)。 |
| folder | string | いいえ | vault からの相対フォルダーパスのプレフィックスで絞り込みます。 |
| tag | string | いいえ | このタグが付いたノートに絞り込みます。 |
詳細
翻訳後に原文が更新されています。最新の内容は原文をご確認ください。
プラグインも、起動中の Obsidian アプリも不要 — しかもコンテキストウィンドウを圧迫しない Obsidian MCP サーバーです。
ファイルシステム直接アクセス · 1 桁ミリ秒のキーワード検索 · 約 26 ms のセマンティック検索 · 約 2 KB のペイロード · 25 個のツール · macOS · Linux · Windows
| Seekstone | obsidian-mcp-server(ダウンロード数第 1 位) | REST プロキシサーバー | |
|---|---|---|---|
| Local REST API プラグイン | 不要 | 必須 | 必須 |
| Obsidian アプリの起動 | 不要 — Obsidian を閉じたままでも動作します | 必須 | 必須 |
| 1 万件のノートでの検索ペイロード | 2.0 KB | 47 KB | 最大 95 MB |
| 1 万件のノートでのウォーム検索レイテンシ | 5.6 ms | 732 ms(約 131 倍遅い) | 最大 1,550 ms |
| 構造化フロントマタークエリ | 組み込み(query_notes)— プロパティ、日付、サイズの述語に対応し、数百バイトで回答 | REST 経由の JSONLogic | さまざま |
同じクエリ、同じコミット済み vault、各20回の実行、同じマシン。プロセス内アダプターは2026年9月に fixture-v2 vault で再実行しました。REST プロキシの行(rest、obsidian-mcp-server、mcp-obsidian)に加え、obsidian-mcp と obsidian-mcp-pro は、fixture v1 で2026年6月に取得したデータです。行ごとの出典情報は benchmarks.json に記載されています。これは、ここにあるすべての数値が CI で照合される、生成元の信頼できるデータです。8つのサーバーと3種類の vault サイズにわたる全結果はこちら。ハーネスを使って完全に再現できます。 |
Seekstone とは?
Seekstone は Obsidian MCP サーバーです。Claude(および任意のModel Context Protocol クライアント)に、Obsidian vault への直接的な読み取りおよび書き込みアクセスを提供します。Obsidian アプリを開いておく必要はなく、プラグインも不要で、データがマシンの外に出ることもありません。
Obsidian Local REST API プラグインを経由せず、ディスクから直接 vault を読み取り、プロセス内に常駐する全文インデックスを保持します。実用面での違いは2つあります。
- 速度。 キーワード検索はウォーム状態で一桁ミリ秒、セマンティック検索は約26 msで結果を返します。ベンチマークした他のすべての Obsidian MCP サーバーより最大約508倍高速です。これは、クエリごとにサブプロセスを起動したり、HTTP の往復が発生したりしないためです。
- コンテキスト。 REST プロキシサーバー経由では数千万バイト、数百万トークンを返す幅広い検索でも、Seekstone 経由では約2 KBしか返しません。最大約47,000倍の削減となり、vault が大きくなるほど差は広がります。
検索モードは3種類あります。順位付けされた全文検索(あいまい一致および接頭辞一致)、任意で利用できるローカルセマンティック検索(意味ベースの検索。小型のデバイス上埋め込みモデルを使用。オプトイン方式で、初回に約30 MBのモデルをダウンロードすれば、実行時はオフライン)、そして構造化メタデータクエリです。query_notes は frontmatter のプロパティ(status、due、type、…)、タグ、フォルダー、更新日時、サイズで絞り込み、「今週変更された下書きノートはどれ?」といった質問に対し、検索して読み込む手順を繰り返す代わりに、数百バイトで回答します。
Claude は、ツール呼び出し1回でコンテキストウィンドウの大半を消費することなく、ノートライブラリ全体をミリ秒単位で検索し、読み取ることができます。
npm では seekstone として公開されています。npx -y seekstone でインストールできます。(以前は obsidian-mcp-seekstone としても公開されていました。この別名は非推奨ですが、既存のインストールは引き続き動作します。)
Seekstone を選ぶ理由:数値で比較
多くの Obsidian MCP サーバーは、検索結果ごとにノートの全文を返します。幅広いクエリでは、LLM が処理しなければならないテキストが数メガバイトに達します。その大半は無関係であり、すべてがコンテキストウィンドウを消費します。
Seekstone は代わりに、短く順位付けされた抜粋を返します(デフォルトで約120文字。クエリごとに調整可能です)。Seekstone と他の Obsidian MCP サーバー7つ、合計8つのサーバーを、**3種類の vault サイズ(ノート数1,000/5,000/10,000)**でベンチマークしました(各20回実行)。以下の数値はすべて完全に再現可能です。vault はこのリポジトリにコミット済みです(パブリックドメインの1911年版 Encyclopædia Britannica から生成)。そのため、クローンしてまったく同じベンチマークを実行できます。
3種類のサイズでテストする理由は、アーキテクチャの違いが明らかになるのがこの点だからです。実際の vault は大きくなっていきます。
検索ペイロード — クエリあたりの返却バイト数(コンテキストコスト。少ないほど良好)
| サーバー | アーキテクチャ | 1k件のノート | 5k件のノート | 10k件のノート |
|---|---|---|---|---|
| 🥇 Seekstone | インプロセスインデックス | 1.6 KB | 1.8 KB | 2.0 KB |
| mcpvault | ファイルシステムを直接操作するサブプロセス | 1.7 KB | 1.9 KB | 2.2 KB |
| obsidian-mcp-rs | ファイルシステムを直接操作、クエリごとにスキャン | 5.4 KB | 5.8 KB | 6.2 KB |
| obsidian-tc | SQLite プラットフォーム | 4.6 KB | 6.8 KB | 7.3 KB |
| obsidian-mcp-server | REST API | 55 KB | 47 KB | 47 KB |
| obsidian-mcp-pro | ファイルシステムを直接操作するサブプロセス | 25 KB | 84 KB | 114 KB |
| obsidian-mcp | ファイルシステムを直接操作するサブプロセス | 18 KB | 105 KB | 203 KB |
| mcp-obsidian | REST API | 9.8 MB | 45 MB | 95 MB |
Seekstone は、Vault のサイズにかかわらずほぼ一定(約 2 KB)を維持します。常に順位付けされた抜粋を返すためです。また、今回テストしたすべてのサーバーの中で最小のペイロードとなり、3 つすべてのサイズで mcpvault を上回りました。REST プロキシ型のサーバーは、該当するたびにノートの内容全体を返すため、Vault のサイズに応じてペイロードが増加します。mcp-obsidian は 10k 件のノートで95 MBに達し、広範なクエリ(the capital of)を 1 回実行するだけでも、20 回の実行で平均 370.9 MB/9,780 万トークンになりました。10k 件のノートでは、コンテキスト負荷に約 47,000 倍の差が生じます。
検索レイテンシ — ウォーム時の平均、ms(小さいほど高速)
| サーバー | 1k件のノート | 5k件のノート | 10k件のノート | 10k件での Seekstone との比較 |
|---|---|---|---|---|
| 🥇 Seekstone | 1.0 | 2.8 | 5.6 | — |
| obsidian-mcp-rs | 6.0 | 19 | 36 | 約 6 倍遅い |
| obsidian-mcp-pro | 41 | 200 | 407 | 約 73 倍遅い |
| obsidian-mcp-server | 82 | 356 | 732 | 約 131 倍遅い |
| obsidian-mcp | 78 | 380 | 772 | 約 138 倍遅い |
| mcpvault | 90 | 431 | 893 | 約 159 倍遅い |
| mcp-obsidian | 164 | 740 | 1,550 | 約 277 倍遅い |
| obsidian-tc | 273 | 1,380 | 2,849 | 約 508 倍遅い |
競合製品はどれも、クエリごとにサブプロセスを起動するか、HTTP の往復通信を行います。また、その大半は Vault のサイズに応じて処理量が増えます。Seekstone はウォーム状態のインプロセスインデックスを保持するため、IPC もネットワーク通信も不要です。10,000 件のノートでも、キーワード検索は1 桁ミリ秒で完了します(提供されるセマンティックパイプラインである埋め込み、スキャン、MaxSim による再ランキングは約 26 ms です)。さらに、規模が大きくなるほど差は広がります。ノート数が 1k から 10k になると競合製品は 5~10 倍遅くなりますが、Seekstone の速度はほとんど変わりません。最速の代替製品である obsidian-mcp-rs でさえ、クエリのたびに Vault を再スキャンするため、10k 件のノートでウォーム時の速度は約 6 倍遅く、ペイロードは 3 倍です。また、REST プロキシ型の製品は約 100~280 倍遅くなります。
Seekstone は、あらゆる Vault サイズで約 2 KB のペイロードと 1 桁ミリ秒のキーワード検索レイテンシの両方を実現する、今回のベンチマーク対象で唯一のサーバーです。また、私たちの知る限り、公開済みで再現可能なベンチマークを備えた唯一の Obsidian MCP サーバーです。ハーネス、合成 Vault、全結果はオープンソースです。benchmark-scaling.md とハーネスをご覧ください。クローンして実行し、検証できます。
インストール
ご自身に最適な方法を選んでください。
AI エージェントを使用していますか?このプロンプトを貼り付けてください
Claude Code、Cursor、またはその他のコーディングエージェントを使用している場合、自分で手順に従う必要はありません — このプロンプトを貼り付ければ、エージェントがインストールを行います:
このエディタに seekstone MCP サーバーをインストールしてください。
npx -y seekstone init --client code --writeを実行します(他のクライアントにはdesktop、cursor、またはvscodeを使用)。私の Obsidian 保管庫を自動検出します。複数表示された場合は、どれを使うか私に尋ね、--vault "<path>"を付けて再実行してください。エラーがあれば私に伝え、seekstone ツールを読み込むためにこのセッションを再起動するよう私に伝えてください。
seekstone init は完全に非対話型です — --write を付けると、保管庫を検証し、クライアント設定を一発でパッチします(Claude Code は claude mcp add 経由、その他のクライアントはタイムスタンプ付きバックアップを伴う追加型 JSON パッチ経由)。
オプション 1 — ワンクリック(Claude Desktop、ターミナル不要)
seekstone.mcpbをダウンロードします(直接リンク、常に最新リリース)- Claude Desktop で開きます — Finder でダブルクリック、または右クリック → このアプリケーションで開く → Claude Desktop
- プロンプトが表示されたら Obsidian 保管庫フォルダを選択します
Claude のツールバーに seekstone が表示されれば成功です。JSON の編集も、ターミナルも、Node.js も不要です。
セマンティック検索をお望みですか?代わりに seekstone-semantic.mcpb を入手してください — ローカル埋め込みモデルがバンドル内に同梱された同じサーバーです(約 28 MB 大きくなります)。そのため、意味ベースの検索がすぐに使えます。ターミナルは引き続き不要で、実行時に何もダウンロードされません。
オプション 2 — ガイド付きセットアップ(CLI ユーザーに推奨)
ターミナルを開き(macOS: Cmd+Space を押し、「Terminal」と入力して Enter を押す)、次を実行します:
npx -y seekstone init
プラグアイコンの下にある Claude のツールバーに Seekstone が表示されれば成功です。
Seekstone は Obsidian 自身の保管庫レジストリを読み取って保管庫を検出し、検証した上で、貼り付ける設定ブロックを出力するか、Claude Desktop を直接パッチします:
# Auto-detect vault, print config to paste
npx -y seekstone init
# Auto-detect vault, patch Claude Desktop in place (with backup)
npx -y seekstone init --write
# Specify vault explicitly if you have multiple
npx -y seekstone init --vault "/path/to/vault"
# Auto-configure Claude Code in one step (auto-detects vault, runs claude mcp add)
npx -y seekstone init --client code --write
# Or just print the Claude Code command without running it
npx -y seekstone init --client code
オプション 3 — 手動設定(Claude Desktop)
claude_desktop_config.json に追加します(設定 → 開発者 → 設定を編集):
{
"mcpServers": {
"seekstone": {
"command": "npx",
"args": ["-y", "seekstone"],
"env": { "SEEKSTONE_VAULT": "/absolute/path/to/your/vault" }
}
}
}
オプション 4 — Claude Code
保管庫を自動検出し、1 つのコマンドで Claude Code を設定します:
npx -y seekstone init --client code --write
または、保管庫のパスを明示的に指定したい場合は手動で:
claude mcp add seekstone --env SEEKSTONE_VAULT=/absolute/path/to/your/vault -- npx -y seekstone
オプション 5 — Cursor
ワンクリック: — その後、Cursor の MCP 設定で
SEEKSTONE_VAULT を保管庫の絶対パスに設定します(リンクはプレースホルダーをインストールします)。
または、CLI に保管庫を自動検出させ、~/.cursor/mcp.json をパッチさせます(バックアップ付き):
npx -y seekstone init --client cursor --write
または、~/.cursor/mcp.json(グローバル)または <project>/.cursor/mcp.json(プロジェクトごと)にブロックを手動で追加します:
{
"mcpServers": {
"seekstone": {
"command": "npx",
"args": ["-y", "seekstone"],
"env": { "SEEKSTONE_VAULT": "/absolute/path/to/your/vault" }
}
}
}
オプション 6 — VS Code
ワンクリック: — その後、VS Code がサーバー設定を開いたときに
SEEKSTONE_VAULT をボルトの絶対パスに設定してください(このリンクではプレースホルダーがインストールされます)。
または、CLI にボルトを自動検出させてワークスペース設定(カレントディレクトリの .vscode/mcp.json)を書き込ませることもできます:
npx -y seekstone init --client vscode --write
または、ターミナルから追加します:
code --add-mcp '{"name":"seekstone","command":"npx","args":["-y","seekstone"],"env":{"SEEKSTONE_VAULT":"/absolute/path/to/your/vault"}}'
または、.vscode/mcp.json(ワークスペース)に手動でブロックを追加するか、コマンドパレット → MCP: Open User Configuration(ユーザーグローバル)から追加します。VS Code の 2 つの癖に注意してください: トップレベルのキーは servers(mcpServers ではない)で、"type": "stdio" が必須です:
{
"servers": {
"seekstone": {
"type": "stdio",
"command": "npx",
"args": ["-y", "seekstone"],
"env": { "SEEKSTONE_VAULT": "/absolute/path/to/your/vault" }
}
}
}
VS Code 1.102 以降が必要です。seekstone は Copilot Chat の Agent mode ツールピッカーに表示されます。
その他の MCP クライアント(Windsurf、Cline など)
Seekstone は標準的な MCP stdio サーバーです — どの MCP クライアントでも実行できます。クライアントの MCP 設定で上記と同じ JSON ブロックを使用してください(command: npx、args: ["-y", "seekstone"]、env SEEKSTONE_VAULT)。
インストール後、クライアントを再起動してください。起動時に Seekstone はボルトを走査し、インメモリの全文インデックスを構築し(数千件のノートで数秒)、編集に合わせてリアルタイムに維持します。その後、以下の 25 個のツールが Claude から利用可能になります。
CLI オプションには Node.js ≥ 22 が必要です。ワンクリックの .mcpb バンドルには外部要件はありません。
Seekstone がコンテキストの節約に役立ったなら、⭐ リポジトリにスターを付けることをご検討ください — 他のユーザーが見つけやすくなります。
Claude はあなたのボルトで何ができるか?
Seekstone を接続すると、Claude に次のようなことを頼めます:
- 「[トピック] に関するすべてをノートから検索して要約して」 —
searchを使用し、ランク付けされた抜粋を返します(ファイル全体ではありません) - 「#project タグが付いたすべてのノートを見つけてタイトルを一覧にして」 — タグフィルター付きの
list_notesを使用します - 「今週のデイリーノート全体でまだ未完了のものは?」 —
list_tasksを使用し、ノート全体ではなくチェックボックスごとに 1 行のコンパクトな行を返します。update_taskは 1 文字の編集でチェックを付けます - 「[プロジェクト] ノートの『Decisions』セクションだけを読んで」 — セクションセレクター付きの
read_noteを使用するので、その部分だけがコンテキストに入ります - 「[トピック] ノートにリンクしているものは何で、それは何にリンクしている?」 —
get_backlinksとget_linksを使用してグラフをたどります - 「今日のスタンドアップノートをデイリーノートに追記して」 —
append_periodic_noteを使用し、ボルト設定からデイリーノートのパスを解決します(Obsidian を開いておく必要はありません) - 「このノート内の古いプロジェクト名のすべての出現箇所を修正して」 —
replace_in_noteを使用し、書き込む前にドライランでプレビューします - 「[ノート] の末尾に要約セクションを追加して」 —
append_noteを使用し、フロントマターには一切触れません - 「/inbox 内のすべてのノートを /archive/[year] に移動して」 —
move_noteを使用します - 「このノートのフロントマターの status フィールドを 'done' に更新して」 —
patch_frontmatterを使用し、キーの順序と引用符のスタイルを保持します - 「今日のミーティングノートを標準テンプレートで新規作成して」 —
create_noteを使用します
Claude がボルト全体を一度に目にすることはありません — 検索して選択的に読み取るので、大規模なボルト(1 万件以上のノート)でもコンテキストの予算内に収まります。
ツール
読み取り
| ツール | 説明 |
|---|---|
search | 全文検索。ランク付けされた抜粋(デフォルト約 120 文字、excerptLength で調整可能)を返し、ノート全体は返しません。あいまい一致と前方一致に対応し、SEEKSTONE_SEMANTIC=1 の場合は mode: "semantic"/"hybrid" でローカルの埋め込みモデルによる意味ベースの検索が行われます(データはマシン外に送信されません)。 |
query_notes | 構造化されたメタデータクエリ。frontmatter のキーと値の述語(eq、ne、contains、exists、missing、gt/gte/lt/lte)、タグ、フォルダ、更新日時、サイズで絞り込み、必要なフィールドを並べ替えて選択できます。ノートの内容ではなく、コンパクトな行(デフォルトではパスとタイトル)を返します。 |
context_pack | 自然言語の質問に対する回答可能なコンテキストを 1 回の呼び出しで取得します。バイト数の上限(デフォルト 2 KB)が厳密に適用されます。ランク付けされた抜粋、1 行の要約付きでリンクされた隣接ノート、フォローアップ用のソースパスが含まれ、search → read → get_backlinks の往復ループを置き換えます。folder/tag でスコープを指定でき、search と同じ mode を受け付けます。 |
read_note | vault 相対パスでノートの全内容を読み取ります。単一のセクション、ブロック、行範囲の返却に対応します。 |
read_notes | 1 回の呼び出しで最大 20 件のノート(またはセクション、ブロック、行範囲)を合計バイト数の上限(デフォルト 16 KB)内で読み取ります。上限を超えると、各ノートは公平な配分に切り詰められて truncated とマークされ、1 つの不正なパスがあってもバッチ全体が失敗することなくそのパス自身のエラーが返されます。 |
list_notes | ノートを一覧表示します。オプションでフォルダのプレフィックスまたはタグで絞り込めます。 |
list_tags | vault 内のすべてのタグを使用回数順(またはアルファベット順)で一覧表示します。 |
list_tasks | Markdown のチェックボックスタスクをコンパクトな構造化行(パス、行、状態、テキスト、最寄りの見出し)として一覧表示します。vault 全体、またはノート、フォルダ、タグ、状態、更新日時で絞り込めます。カスタムマーカー(- [/]、- [-] など)も 1 文字の状態として正式に扱われます。 |
outline_note | ノートの内容全体を返さずに見出しとブロック構造を返します。対象を絞った読み取りの前に行う低コストなナビゲーションです。 |
get_backlinks | 指定したノートにリンクしているすべてのノートを検索します。 |
get_links | ノートからのすべての発信 wikilink と Markdown リンクを一覧表示します。 |
resolve_note | ノート名、パス、または frontmatter のエイリアスを、正規の vault パスに変換します。一致ごとの出典情報、あいまいな場合はすべての候補、一致するものがない場合は「もしかして」の候補を提示します。 |
get_periodic_note | 今日(または任意の日付)のデイリー、ウィークリー、マンスリー、クォータリー、イヤーノートを読み取ります。パスは vault の設定から解決され、Obsidian は不要です。 |
list_writes | ジャーナルからの最近の書き込み(seq、タイムスタンプ、ツール、対象パス、それぞれがまだ元に戻せるかどうか)を表示します。メタデータのみで、ノートの内容は含みません。 |
書き込み
| ツール | 説明 |
|---|---|
create_note | ノートを作成します(frontmatter と本文は任意)。親ディレクトリは自動的に作成されます。 |
delete_note | ノートを保管庫の .trash/ フォルダへ移動します(Obsidian 互換、復元可能)。permanent: true を渡すとゴミ箱をスキップします — それでも書き込みジャーナルにより undo_write で復元できます。 |
move_note | ノートを移動または名前変更します — それを参照する他のノート内のウィキリンクと Markdown リンクは壊れないように書き換えられます(除外するには rewriteLinks: false)。移動先ディレクトリは自動的に作成されます。 |
rename_heading | ノート内の見出しの名前を変更します — 保管庫全体にわたるすべての [[note#heading]] ウィキリンクと埋め込みが書き換えられ、参照が機能し続けます(エイリアスは保持され、フェンス付きコードブロックはそのまま残されます)。 |
append_note | frontmatter に触れずに、ノート本文にテキストを追記します。 |
patch_frontmatter | 既存のキーの順序を変えたり引用符のスタイルを変更したりせずに、frontmatter のキーを設定、更新、削除します。 |
patch_note | 見出しまたはブロック参照の位置にテキストを追記、先頭に追加、または置換します(セクションを追加するには createIfMissing)— frontmatter はそのままです。 |
replace_in_note | ノート本文内のテキストを検索して置換します — リテラルまたは正規表現、大文字小文字の区別、単語単位の一致、任意の limit(デフォルトでは すべて の出現箇所を置換)、およびドライランプレビューに対応します。 |
append_periodic_note | 今日の定期ノートに追記します。まだ存在しない場合はテンプレートから作成します。 |
update_task | パス + 行(list_tasks から取得)で 1 つのチェックボックスの状態を設定します — ちょうど 1 文字だけを書き換え、他のすべてのバイトはそのままにします。expectText ガードは、リストされた後にタスクのテキストが変更されている場合に拒否します。 |
undo_write | ジャーナルされた書き込みを元に戻します。それが触れたすべてのファイルは、書き込み前のバイト単位で同一の状態に戻ります(複数ファイルの移動や見出しの名前変更は全体が復元され、削除は permanent であったとしても復元されます)。デフォルトでは直近の書き込みを対象とし、それ以降にファイルが変更されている場合は undo_conflict で拒否します(force: true を渡さない限り)。元に戻す操作自体もジャーナルされます — その undo エントリに対して undo_write({ seq }) を実行するとやり直しになります。 |
すべての書き込みツール(append_note、patch_note、patch_frontmatter、replace_in_note、rename_heading、move_note、delete_note、append_periodic_note、update_task、および overwrite: true を指定した create_note)は、任意の compare-and-swap をサポートします。read_note から取得した contentHash を prevHash として渡すと、背後でノートが変更されていた場合に呼び出しはクリーンに失敗します — 同時編集が黙って破棄されることも、確認していないコンテンツが移動または削除されることもありません。変更を伴うすべての結果は新しい contentHash を返すため、連続した編集に再読み込みは不要です。
すべての書き込みは可逆です。 書き込みツールが 1 バイトを変更する前に、それがこれから触れるすべてのファイルの変更前イメージを <vault>/.seekstone/history/ の下にジャーナルします — コンテンツアドレス指定(同一の状態は 1 回だけ保存)で、保管庫への書き込みがコミットされる前に fsync されます。list_writes はジャーナルを表示し、undo_write はバイト単位で同一に復元します。複数ファイルの move_note や rename_heading は全体(ノート および すべてのリンク書き換え)が復元され、delete_note は permanent であったとしても戻ってきます。外部編集後の undo は、force: true を渡さない限り構造化された undo_conflict で拒否されます — そしてその場合でも、上書きされた状態はまずジャーナルされるため、何も失われることはありません。undo 自体もジャーナルされます。デフォルトの undo を繰り返すと履歴を逆方向にたどり、undo エントリに対して undo_write({ seq }) を実行するとやり直しになります。.seekstone/ は .trash/ と同様にインデックスと検索から除外されます。保管庫の .gitignore に追加してください。これは git や Obsidian のファイルリカバリーを置き換えるものではなく補完するものです — エージェント が操作できるリカバリーパスです。
すべての書き込みは記録を残します。 SEEKSTONE_AUDIT_FILE を設定すると、すべての書き込みツールの呼び出しが — 成功した場合も拒否された場合も — 1 行の JSON として追記されます。内容は、ツール、Vault 相対パス、書き込み前後の sha-256、結果 (ok、hash_conflict、undo_conflict、policy_denied、error)、および置換回数や .trash/ の移動先といった操作メタデータです — ノートの内容、frontmatter の値、検索クエリは一切含まれないため、このファイルはバグレポートに安全に添付できます。
{"v":1,"ts":"2026-08-29T21:02:11.042Z","tool":"replace_in_note","outcome":"ok","durationMs":1.8,"seq":42,"files":[{"path":"notes/a.md","hashBefore":"3f9c…","hashAfter":"b71e…"}],"path":"notes/a.md","replacements":3}
これらのハッシュは read_note が返すものと同じ contentHash 値であるため、どのレコードも Vault と照合して検証できます。また seq はその呼び出しがコミットしたジャーナルエントリであるため、行からそのまま list_writes / undo_write を参照できます。レコードは Vault への書き込みがコミットされた後に追記され fsync されます。ファイルは SEEKSTONE_AUDIT_MAX_SIZE を超えると <file>.1 にローテーションされ、書き込み不可の監査パスは起動を失敗させ、追記に失敗した場合は、その呼び出しをクリーンな成功としてではなく構造化された audit_failed エラーとして報告します。いくつかの jq レシピを紹介します。
jq -r '[.tool, .outcome] | @tsv' audit.jsonl | sort | uniq -c # session summary by tool + outcome
jq -c 'select(.files[]?.path == "notes/a.md")' audit.jsonl # history of one note
jq -c 'select(.ts > "2026-08-29T21:00:00Z" and .outcome == "ok")' audit.jsonl # what changed since a timestamp
高速かつ完全。 Seekstone は、当社のベンチマークセットにおいて list_tags、outline_note、get_backlinks、get_links をファーストクラスのツールとして公開している唯一の Obsidian MCP サーバーです。さらに 4 つの機能がそれを際立たせています。
- ローカルセマンティック検索、完全にインプロセス。
SEEKSTONE_SEMANTIC=1を設定すると、searchとcontext_packにmode: "semantic"と"hybrid"が加わります — これはオンデバイスの小型埋め込みモデルによる意味ベースの検索です (初回のみnpx -y seekstone fetch-modelでダウンロード、またはモデルを同梱したseekstone-semantic.mcpbバンドルを利用でき、実行中のサーバーはネットワークに一切アクセスしません)。さらに 0.17.0 以降は MaxSim レイトインタラクションによるリランクを備えています。当社がコミットした 10k ノートのベンチマーク Vault (150 クエリのゴールデンセット、fixture v2) において、デフォルトモデルは — 実際の検索ツールを通したエンドツーエンドの計測で — 総合 hit@5 83.3%、ホールドアウト分割で 86.7% を記録し (キーワード検索単体の 34.7% に対して)、ウォーム時の p50 は約 26 ms です。また、オプトインのpotion-retrieval-32Mモデル (SEEKSTONE_SEMANTIC_MODEL、約 129 MB) は 総合 hit@5 86.7%、ホールドアウト 86.7% を約 55 ms で達成します。当社がベンチマークした他のどのサーバーも、オフラインでネイティブ依存ゼロの埋め込みを提供していません — そして当社は同じゴールデンセット、同じ実行、コミット済みの dev/holdout 分割で代替手段を直接比較しました (コミット済みの比較、結果の読み取りは COMPETITORS-SHA-322)。obsidian-tc の Ollama をバックエンドにした単純なセマンティック検索は、ホールドアウト分割で当社をわずかに上回り (90.0% 対当社の 86.7%)、その代わりに 1 クエリあたり 169 ms、インデックス作成に 30 分を要します (当社は約 28 秒)。そしてその GraphRAG モードは当社がベンチマークした中で最高スコア (ホールドアウト 95.0%) を記録しますが、その代償として1 クエリあたり秒単位のレイテンシ (p50 2.9 秒、p95 4.2 秒 — 当社の 26〜55 ms に対して)、約 8 倍のペイロード (1 クエリあたり約 2 KB に対して 16 KB)、そしてインストールして実行する必要のある 2 つ目のサーバー (Ollama + 1 億 3700 万パラメータのモデル) を伴います。当社は #1 の座を主張するためのゲートを事前登録し (GATE-V2-SHA-316、fixture v1 で実行)、それを逃しました — この判定は、勝利であった場合と同じ目立ち方で公開されています。v2 では新しいゲートは実行されておらず、同じ条項を再計算しても同じ不合格になります。obsidian-mcp-pro は 10k ノートの Vault をまったくインデックスできませんでした (その JSON ベクターストアは、約 17 分間の埋め込み後に JavaScript の文字列長の上限を超えてしまいます)。トレードオフはご自身で選んでください — 数値はすべてコミットされています。 - 定期的なノート、ファイルシステムに直接アクセス。
get_periodic_noteとappend_periodic_noteは、日次、週次、月次、四半期、年次のノートパスを、あなたの Vault 自身の設定(.obsidian/daily-notes.jsonおよび Periodic Notes プラグイン)を読み取って解決します — Obsidian を閉じたままでも動作します。 REST ベースのサーバーはどれも、アプリが起動している間しかこれを実行できません。 - バイト単位で同一のフロントマターを保証。
patch_frontmatterは YAML をその場で編集し、キーの順序、引用スタイル、コメントを保持します。また、書き込みの安全性はテストハーネスによってバイト単位で証明されています。私たちが調査した他のどのサーバーも、この保証を提供していません。 - ゼロカップリング。 Obsidian アプリも、Local REST API プラグインも、プラグインバージョンのずれも不要です。必要なのはディスク上のあなたのファイルだけです。
設定
| 変数 | 必須 | 説明 |
|---|---|---|
SEEKSTONE_VAULT | はい | Obsidian Vault の絶対パスです。 |
SEEKSTONE_LOG_LEVEL | いいえ | error | warn | info(デフォルト)| debug。 |
SEEKSTONE_LOG_FILE | いいえ | 絶対パス。設定すると、JSON 行形式のログがここに追記されます(サイズローテーション)。 |
SEEKSTONE_LOG_MAX_SIZE | いいえ | SEEKSTONE_LOG_FILE のログローテーションしきい値(例: 10mb、デフォルト 5 MB)。 |
SEEKSTONE_WATCH_POLL | いいえ | 1 に設定すると、ネイティブの OS イベントではなく stat ポーリングで変更を検知します。低速ですが、ネットワークドライブ、WSL、一部のコンテナで確実に動作します。 |
SEEKSTONE_WATCH_POLL_INTERVAL | いいえ | stat ポーリングの間隔(ミリ秒単位、デフォルト 10000)。SEEKSTONE_WATCH_POLL=1 の場合にのみ使用されます。値を小さくすると外部からの編集をより早く検知できますが CPU 負荷が上がります。低速なネットワークマウントや 9p マウントでは値を大きくしてください。 |
SEEKSTONE_READ_ONLY | いいえ | 1 に設定すると読み取り専用で実行されます。11 個の書き込みツールはツール一覧から完全に登録解除され(呼び出された場合も拒否されます)、セッションが Vault を変更できないことが証明されます。 |
SEEKSTONE_WRITE_PATHS | いいえ | カンマ区切りの Vault 相対グロブ(例: journal/**,inbox/*.md)。一致するパス配下のみ書き込みが許可され、それ以外の Vault は読み取り専用のままです。 |
SEEKSTONE_HISTORY | いいえ | 0 に設定すると書き込みジャーナルを無効化します(デフォルトは有効)。有効な場合、各書き込みツールは操作対象の各ファイルの変更前イメージを <vault>/.seekstone/history/ 配下に保存し、undo_write でバイト単位で復元できるようにします。 |
SEEKSTONE_HISTORY_MAX_SIZE | いいえ | 保存される変更前イメージの上限(例: 100mb、デフォルト 50 MB)。最も古いエントリから順に削除され、削除後は list_writes で undoable: false と表示されます — 決して無言では削除されません。 |
SEEKSTONE_HISTORY_MAX_ENTRIES | いいえ | ジャーナルエントリの上限(デフォルト 1000)。これを超えると最も古いものから破棄されます。 |
SEEKSTONE_AUDIT_FILE | いいえ | 絶対パス。設定しない限り無効です。書き込みツールの呼び出しごとに 1 件の JSON 行形式の監査レコードを追記します — 成功または拒否のいずれも対象で、ツール、パス、変更前後の sha-256、結果、操作メタデータを含みます。ノートの内容は決して記録しません。 |
SEEKSTONE_AUDIT_MAX_SIZE | いいえ | このサイズを超えると監査ファイルを <file>.1 にローテーションします(例: 10mb、デフォルト 10 MB)。 |
SEEKSTONE_SEMANTIC | いいえ | 1 に設定するとセマンティック検索を有効化します(search と context_pack が mode: "semantic" と "hybrid" を利用可能になります)。ローカルの埋め込みモデルが必要です — npx -y seekstone fetch-model で一度ダウンロードしてください。実行中のサーバーは決してネットワークにアクセスしません。seekstone-semantic.mcpb バンドルはこれを自動的に設定し、モデルを同梱しています。 |
SEEKSTONE_SEMANTIC_MODEL | いいえ | 読み込むローカルモデルを指定します: potion-base-8M(デフォルト、約 30 MB、256 次元)または potion-retrieval-32M(約 129 MB、512 次元 — 説明文スタイルのクエリでより高精度ですが、クエリレイテンシは約 2 倍になります)。まず npx -y seekstone fetch-model --model potion-retrieval-32M で取得してください。 |
SEEKSTONE_MODEL_PATH | いいえ | Model2Vec 埋め込みモデルを格納するディレクトリ(デフォルト: fetch-model が選択されたモデルを配置する場所で、キャッシュディレクトリ配下)。 |
SEEKSTONE_CACHE_DIR | いいえ | ダウンロードしたモデルおよび Vault ごとの埋め込みキャッシュのルート(デフォルト ~/.cache/seekstone)。 |
SEEKSTONE_BUNDLED_MODEL_DIR | いいえ | seekstone-semantic.mcpb バンドルのマニフェストによって設定されます — 拡張機能内に同梱されたシャード化モデルファイルを指し、サーバーは起動時にこれをモデルディレクトリへ再構築します(ディスクのみ、固定された SHA-256 ハッシュに対して検証済み)。通常は手動で設定しません。 |
SEEKSTONE_INSTRUCTIONS | いいえ | 内容が MCP サーバーの instructions 文字列となるファイルへのパス(ツール一覧とともにクライアントへ提示されます)。相対パスは Vault ルートを基準に解決されます。起動時に一度だけ読み込まれ、トリムされ、16 KB に制限されます(それを超えると警告付きで切り詰められます)。ファイルが存在しない、読み取れない、またはトリム後に空の場合は instructions なしとなります — 起動失敗には決してなりません。 |
仕組み
Seekstone は fast-glob で Vault を走査し、各ノートのフロントマターを解析し(バイト単位を意識しているため、書き込み前後でフロントマター領域がバイト単位で同一であることを書き込み側で証明できます)、MiniSearch による全文インデックスをメモリ上に構築します。検索はノート全体ではなく、ランク付けされた短い抜粋を返します。この「ドキュメントではなく抜粋」という設計こそが、コンテキストコスト削減の成果を生む源泉です。クロスプラットフォームのファイルウォッチャー(chokidar)が、Obsidian での編集に合わせてインデックスを最新の状態に保ちます。
書き込みは設計上保守的です。append_note はフロントマターに一切触れず、patch_frontmatter は YAML ドキュメントを再シリアライズせずにその場で編集するため、キーの順序、引用符のスタイル、コメントが保持されます。
Seekstone は稼働し続けるように作られています。Seekstone は macOS、Linux、Windows 上でコミットごとに CI でテストされ、書き込みツールは病的な(ReDoS)入力に対して堅牢化されており、想定外の未処理の rejection はクラッシュさせずにログに記録されます。これにより、長時間稼働する MCP セッションは会話の途中で切断されることなく、ウォームなインデックスを維持し続けます。
コードベースをレイヤーごとに巡るツアー — パッケージ、サーバーの内部、エンドツーエンドのリクエストフロー、計測ハーネス — については、docs/ARCHITECTURE.md を参照してください。
セキュリティとプライバシー
Seekstone はローカルディスク上の SEEKSTONE_VAULT 配下のファイルを読み取り、また書き込みツールを通じて変更します。稼働中のサーバーはネットワーク呼び出しを一切行わず、テレメトリーも一切送信しません(パッケージ内で唯一のネットワーク経路は、明示的な npx -y seekstone fetch-model サブコマンドです。これはオプションのセマンティック検索モデルを SHA-256 で検証して一度だけダウンロードするもので、サービング開始前に終了します。seekstone-semantic.mcpb バンドルはモデルを内部に同梱し、起動時にディスクから再構成して同じ固定ハッシュに対して検証するため、このダウンロードすら省略します)。ログはデフォルトでメタデータのみです(ノートの内容は debug レベルでのみ現れます)。Vault の外に書き込まれるものは、設定したオプションのログファイルと、SEEKSTONE_SEMANTIC=1 の場合の ~/.cache/seekstone 配下の Vault ごとの埋め込みキャッシュ(ノートから導出されたベクトル — どこにも送信されません)以外にはありません。
書き込み安全契約
AI にノートへの書き込みアクセスを与えることは、「私たちを信じてください」以上のものを必要とします。Seekstone は名前を付けたテスト済みの契約 — docs/WRITE-SAFETY.md — を提供しています。これは10 の保証からなり、それぞれがそれを強制するコードとそれを証明するテストにリンクされており、CI 上でコミットとリリースのたびにハーネスの安全性スイートによってバイト単位で検証されます。すなわち、ネットワークゼロ、Vault サンドボックス、本文編集時のフロントマターのバイト同一性、アトミック書き込み(壊れたファイルなし)、作成が既存を上書きしないこと、復元可能な削除(.trash/)、すべての書き込みツールでのオプションの compare-and-swap、設定可能な書き込みスコープ / 読み取り専用モード、すべての書き込みを可逆にする書き込みジャーナル(undo_write)、そしてハッシュで検証可能な監査ログ — すべての書き込み呼び出しが受領証を残します。同じスイートは他の FS 直結サーバーに対してもヘッドレスで実行されます。比較表は契約書にあります。
よくある質問
Obsidian アプリは起動している必要がありますか? いいえ。Seekstone は Vault フォルダをディスクから直接読み取ります。Obsidian は起動していても終了していてもかまいません。
Local REST API プラグインは必要ですか? いいえ。Seekstone はそれを完全にバイパスします — これが最大 47,000 倍のペイロード削減の源です。プラグインは一切必要ありません。
どの AI クライアントに対応していますか? stdio 経由で Model Context Protocol(MCP)をサポートする任意のクライアント — Claude Desktop、Claude Code、Cursor、Windsurf、Continue などに対応しています。
自分の Vault で使っても安全ですか?
Seekstone は、書き込みツール(上の表にある 10 個 — create_note、append_note、patch_note、patch_frontmatter、replace_in_note、move_note、rename_heading、delete_note、append_periodic_note、undo_write)を明示的に呼び出した場合を除き、ファイルを一切変更しません。これらのツールはどれも、触れる各ファイルの変更前イメージを最初にジャーナルに記録するため、undo_write でバイト単位で元に戻せます — 前述の書き込みジャーナルに関する注記を参照してください — また、SEEKSTONE_AUDIT_FILE を設定すると、すべての書き込み呼び出しがハッシュ検証可能な監査記録を残します(拒否された試行も含まれます)。実行中のサーバーはネットワークリクエストを行いません(セマンティック検索のモデルは、明示的な fetch-model サブコマンドによって一度だけ、帯域外で取得されます)。Vault のパスはサンドボックス化されており、どのツールもその外側を読み書きできません。さらに厳格にすることもできます。SEEKSTONE_READ_ONLY=1 はセッションから書き込みツールを完全に削除し、SEEKSTONE_WRITE_PATHS は書き込みを許可したフォルダ(たとえば journal/** のみ)に制限します。どちらもツール単位ではなくディスパッチ層で適用されるため、どのツールもチェックを忘れることはありません。
Windows で動作しますか? はい。Seekstone は毎コミットの CI で macOS、Linux、Windows 上でテストされています。
検索はタイプミスに対応していますか?
はい、小さなものには。キーワード検索では、3〜7 文字の単語には 1 文字、8 文字以上の単語には 2 文字までのタイプミスを許容するため、benchamrk でも「benchmark」が見つかります。1〜2 文字の単語は完全一致が必要で、2 文字の入れ替えは 2 つのタイプミスとしてカウントされます。単語のプレフィックスにも一致します。kuber で「Kubernetes」が見つかります。search、context_pack、query_notes、list_notes の tag フィルターは Obsidian と同様に動作します。大文字と小文字を区別せず、ネストしたタグも含めるため、project は #Project/alpha に一致します。どのノートにも存在しないタグを指定すると、最も近い既存のタグを列挙した unknown_tag エラーが返されます。
どのくらいのサイズの Obsidian Vault に対応できますか? Seekstone は数千ノートの Vault に対してプロファイリング済みです。コミットされている 10,000 ノートのベンチマーク Vault では、コールドインデックス構築に数十秒かかり、プロセスの RSS は約 100 MB 未満に収まります。一般的な個人用 Vault は数秒でインデックス化されます。セマンティックモードは起動後にバックグラウンドで埋め込みを行います(10,000 ノートで約 30 秒、その後は Vault ごとにキャッシュされるため、再起動時は 1 秒未満で再読み込みされます)。
seekstone init はどのようにして私の Vault を自動的に見つけるのですか?
Obsidian 自身の Vault レジストリ(obsidian.json)を読み取ります — Obsidian が既知の Vault を追跡するために使うのと同じファイルです。Vault が 1 つだけなら自動的に選択されます。複数ある場合はそれらを一覧表示し、--vault で選択するよう求めます。
.mcpb ファイルとは何ですか?
MCP Bundle です — サーバーとそのマニフェストを含む自己完結型の zip です。インストールするには、Finder でダブルクリックするか(または右クリック → このアプリケーションで開く → Claude Desktop)、Vault を選択するだけで完了です。ターミナルも Node.js も不要です。すべてのリリースには 2 つのバリアントが同梱されています。seekstone.mcpb(標準)と seekstone-semantic.mcpb(同じサーバーにローカル埋め込みモデルを内蔵し、セマンティック検索がすぐに使える状態のもの)です。
コントリビューションと開発
コントリビューションを歓迎します。ガイドラインについては CONTRIBUTING.md を参照するか、すぐに始めてください。
npm install # install all workspace deps
npm test # run all tests
npm run lint # biome check
npm run build -w seekstone # tsup → dist/
npm run build:mcpb # build seekstone.mcpb bundle
npx vitest run packages/server/src/tools/search.test.ts # single test file
npx vitest run -t 'parses a typical frontmatter' # single test by name
npx tsc -p packages/server/tsconfig.json --noEmit # typecheck
リポジトリのレイアウト
| パッケージ | 目的 |
|---|---|
packages/server | 公開されている seekstone MCP サーバー(25 個のツール、stdio、MiniSearch インデックス、chokidar ウォッチャー)。 |
packages/core | 共有の Vault プリミティブ — walk、frontmatter パーサー、リンク/タグ抽出機能、アウトライン、パーセンタイル、pmap、および Model2Vec 埋め込み器。サーバーのビルドにバンドルされます。 |
packages/harness | 上記のペイロード数値を生成したプロファイラー + ベンチマーク + 書き込み安全性ハーネス(REST 対 ファイルシステム)。開発専用で、公開されていません。 |
サーバーには実際のビルド(tsup → dist/)があり、npm に公開されています。ハーネスは tsx を介してソースから実行されます。リリースは自動化されています — docs/RELEASING.md を参照してください。
計測ハーネス
ハーネスは、ファイルシステム直接設計の動機となったベンチマーク数値を再現するために存在します。デフォルトの再現パス(コミットされた合成 Vault に対する fs/seekstone バックエンド)には追加のものは何も必要ありません。REST を利用するバックエンド(rest、mcp-obsidian、obsidian-mcp-server)のみ、Local REST API プラグインを有効にして Obsidian を実行している必要があります。
export SEEKSTONE_VAULT="/absolute/path/to/your/vault"
npx tsx packages/harness/src/cli.ts profile --vault "$SEEKSTONE_VAULT"
npx tsx packages/harness/src/cli.ts bench \
--queries packages/harness/queries/default.json \
--stats reports/vault-stats.json
npx tsx packages/harness/src/cli.ts safety --vault "$SEEKSTONE_VAULT"
ハーネスの環境変数: SEEKSTONE_REST_API_KEY(Local REST API プラグインから取得)および SEEKSTONE_REST_URL(デフォルトは https://127.0.0.1:27124)。
サポート
Seekstone は無料のオープンソースです。コンテキスト(そしてお金)を節約できたら、コーヒーをおごってください。
ライセンス
MIT © Shaq Mughal
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。