@oomkapwn/enquire-mcp 3.10.1 → 3.11.0-rc.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (49) hide show
  1. package/CHANGELOG.md +43 -0
  2. package/README.ar.md +5 -5
  3. package/README.es.md +5 -5
  4. package/README.fr.md +334 -0
  5. package/README.hi.md +5 -5
  6. package/README.ja.md +329 -0
  7. package/README.md +9 -8
  8. package/README.pt.md +334 -0
  9. package/README.ru.md +334 -0
  10. package/README.zh.md +5 -5
  11. package/SECURITY.md +10 -0
  12. package/STABILITY.md +4 -2
  13. package/dist/cli.d.ts.map +1 -1
  14. package/dist/cli.js +2 -1
  15. package/dist/cli.js.map +1 -1
  16. package/dist/feedback.d.ts +83 -0
  17. package/dist/feedback.d.ts.map +1 -0
  18. package/dist/feedback.js +201 -0
  19. package/dist/feedback.js.map +1 -0
  20. package/dist/fts5.d.ts.map +1 -1
  21. package/dist/fts5.js +10 -1
  22. package/dist/fts5.js.map +1 -1
  23. package/dist/index.d.ts +1 -1
  24. package/dist/index.d.ts.map +1 -1
  25. package/dist/index.js +1 -1
  26. package/dist/index.js.map +1 -1
  27. package/dist/retrieval-opts.d.ts +17 -0
  28. package/dist/retrieval-opts.d.ts.map +1 -1
  29. package/dist/retrieval-opts.js +19 -0
  30. package/dist/retrieval-opts.js.map +1 -1
  31. package/dist/server.d.ts +15 -0
  32. package/dist/server.d.ts.map +1 -1
  33. package/dist/server.js +18 -3
  34. package/dist/server.js.map +1 -1
  35. package/dist/tool-manifest.d.ts +7 -5
  36. package/dist/tool-manifest.d.ts.map +1 -1
  37. package/dist/tool-manifest.js +9 -0
  38. package/dist/tool-manifest.js.map +1 -1
  39. package/dist/tool-registry.d.ts +21 -0
  40. package/dist/tool-registry.d.ts.map +1 -1
  41. package/dist/tool-registry.js +63 -2
  42. package/dist/tool-registry.js.map +1 -1
  43. package/dist/tools/search.d.ts +12 -0
  44. package/dist/tools/search.d.ts.map +1 -1
  45. package/dist/tools/search.js +31 -0
  46. package/dist/tools/search.js.map +1 -1
  47. package/docs/COMPARISON.md +4 -4
  48. package/docs/api.md +4 -2
  49. package/package.json +6 -2
package/README.ja.md ADDED
@@ -0,0 +1,329 @@
1
+ <div align="center">
2
+
3
+ <a href="https://github.com/oomkapwn/enquire-mcp"><img src="./assets/social-preview.png" alt="enquire-mcp — 最先端の Obsidian MCP。AI エージェントのための長期記憶。" width="100%"></a>
4
+
5
+ # enquire-mcp
6
+
7
+ <sub>[English](./README.md) · [中文](./README.zh.md) · [Español](./README.es.md) · [हिन्दी](./README.hi.md) · [العربية](./README.ar.md) · [Русский](./README.ru.md) · [Português](./README.pt.md) · [Français](./README.fr.md) · **日本語**</sub>
8
+
9
+ ### 最先端の Obsidian MCP。AI エージェントのための長期記憶。
10
+
11
+ **セッションのたびに Claude、Cursor、ChatGPT、Codex、OpenClaw へコンテキストを説明し直すのはもう終わりです。あなたの Obsidian ノートが、すべての MCP 対応エージェント間で共有・検索可能な記憶になります——あなたの知識を、あらゆるモデルで、永遠にあなたのものに。**
12
+
13
+ [![npm](https://img.shields.io/npm/v/@oomkapwn/enquire-mcp.svg?label=npm&color=cb3837)](https://www.npmjs.com/package/@oomkapwn/enquire-mcp)
14
+ [![stable](https://img.shields.io/badge/v3.10.x-stable-brightgreen.svg)](./STABILITY.md)
15
+ [![build provenance](https://img.shields.io/badge/build_provenance-SLSA_L2-blue.svg)](https://slsa.dev/spec/v1.0/levels#build-l2)
16
+ [![MCP](https://img.shields.io/badge/MCP-1.29-8A2BE2.svg)](https://modelcontextprotocol.io/)
17
+ [![License](https://img.shields.io/badge/license-MIT-yellow.svg)](./LICENSE)
18
+
19
+ **[⚡ 30 秒でインストール](#-クイックスタート) · [🧠 ユースケース](#-ユースケース) · [📊 ベンチマーク](./docs/benchmarks.md) · [📖 API リファレンス](https://oomkapwn.github.io/enquire-mcp/) · [💬 他の選択肢と比較](./docs/COMPARISON.md)**
20
+
21
+ **Claude Code —— 1 行で:**
22
+
23
+ ```bash
24
+ claude mcp add obsidian -- npx -y @oomkapwn/enquire-mcp serve --vault ~/Documents/Obsidian\ Vault
25
+ ```
26
+
27
+ </div>
28
+
29
+ > 📌 本ドキュメントは [README.md](./README.md) の日本語訳であり、日本語話者の読みやすさのためのものです。相違がある場合は、**英語版が正となります**(英語版は各リリースごとに更新されます)。
30
+
31
+ ---
32
+
33
+ ## 課題
34
+
35
+ すべての AI セッションはゼロから始まります。プロジェクトのこと、設計上の決定、先週のリサーチで出した結論を、何度も説明し直すことになります。ベンダーの「メモリ」機能([Claude Memory](https://www.anthropic.com/news/memory-and-tool-use)、[ChatGPT Memory](https://openai.com/index/memory-and-new-controls-for-chatgpt/)、Cursor memory)は、あなたの知識を 1 つのプロバイダーのクラウドに閉じ込め——ツールを乗り換えると、また忘れてしまいます。**あなたの知識は、いつまでも最初からやり直しのままです。**
36
+
37
+ ## 解決策
38
+
39
+ あなたの Obsidian ボールト(vault)が、あらゆる MCP 対応エージェントにとって**永続的でクエリ可能な長期記憶**になります。一度インストールするだけで——あなたの知識は、Claude Code、Claude Desktop、Cursor、ChatGPT カスタム GPT、Codex、OpenClaw、その他すべての MCP クライアントから即座にアクセス可能になります。**あなたが所有する**プレーンな markdown ファイルを、ローカルでインデックス化し、最新のフルスタックな情報検索(IR)技術で検索し、すべてのセッション・すべてのモデルをまたいで呼び戻します。
40
+
41
+ **抽出ではなく、原文に根ざす。** 会話メモリ系のツール(mem0、Zep、Supermemory、Memobase)は、あなたのチャットログから事実を*抽出*し、あなた自身が読めない別のストアに格納します。enquire-mcp はその逆です。それは**あなたがすでに書いた知識に根ざしています**——あなた自身の `.md` ノートを、一字一句そのまま、引用付きで——だから呼び戻された内容は監査可能で、どのエディタでも編集でき、半分しか覚えていないチャットの劣化した要約に決してなりません。さらに、サーバーサイドの***フリート*記憶**プラットフォーム(エージェントのトラフィックを共有データベースに言い換えて格納するマルチテナントのクラウドストア)とも異なり、enquire は**シングルユーザーかつローカルファースト**です。完全にあなたが所有し、自分で読み・編集し・削除できる 1 つのボールトであり、serve 中はクラウド呼び出しがゼロです。(この「抽出される」という批判はチャットメモリ系のグループに特有のものであり、cognee のようなナレッジグラフ / ETL ツールにも、Khoj のようなパーソナル検索系の同種ツールにも当てはまりません。)
42
+
43
+ **根ざし——かつ鮮度を意識する。** 事実を思い出すのは問題の半分にすぎません。それが*まだ真である*かどうかを知ることが、もう半分です。[Memora ベンチマーク](https://arxiv.org/abs/2604.20006)(2026 年 4 月)は、メモリシステムが古くなった事実の再利用で体系的に失敗すること——1 年前のノートを今日書かれたものであるかのように呼び戻すこと——を示しました。enquire の記憶は*あなたの本物の* markdown ファイルそのものであるため、すべての検索ヒットには、ノートのライブな最終更新時刻から導出された `age_days` と `stale` フラグが付与され、新しいノートが先に浮上するように鮮度重み付けランキング(`--recency-weight`)をオプトインできます。あなたの知識を、鮮度を意識した形で——時間の概念を持たないかたまりではなく。
44
+
45
+ > **enquire-mcp が違う理由**:
46
+ > 1. **ベンダー中立。** あなたの記憶は `.md` ファイルの中にあります。Claude から Cursor に乗り換えても——記憶は一緒についてきます。
47
+ > 2. **クラス最高峰の検索。** ハイブリッドな BM25 + 多言語埋め込み + BGE クロスエンコーダ・リランカーを RRF で融合し、HNSW + int8 量子化でスケールさせます。検索系スタートアップが構築するのと同じ IR スタックを——オープンソースで、1 つのバイナリに収めています。
48
+ > 3. **serve 中はクラウド呼び出しがゼロ。** モデルはローカルにキャッシュ(HuggingFace から一度だけダウンロード)。あなたのボールトの内容はマシンから決して出ていきません。デフォルトでエアギャップ安全。
49
+ > 4. **鮮度を意識した呼び戻し。** すべてのヒットが、そのノートがどれくらい古いかを報告します。オプトインの鮮度リランキングにより、エージェントは新しい知識を優先し、古くなった事実を再検証対象としてフラグ付けできます——これは忘却を意識したフロンティアであり、あなたのファイルがもともと持っている `mtime` の上に構築されています。
50
+
51
+ **46 ツール · 19 MCP プロンプト · 1329+ ユニットテスト · 50+ 言語 · v3.10.x 安定版 · semver 準拠 · MIT · npm ビルドプロベナンス(SLSA L2)。**
52
+
53
+ ---
54
+
55
+ ## 🏆 なぜこれが最高なのか
56
+
57
+ **他のどの Obsidian-MCP にもまったく存在しない 6 つの機能**(GraphRAG-light、スタンドアロンの `.base` 実行、HyDE、int8 量子化、late-chunking、組み込みの評価ハーネス)。**さらに、最新の IR スタック全体**(BM25 + ML 埋め込み + クロスエンコーダ・リランキング + HNSW)——競合が多くても 1 つか 2 つしか搭載していないものを丸ごと。横並びで比較:
58
+
59
+ | 機能 | enquire-mcp | Smart Connections | 他の Obsidian-MCP |
60
+ |---|:---:|:---:|:---:|
61
+ | ハイブリッド検索(BM25 + TF-IDF + ML 埋め込み、RRF 融合) | ✅ | ❌ | ❌ |
62
+ | **クロスエンコーダ・リランキング**(BGE、実測 +15.5 NDCG@10) | ✅ | ❌ | ❌ |
63
+ | **HNSW ベクトルインデックス**(10ms 未満の top-K、永続化) | ✅ | ❌ | ❌ |
64
+ | **int8 ベクトル量子化**(embed-db が約 4 分の 1 のサイズ) | ✅ | ❌ | ❌ |
65
+ | **Late-chunking** コンテキストウィンドウ化埋め込み | ✅ | ❌ | ❌ |
66
+ | **ハイブリッド検索に統合された PDF**(`[page: N]` 引用) | ✅ | ❌ | ❌ |
67
+ | **スキャン PDF の OCR**(Tesseract.js、多言語) | ✅ | ❌ | ❌ |
68
+ | **Wikilink グラフブースト**検索シグナル | ✅ | ❌ | ❌ |
69
+ | **多言語セマンティック検索**(50+ 言語、オンデバイス) | ✅ | 💰 有料 | ❌ |
70
+ | **組み込みの検索品質評価ハーネス**(NDCG、Recall、MRR、A/B マトリクス) | ✅ | ❌ | ❌ |
71
+ | **リモート MCP**(HTTP + bearer 認証 + ステートフルセッション) | ✅ | ❌ | 一部 |
72
+ | **ヒットごとのシグナル別オブザーバビリティ** | ✅ | ❌ | ❌ |
73
+ | **MCP ネイティブ**(Claude · Cursor · ChatGPT · Codex · OpenClaw · 任意のクライアント) | ✅ | ❌ Obsidian 専用 | まちまち |
74
+ | **プライバシーフィルタ**をすべての検索 + 書き込みパスで検証 | ✅ | 該当なし | ❌ |
75
+ | **46 個の本番ツール**(34 個の常時オン読み取りツール + 4 個のオプトイン + 7 個のゲート付き書き込み + 1 個のフィードバックツール) | ✅ | 該当なし | まちまち |
76
+ | **GraphRAG-light**(Louvain モジュラリティによる wikilink コミュニティ検出) | ✅ **ここだけ** | ❌ | ❌ |
77
+ | **スタンドアロンの `.base` クエリ実行**(Obsidian を起動せずに動作) | ✅ **ここだけ** | ❌ | ❌ Obsidian に委譲 |
78
+ | **HyDE 検索**(Gao et al 2023)+ サブクエスチョン分解 | ✅ **ここだけ** | ❌ | ❌ |
79
+ | **1329 ユニットテスト · PR ごとに 9 個の必須 + 5 個のアドバイザリ CI ゲート** | ✅ | 該当なし | まれ |
80
+ | **署名付きビルドプロベナンス**(npm + Sigstore、SLSA Build L2) | ✅ | 該当なし | ❌ |
81
+ | **semver 準拠の公開サーフェス**([STABILITY.md](./STABILITY.md)) | ✅ | 該当なし | ❌ |
82
+ | スタンドアロン(Obsidian プラグイン不要) | ✅ | ❌ Obsidian が必要 | まちまち |
83
+ | ライセンス | MIT、無料 | プロプライエタリ、有料 | まちまち |
84
+
85
+ <sub>比較は各プロジェクトの v3.8.x 安定版時点での公開機能に基づきます(初回スナップショット v3.7.0 / 2026-05-15;v3.8.4 で更新)。Smart Connections は有料の Obsidian プラグイン(MCP サーバーではありません)。「他の Obsidian-MCP」とは、執筆時点で GitHub 上にある公開オープンソースの Obsidian-MCP サーバーを指します。enquire-mcp のエンドツーエンド検索ベンチマークは <a href="./docs/benchmarks.md"><code>docs/benchmarks.md</code></a> で公開されています——実測の `rerank-bge` のデルタは、60 クエリのアブレーションにおいて、プレーンなハイブリッドに対して +24.7 MRR / +15.5 NDCG@10 です。</sub>
86
+
87
+ > 戦略的主張:enquire-mcp は、既存の Obsidian ボールトの上に構築する [Karpathy スタイルの LLM Wiki](https://gist.github.com/karpathy/442a6bf555914893e9891c11519de94f) のためのオープンソースバックエンドです。複利的に積み上がり、ソースまで追跡できる知識。
88
+
89
+ ---
90
+
91
+ ## ⚡ クイックスタート
92
+
93
+ ```bash
94
+ npm install -g @oomkapwn/enquire-mcp
95
+ enquire-mcp serve --vault ~/Documents/Obsidian\ Vault
96
+ ```
97
+
98
+ 任意の MCP クライアントに組み込む:
99
+
100
+ ```json
101
+ {
102
+ "mcpServers": {
103
+ "obsidian": {
104
+ "command": "npx",
105
+ "args": ["-y", "@oomkapwn/enquire-mcp", "serve", "--vault", "/path/to/vault"]
106
+ }
107
+ }
108
+ }
109
+ ```
110
+
111
+ 📂 すぐに使える設定は [`examples/`](./examples/) にあります —— **Claude Desktop**、**Cursor**、**ChatGPT カスタム GPT**(HTTP 経由のリモート MCP)、さらに評価ハーネス用のサンプルクエリセットも。
112
+
113
+ **完全なハイブリッドの威力が欲しい?** ワンコマンドでゼロタッチのオンボーディング:
114
+
115
+ ```bash
116
+ enquire-mcp setup --vault <path> # モデルをダウンロードし、FTS5 + embed-db を構築
117
+ enquire-mcp serve --vault <path> --persistent-index --enable-reranker --use-hnsw
118
+ enquire-mcp doctor --vault <path> # 色分けされた ✓/⚠/✗ のヘルスチェック
119
+ ```
120
+
121
+ ---
122
+
123
+ ## 🤖 AI エージェントで設定する —— コピペ用プロンプト
124
+
125
+ `enquire-mcp` をインストールしたら、ボールトが記憶として使えることをエージェントに伝えるために、以下のプロンプトを貼り付けてください。
126
+
127
+ <details>
128
+ <summary><b>Claude Code(ターミナル)</b> —— MCP サーバーの追加 + 最初のプロンプト</summary>
129
+
130
+ ```bash
131
+ # MCP サーバーを Claude Code の設定に追加する(一度だけ)
132
+ claude mcp add obsidian -- npx -y @oomkapwn/enquire-mcp serve --vault ~/Documents/Obsidian\ Vault
133
+ ```
134
+
135
+ その後、任意の Claude Code セッションで:
136
+
137
+ > あなたは今、私の Obsidian ボールト——私の長期記憶——を検索・読み取りする `obsidian_*` ツールを持っています。プロジェクト・決定・人物・技術的コンテキストに関する質問に答える前に、関連する語句で `obsidian_search` を呼び出してください。各事実には出典のノート(PDF の場合は `[page: N]`)を引用してください。関連するノートが見つからなければ、その旨を伝えてください——推測しないこと。
138
+
139
+ </details>
140
+
141
+ <details>
142
+ <summary><b>Claude Desktop</b> —— 設定ファイル + 最初のプロンプト</summary>
143
+
144
+ [`examples/claude-desktop-hybrid.json`](./examples/claude-desktop-hybrid.json) を Claude Desktop の MCP 設定に置きます(先にボールトのパスを編集してください)。Claude Desktop を再起動してから:
145
+
146
+ > あなたには、私の Obsidian ボールトが `obsidian_*` ツール経由で検索可能な記憶として接続されています。私がノートに関する何か——会議のコンテキスト、リサーチ、決定、日誌のエントリ——を尋ねたら、必ず最初に `obsidian_search` を確認してください。すべての事実について出典のノートパスを引用してください。
147
+
148
+ </details>
149
+
150
+ <details>
151
+ <summary><b>Cursor</b> —— MCP stdio 設定 + エージェントルール</summary>
152
+
153
+ [`examples/cursor-mcp.json`](./examples/cursor-mcp.json) を `~/.cursor/mcp.json` に置きます(ボールトのパスを編集)。`.cursorrules` ファイルまたはチャットで:
154
+
155
+ > 私がノートを持っているかもしれないトピック(アーキテクチャの決定、API 契約、ベンダー評価)に触れるコードを提案する前に、まず `obsidian_search` を呼び出してください。私の Obsidian ボールトを信頼できるコンテキストとして扱ってください。
156
+
157
+ </details>
158
+
159
+ <details>
160
+ <summary><b>ChatGPT カスタム GPT</b> —— HTTP 経由のリモート MCP</summary>
161
+
162
+ [`examples/chatgpt-actions.md`](./examples/chatgpt-actions.md) に従って、bearer 認証付きのトンネル経由で `serve-http` を公開します。カスタム GPT の指示文で:
163
+
164
+ > あなたは `obsidian_*` ツールファミリー経由で私の Obsidian ボールトへの読み取りアクセス権を持っています。私のノートにありそうなことに答える前に検索し、すべての主張について出典のファイルパスを引用してください。
165
+
166
+ </details>
167
+
168
+ <details>
169
+ <summary><b>OpenClaw / Codex / その他の任意の MCP クライアント</b></summary>
170
+
171
+ 同じ `npx -y @oomkapwn/enquire-mcp serve --vault <path>` コマンドが、あらゆる MCP 対応クライアントで動作します。サーバーエントリをどこに置くかは、各クライアント自身の MCP 設定ドキュメントを参照し、上記のいずれかのプロンプトを使ってください。
172
+
173
+ </details>
174
+
175
+ **再利用可能なエージェントルール**(任意の `AGENTS.md` / `CLAUDE.md` / `.cursorrules` に貼り付けて、エージェントがボールトを*いつ*参照すべきかを把握させる):
176
+
177
+ > 私の質問が、私自身のノート・決定・プロジェクト・人物・リサーチに触れるときは、`obsidian_*` ツール(まず `obsidian_search` から)で**最初に私の Obsidian ボールトを検索し**、すべての事実について出典のノートを引用してください。*概念的 / 言語横断 /「私が X について何と言ったか」*の呼び戻しには enquire を優先してください。正確なリテラル文字列にはプレーンな `grep` / `ripgrep` を使ってください。関連するものが何も返ってこなければ、その旨を伝えてください——推測しないこと。
178
+
179
+ ### うまく機能するクエリの例
180
+
181
+ - *「価格戦略について議論したノートをすべて見つけて、その変遷を要約して。」* —— RRF 融合 + リランカーが「変遷」をセマンティックに処理
182
+ - *「PostgreSQL と MongoDB について私が下した決定は何だった? デイリーノートを引用して。」* —— wikilink グラフブーストが中心的な決定ドキュメントを浮上させる
183
+ - *"Анализируй мои заметки о RAG за последние 3 месяца"* —— 多言語埋め込み + frontmatter の日付フィルタ
184
+ - *「LLaMA-3 論文 PDF のどのページがスケーリングについて述べている?」* —— `[page: N]` 引用付きで PDF を検索に統合
185
+ - *「私のリサーチボールトのトピック別コミュニティを見せて——どんなテーマを探求してきた?」* —— `obsidian_get_communities`(GraphRAG-light)
186
+
187
+ ---
188
+
189
+ ## 🧠 ユースケース
190
+
191
+ **1 —— AI エージェントのための長期記憶。** あなたの Obsidian ボールトを任意の MCP 対応エージェント(Claude Code、Claude Desktop、Cursor、ChatGPT、Codex、OpenClaw)に組み込みます。エージェントはこれで、あなたがこれまでに書いたすべての会議ノート・日誌エントリ・リサーチログ・決定ドキュメントに対する、永続的でセマンティックな呼び戻しを——セッション・モデル・プロバイダーをまたいで——手にします。`Claude Memory` や `ChatGPT Memory` と違って、あなたの知識は 1 つのベンダーのクラウドに閉じ込められません。あなたが所有し、自由に移行できるプレーンな markdown の中にあります。
192
+
193
+ **2 —— 個人ナレッジベース / セカンドブレイン。** ハイブリッド検索は、50 以上の言語のいずれにおいても、*どんな*言い回しに対しても正しいノートを浮上させます。2 年前のロシア語の日誌エントリについて英語で尋ねても、正しいヒットが得られます。Wikilink グラフブーストは、あなたのナレッジグラフの中心に位置するノートのランクを上げ直します。GraphRAG-light はトピック別コミュニティを浮上させます——自分が作ったことすら忘れていたつながりを発見できます。PDF は `[page: N]` 引用付きで検索に統合され、論文や会議の文字起こしが一級の記憶になります。
194
+
195
+ **3 —— エージェンティック RAG / コンテキストエンジニアリング。** `obsidian_search` はシグナル別のスコアを公開するため、エージェントは各ヒットが*なぜ*そのランクになったかを見られます。HyDE は、検索の前に曖昧なクエリを内容豊かな仮想的回答へ事前に書き換えます。サブクエスチョン分解は、マルチホップの質問(「私たちの価格戦略はどう進化し、顧客の反応はどうだったか?」)を独立したサブクエリに分解して結果を融合することで処理します。組み込みの評価ハーネス(NDCG / Recall / MRR)により、ベンダーのベンチマークを信じる代わりに、あなた自身のクエリで検索品質を測定できます。
196
+
197
+ ---
198
+
199
+ ## 🚫 enquire-mcp が適切なツール*ではない*とき
200
+
201
+ 正直に語る非目標——次のときは別のものを使ってください:
202
+
203
+ - **リテラル文字列 / 正規表現検索が欲しい。** 「この正確なトークンを見つける」には `ripgrep` / `grep` の方が速く、正確です。enquire は*概念的な*呼び戻し——類義語、言語横断、「私が X について何と言ったか」——で輝きます。両方を使いましょう。リテラルには `rg`、意味には enquire。
204
+ - **あなたの知識がノートではなくチャットログにある。** enquire はあなたが書いた markdown に*根ざして*います。チャットの文字起こしから事実を*抽出*して別のストアに格納する会話メモリ系のツール(mem0、Zep、Supermemory)は別のカテゴリです——[比較](./docs/COMPARISON.md)を参照してください。
205
+ - **マルチユーザー / ホスト型 / 同期検索が必要。** enquire は設計上ローカルファーストかつ単一ボールトです——サーバーサイドのマルチテナントインデックスはありません。
206
+ - **ソースが Markdown でも PDF でもない。** `.md` / `.canvas` / `.base` / `.pdf` は一級ですが、他の形式はまず変換が必要です。
207
+ - **GUI やアプリ内 Obsidian プラグインが欲しい。** enquire はヘッドレスな MCP サーバー / CLI です——Obsidian を*補完*するものであって、Obsidian そのものではありません。(アプリ内プラグインの選択肢は Smart Connections です。)
208
+ - **数百万のノートに対するサブミリ秒の検索が必要。** HNSW は大規模でも 10ms 未満の top-K を提供しますが、enquire は個人 / チームのボールトを対象としており、ウェブスケールのコーパスではありません。
209
+
210
+ ---
211
+
212
+ ## 📖 API リファレンス
213
+
214
+ 自動生成された **[oomkapwn.github.io/enquire-mcp の API リファレンス](https://oomkapwn.github.io/enquire-mcp/)** —— すべてのツール・プロンプト・エクスポートされたヘルパーを、完全な TSDoc(`@param` / `@returns` / `@example`)付きで掲載。[`publish-docs.yml`](https://github.com/oomkapwn/enquire-mcp/blob/main/.github/workflows/publish-docs.yml)(TypeDoc → GitHub Pages)により、`main` への push ごとにソースから再ビルドされます。構造的にドリフトしません。AI エージェントや IDE が見るのと同じ TSDoc が、公開されるものです。
215
+
216
+ ---
217
+
218
+ ## 🏗️ 検索の仕組み
219
+
220
+ ```mermaid
221
+ graph LR
222
+ Q[Query] --> S[obsidian_search]
223
+ S --> BM25[BM25 / FTS5]
224
+ S --> TFIDF[TF-IDF cosine]
225
+ S --> EMB[ML embeddings<br/>HNSW]
226
+ BM25 --> RRF{RRF fusion<br/>k=60}
227
+ TFIDF --> RRF
228
+ EMB --> RRF
229
+ RRF --> GB[Graph boost<br/>α × in-degree]
230
+ GB --> RR[BGE cross-encoder<br/>reranker]
231
+ RR --> R[Ranked hits<br/>per_signal observability]
232
+ ```
233
+
234
+ `obsidian_search` は利用可能なシグナルを自動検出し、優雅にデグレードします。Wikilink グラフブーストは、1 ステップのパーソナライズド PageRank によって top-K をリランクします。オプションのクロスエンコーダ・リランキングは top-N を再スコアリングし、実測で +15.5 NDCG@10 をもたらします。すべてのヒットは `per_signal: { bm25, tfidf, embeddings }` を返すので、それが*なぜ*ランクインしたかが分かります。
235
+
236
+ | 段階 | セットアップ | 得られるもの |
237
+ |---|---|---|
238
+ | **1** | `serve --vault <path>` | TF-IDF コサイン(セットアップ不要、即時) |
239
+ | **2** | + `--persistent-index` | + BM25 / FTS5(100ms 未満の top-10) |
240
+ | **3** | + `setup`(モデルをダウンロード + embed-db を構築) | + 多言語 ML 埋め込み |
241
+ | **4** | + `--enable-reranker` | + BGE クロスエンコーダ(実測 +15.5 NDCG@10) |
242
+ | **5** | + `--use-hnsw` | + 100 万チャンク規模での 10ms 未満の top-K |
243
+ | **6** | + `--include-pdfs` | + 上記すべてに統合された PDF |
244
+ | **7** | `serve-http --bearer-token …` | + リモート MCP(Claude.ai ウェブ、ChatGPT、Cursor HTTP、モバイル) |
245
+
246
+ ---
247
+
248
+ ## 🛠️ 46 ツールすべて
249
+
250
+ 合計 46 ツール:34 個の常時オン読み取り(アンブレラの `obsidian_search` を含む)+ 4 個のオプトイン読み取り + 7 個のゲート付き書き込み + 1 個のクローズドループ・フィードバック。完全なリファレンス:**[docs/api.md](./docs/api.md)**。
251
+
252
+ | カテゴリ | ツール |
253
+ |---|---|
254
+ | **検索 & 取得** | `obsidian_search`(アンブレラ、RRF 融合) · `obsidian_hyde_search`(HyDE 強化、v3.1.0) · `obsidian_search_text` · `obsidian_full_text_search` · `obsidian_semantic_search` · `obsidian_embeddings_search` · `obsidian_find_similar` |
255
+ | **Wikilink & グラフ** | `obsidian_resolve_wikilink` · `obsidian_get_backlinks` · `obsidian_get_outbound_links` · `obsidian_get_note_neighbors` · `obsidian_get_unresolved_wikilinks` · `obsidian_find_path` · `obsidian_get_communities`(v3.4.0、GraphRAG-light) |
256
+ | **Frontmatter & Dataview** | `obsidian_frontmatter_get` · `obsidian_frontmatter_search` · `obsidian_dataview_query` · `obsidian_list_tags` |
257
+ | **読み取り & ナビゲート** | `obsidian_read_note` · `obsidian_list_notes` · `obsidian_get_recent_edits` · `obsidian_stale_notes` · `obsidian_open_questions` · `obsidian_context_pack` · `obsidian_chat_thread_read` · `obsidian_open_in_ui` · `obsidian_stats` |
258
+ | **PDF、Canvas & Bases** | `obsidian_read_pdf` · `obsidian_list_pdfs` · `obsidian_ocr_pdf` · `obsidian_read_canvas` · `obsidian_list_canvases` · `obsidian_list_bases`(v3.2.0) · `obsidian_read_base`(v3.2.0) · `obsidian_query_base`(v3.2.0) |
259
+ | **書き込み**(`--enable-write` でゲート) | `obsidian_create_note` · `obsidian_append_to_note` · `obsidian_rename_note` · `obsidian_replace_in_notes` · `obsidian_archive_note` · `obsidian_frontmatter_set` · `obsidian_chat_thread_append` |
260
+ | **診断 / lint** | `obsidian_lint_wiki` · `obsidian_paper_audit` · `obsidian_validate_note_proposal` |
261
+ | **フィードバック**(`--feedback-weight` でオプトイン) | `obsidian_mark_useful`(クローズドループ:どの呼び戻されたノートが役立ったかを記録し、今後の検索でそれらをブースト) |
262
+
263
+ 加えて、3 つの MCP リソース(`obsidian://vault/info`、`obsidian://note/{path}`、`obsidian://chunk/{n}/{path}`)と、一般的なボールトワークフロー向けの 19 個の **MCP プロンプト**(`summarize_recent_edits` · `review_tag` · `find_orphans` · `weekly_review` · `extract_todos` · `process_inbox` · `consolidate_tags` · `find_duplicates` · `lint_wiki` · `monthly_review` · `search_with_query_expansion` · `vault_synth` · `vault_wiki_compile` · `vault_lint_extended` · `vault_capture` · `vault_persona_search` · `vault_automation_setup` · `vault_research` · `vault_synthesis_page`)。
264
+
265
+ ---
266
+
267
+ ## 🛡️ 信頼性
268
+
269
+ | サーフェス | スタンス |
270
+ |---|---|
271
+ | **デフォルト** | 読み取り専用 —— 7 個の書き込みツールには `--enable-write` が必要 |
272
+ | **最小権限** | `--disabled-tools` / `--enabled-tools` で最小限のサーフェスを公開(例:読み取り専用のリサーチエージェントには `obsidian_search` + `obsidian_read_note` のみを付与) |
273
+ | **パス安全性** | すべての読み書きで realpath チェック;ボールト外を指すシンボリックリンクは拒否 |
274
+ | **プライバシーフィルタ** | FTS5 + embed-db + chunk リソースパスで検証;空の許可 / 拒否リストには fail-closed |
275
+ | **HTTP トランスポート** | Bearer 認証(定数時間 SHA-256 + `timingSafeEqual`)、トークン別レート制限、厳格な CORS |
276
+ | **Frontmatter** | `js-yaml@4` の `load`(YAML 1.2 コアスキーマ、デフォルトで安全)—— コード実行なし |
277
+ | **キャッシュ + インデックスファイル** | chmod 0600、親ディレクトリ 0700 |
278
+ | **CI** | **9 個の必須**ブランチ保護ゲート:(1) `lint`、(2) Node 22 での `test`、(3) Node 24 での `test`、(4) `smoke`、(5) `audit`、(6) `coverage`、(7) `version-consistency`、(8) `docs`、(9) `oia`。**5 個のアドバイザリ**:`test-macos` + `docker`(Dockerfile ビルド + `tools/list` イントロスペクションスモーク)を `.github/workflows/ci.yml` 経由で;CodeQL ×2 + Analyze アクションを [GitHub の default-setup](https://docs.github.com/code-security/code-scanning/automatically-scanning-your-code-for-vulnerabilities-and-errors/configuring-default-setup-for-code-scanning) 経由で(ワークフローファイルではありません)。リリースワークフローは、npm 公開の前に、タグ付き SHA で 9 個の必須すべてが通過したことを再検証します。_v3.7.10 —— `docs`(TypeDoc 生成ゲート)を必須セットに追加。v3.7.13 —— CI マトリクスに合わせて `engines.node` の下限を `>=22.13.0` に引き上げ。v3.8.0-rc.6 —— `oia`(Outside-In Audit)をアドバイザリから昇格。_ |
279
+ | **カバレッジ** | 行 ≥86% · ステートメント ≥82% · 関数 ≥75% · 分岐 ≥74%(ゲート付き) |
280
+ | **リリース** | タグごとに npm + GitHub リリース · semver · **署名付きビルドプロベナンス**(npm + Sigstore、SLSA Build L2;L3 ジェネレータはロードマップ上) |
281
+ | **安定性** | v3.0+ semver 準拠 —— すべての CLI フラグ、ツール名、MCP リソース、プロンプト、エクスポートシンボルが契約 |
282
+
283
+ 完全なスタンス:**[SECURITY.md](./SECURITY.md)** · 安定性サーフェス:**[STABILITY.md](./STABILITY.md)** · 脆弱性:`oomkapwn@gmail.com`。
284
+
285
+ ---
286
+
287
+ ## ❓ FAQ
288
+
289
+ **Obsidian のインストールは必要?** いいえ。`.md` + `.canvas` + `.pdf` を直接読み取ります。任意の Obsidian 形式のボールトに対して動作します。
290
+
291
+ **私のボールトに書き込む?** `--enable-write` を渡さない限り、書き込みません。7 個の書き込みツールはすべてゲート付きで、破壊的なものは `dry_run` をサポートします。
292
+
293
+ **データはどこかに送信される?** `enquire-mcp install-model`(HuggingFace から ONNX の重みを一度だけダウンロード)の時だけです。serve モードは外向きの HTTP を一切行いません。埋め込みとリランカーはローカルの CPU で実行されます。
294
+
295
+ **パフォーマンスは?** FTS5 のコールドビルド:ノート 1k あたり約 5 秒、50k あたり約 30 秒。BM25 クエリ:常に 100ms 未満。**HNSW top-10:どんな規模でも 10ms 未満。** serve のコールドスタート:HNSW 永続化で約 50ms。
296
+
297
+ **言語は?** デフォルトは `paraphrase-multilingual-MiniLM-L12-v2`(50+ 言語)。多言語クロスエンコーダ。ロシア語 + 英語のバイリンガルボールトでエンドツーエンドに検証済み。CJK / タイ語 / クメール語のトークン化は `Intl.Segmenter` 経由。
298
+
299
+ **リモートで実行できる?** はい —— `serve-http` は同じサーバーを [Streamable HTTP](https://modelcontextprotocol.io/specification/2025-06-18/basic/transports#streamable-http) 経由で公開します。HTTPS には Tailscale Funnel または Cloudflare Tunnel を前段に置いてください。claude.ai ウェブ、ChatGPT カスタム GPT、Cursor の HTTP モード、モバイルの MCP クライアントで動作します。**[docs/http-transport.md](./docs/http-transport.md)** を参照してください。
300
+
301
+ ---
302
+
303
+ ## 🚀 リリース
304
+
305
+ **v3.0.0 —— 安定チャネル。** v2.x の検索ロードマップは完了し、公開サーフェスは [semver 準拠](./STABILITY.md) になりました。ハイライト:
306
+
307
+ `v2.0` ハイブリッド検索(BM25+TF-IDF+埋め込みを RRF で) · `v2.6` リモート MCP · `v2.7-2.8` PDF 統合 · `v2.9` BGE リランカー · `v2.10` OCR · `v2.11` doctor + setup · `v2.12` 評価ハーネス · `v2.13` HNSW · `v2.14` ステートフルセッション · `v2.15` late-chunking · `v2.16` HNSW 永続化 · `v2.17` int8 量子化 · `v3.8.0` 安定版 · `v3.8.7` HTTP トランスポート強化 · **`v3.9.0` 安定版**:OCR された PDF のウォッチャー embed-sync、ファイル変更時の HNSW インメモリライブ更新、R-10 適応的 HNSW リフィル(>66% 除外時のアンダーリターンを解消)。 · **`v3.10`(`@rc`)**:忘却を意識した鮮度 —— `age_days` + `stale` フラグ + オプトインの `--recency-weight` リランキング + frontmatter を意識した `obsidian_search`。
308
+
309
+ チャネル:`npm install @oomkapwn/enquire-mcp` → 最新安定版(`@latest` = v3.10.x)。プレリリース:`npm install @oomkapwn/enquire-mcp@rc`(最新のリリース候補 —— [CHANGELOG.md](./CHANGELOG.md) を参照)。完全な変更履歴:**[CHANGELOG.md](./CHANGELOG.md)** · 今後の計画:**[ROADMAP.md](https://github.com/oomkapwn/enquire-mcp/blob/main/ROADMAP.md)**。
310
+
311
+ ---
312
+
313
+ ## 🤝 コントリビュート
314
+
315
+ ```bash
316
+ git clone https://github.com/oomkapwn/enquire-mcp.git
317
+ cd enquire-mcp && npm install
318
+ npm test # フルスイート(1329 テスト、約 12 秒)
319
+ npm run lint # 警告ゼロ
320
+ npm run build # tsc → dist/
321
+ ```
322
+
323
+ Issue、PR、アイデアを歓迎します。ブランチ保護により `main` への PR レビューが必須です。
324
+
325
+ ---
326
+
327
+ ## 📜 ライセンス
328
+
329
+ MIT。[Alex (@OomkaBear)](https://github.com/oomkapwn) が制作。[Tim Berners-Lee の 1980 年の WWW プロトタイプ](https://en.wikipedia.org/wiki/ENQUIRE) —— ウェブ以前の、オリジナルのハイパーテキストシステム —— にちなんで名付けられました。当初の仕様はこうでした:あなたはシステムに何でも尋ねることができる。**enquire-mcp はそれをあなたのボールトにもたらします。**
package/README.md CHANGED
@@ -4,7 +4,7 @@
4
4
 
5
5
  # enquire-mcp
6
6
 
7
- <sub>**English** · [中文](./README.zh.md) · [Español](./README.es.md) · [हिन्दी](./README.hi.md) · [العربية](./README.ar.md)</sub>
7
+ <sub>**English** · [中文](./README.zh.md) · [Español](./README.es.md) · [हिन्दी](./README.hi.md) · [العربية](./README.ar.md) · [Русский](./README.ru.md) · [Português](./README.pt.md) · [Français](./README.fr.md) · [日本語](./README.ja.md)</sub>
8
8
 
9
9
  <sub>**TL;DR for AI agents** — MCP server exposing a local Obsidian markdown vault to Claude Code, Claude Desktop, Cursor, ChatGPT, Codex, and OpenClaw as persistent searchable memory. Hybrid retrieval (BM25 + ML embeddings + BGE reranker, RRF-fused), HNSW + int8 quantization, agentic RAG (HyDE + sub-question), GraphRAG-light, PDFs + OCR, standalone Bases. Vendor-neutral, MIT, zero cloud calls during serve. Install: `npm i -g @oomkapwn/enquire-mcp`. Docs: [llms.txt](https://github.com/oomkapwn/enquire-mcp/blob/main/llms.txt) · [AGENTS.md](https://github.com/oomkapwn/enquire-mcp/blob/main/AGENTS.md) · [API](https://oomkapwn.github.io/enquire-mcp/).</sub>
10
10
 
@@ -15,7 +15,7 @@
15
15
  [![CI](https://github.com/oomkapwn/enquire-mcp/actions/workflows/ci.yml/badge.svg)](https://github.com/oomkapwn/enquire-mcp/actions/workflows/ci.yml)
16
16
  [![npm](https://img.shields.io/npm/v/@oomkapwn/enquire-mcp.svg?label=npm&color=cb3837)](https://www.npmjs.com/package/@oomkapwn/enquire-mcp)
17
17
  [![downloads](https://img.shields.io/npm/dm/@oomkapwn/enquire-mcp.svg?color=cb3837)](https://www.npmjs.com/package/@oomkapwn/enquire-mcp)
18
- [![tests](https://img.shields.io/badge/tests-1313%20passing-brightgreen.svg)](#trust)
18
+ [![tests](https://img.shields.io/badge/tests-1331%20passing-brightgreen.svg)](#trust)
19
19
  [![stable](https://img.shields.io/badge/v3.10.x-stable-brightgreen.svg)](./STABILITY.md)
20
20
  [![build provenance](https://img.shields.io/badge/build_provenance-SLSA_L2-blue.svg)](https://slsa.dev/spec/v1.0/levels#build-l2)
21
21
  [![MCP](https://img.shields.io/badge/MCP-1.29-8A2BE2.svg)](https://modelcontextprotocol.io/)
@@ -51,7 +51,7 @@ Your Obsidian vault becomes **persistent, queryable long-term memory** for any M
51
51
  > 3. **Zero cloud calls during serve.** Models cached locally (one-time download from HuggingFace). Your vault content never leaves your machine. Air-gap-safe by default.
52
52
  > 4. **Freshness-aware recall.** Every hit reports how old the note is; opt-in recency re-ranking lets an agent prefer fresh knowledge and flag stale facts for re-verification — the forgetting-aware frontier, built on the `mtime` your files already have.
53
53
 
54
- **45 tools · 19 MCP prompts · 1313 unit tests · 50+ languages · v3.10.x stable · semver-bound · MIT · npm build provenance (SLSA L2).**
54
+ **46 tools · 19 MCP prompts · 1331 unit tests · 50+ languages · v3.10.x stable · semver-bound · MIT · npm build provenance (SLSA L2).**
55
55
 
56
56
  ---
57
57
 
@@ -75,11 +75,11 @@ Your Obsidian vault becomes **persistent, queryable long-term memory** for any M
75
75
  | **Per-signal observability** per hit | ✅ | ❌ | ❌ |
76
76
  | **MCP-native** (Claude · Cursor · ChatGPT · Codex · OpenClaw · any client) | ✅ | ❌ Obsidian-only | varies |
77
77
  | **Privacy filter** verified at every search + write path | ✅ | n/a | ❌ |
78
- | **45 production tools** (34 always-on read tools + 4 opt-in + 7 gated writes) | ✅ | n/a | varies |
78
+ | **46 production tools** (34 always-on read tools + 4 opt-in + 7 gated writes + 1 feedback tool) | ✅ | n/a | varies |
79
79
  | **GraphRAG-light** (wikilink community detection via Louvain modularity) | ✅ **only here** | ❌ | ❌ |
80
80
  | **Standalone `.base` query execution** (works without Obsidian running) | ✅ **only here** | ❌ | ❌ delegates to Obsidian |
81
81
  | **HyDE retrieval** (Gao et al 2023) + sub-question decomposition | ✅ **only here** | ❌ | ❌ |
82
- | **1313 unit tests · 9 required + 5 advisory CI gates per PR** | ✅ | n/a | rare |
82
+ | **1331 unit tests · 9 required + 5 advisory CI gates per PR** | ✅ | n/a | rare |
83
83
  | **Signed build provenance** (npm + Sigstore, SLSA Build L2) | ✅ | n/a | ❌ |
84
84
  | **Semver-bound public surface** ([STABILITY.md](./STABILITY.md)) | ✅ | n/a | ❌ |
85
85
  | Standalone (no Obsidian plugin needed) | ✅ | ❌ requires Obsidian | varies |
@@ -248,9 +248,9 @@ graph LR
248
248
 
249
249
  ---
250
250
 
251
- ## 🛠️ All 45 tools
251
+ ## 🛠️ All 46 tools
252
252
 
253
- The umbrella `obsidian_search` plus 43 specialized tools (34 always-on read + 4 opt-in + 7 gated writes). Full reference: **[docs/api.md](./docs/api.md)**.
253
+ 46 tools total: 34 always-on read (incl. the umbrella `obsidian_search`) + 4 opt-in read + 7 gated writes + 1 closed-loop feedback. Full reference: **[docs/api.md](./docs/api.md)**.
254
254
 
255
255
  | Category | Tools |
256
256
  |---|---|
@@ -261,6 +261,7 @@ The umbrella `obsidian_search` plus 43 specialized tools (34 always-on read + 4
261
261
  | **PDFs, Canvas & Bases** | `obsidian_read_pdf` · `obsidian_list_pdfs` · `obsidian_ocr_pdf` · `obsidian_read_canvas` · `obsidian_list_canvases` · `obsidian_list_bases` (v3.2.0) · `obsidian_read_base` (v3.2.0) · `obsidian_query_base` (v3.2.0) |
262
262
  | **Writes** (gated by `--enable-write`) | `obsidian_create_note` · `obsidian_append_to_note` · `obsidian_rename_note` · `obsidian_replace_in_notes` · `obsidian_archive_note` · `obsidian_frontmatter_set` · `obsidian_chat_thread_append` |
263
263
  | **Diagnostic / lint** | `obsidian_lint_wiki` · `obsidian_paper_audit` · `obsidian_validate_note_proposal` |
264
+ | **Feedback** (opt-in via `--feedback-weight`) | `obsidian_mark_useful` (closed-loop: record which recalled notes helped; boosts them in future search) |
264
265
 
265
266
  Plus 3 MCP resources (`obsidian://vault/info`, `obsidian://note/{path}`, `obsidian://chunk/{n}/{path}`) and 19 **MCP prompts** (`summarize_recent_edits` · `review_tag` · `find_orphans` · `weekly_review` · `extract_todos` · `process_inbox` · `consolidate_tags` · `find_duplicates` · `lint_wiki` · `monthly_review` · `search_with_query_expansion` · `vault_synth` · `vault_wiki_compile` · `vault_lint_extended` · `vault_capture` · `vault_persona_search` · `vault_automation_setup` · `vault_research` · `vault_synthesis_page`) for common vault workflows.
266
267
 
@@ -317,7 +318,7 @@ Channel: `npm install @oomkapwn/enquire-mcp` → latest stable (`@latest` = v3.1
317
318
  ```bash
318
319
  git clone https://github.com/oomkapwn/enquire-mcp.git
319
320
  cd enquire-mcp && npm install
320
- npm test # full suite (1313 tests, ~12s)
321
+ npm test # full suite (1331 tests, ~12s)
321
322
  npm run lint # zero warnings
322
323
  npm run build # tsc → dist/
323
324
  ```