@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.
- package/CHANGELOG.md +43 -0
- package/README.ar.md +5 -5
- package/README.es.md +5 -5
- package/README.fr.md +334 -0
- package/README.hi.md +5 -5
- package/README.ja.md +329 -0
- package/README.md +9 -8
- package/README.pt.md +334 -0
- package/README.ru.md +334 -0
- package/README.zh.md +5 -5
- package/SECURITY.md +10 -0
- package/STABILITY.md +4 -2
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +2 -1
- package/dist/cli.js.map +1 -1
- package/dist/feedback.d.ts +83 -0
- package/dist/feedback.d.ts.map +1 -0
- package/dist/feedback.js +201 -0
- package/dist/feedback.js.map +1 -0
- package/dist/fts5.d.ts.map +1 -1
- package/dist/fts5.js +10 -1
- package/dist/fts5.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/retrieval-opts.d.ts +17 -0
- package/dist/retrieval-opts.d.ts.map +1 -1
- package/dist/retrieval-opts.js +19 -0
- package/dist/retrieval-opts.js.map +1 -1
- package/dist/server.d.ts +15 -0
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +18 -3
- package/dist/server.js.map +1 -1
- package/dist/tool-manifest.d.ts +7 -5
- package/dist/tool-manifest.d.ts.map +1 -1
- package/dist/tool-manifest.js +9 -0
- package/dist/tool-manifest.js.map +1 -1
- package/dist/tool-registry.d.ts +21 -0
- package/dist/tool-registry.d.ts.map +1 -1
- package/dist/tool-registry.js +63 -2
- package/dist/tool-registry.js.map +1 -1
- package/dist/tools/search.d.ts +12 -0
- package/dist/tools/search.d.ts.map +1 -1
- package/dist/tools/search.js +31 -0
- package/dist/tools/search.js.map +1 -1
- package/docs/COMPARISON.md +4 -4
- package/docs/api.md +4 -2
- package/package.json +6 -2
package/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,49 @@
|
|
|
2
2
|
|
|
3
3
|
All notable changes to this project will be documented here. The format follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/), and the project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
4
4
|
|
|
5
|
+
## [3.11.0-rc.2] — 2026-06-22
|
|
6
|
+
|
|
7
|
+
> **TL;DR:** **Internationalization round 2 — README now in 9 languages.** Added **Russian** (`README.ru.md`), **Brazilian Portuguese** (`README.pt.md`), **French** (`README.fr.md`), and **Japanese** (`README.ja.md`) alongside English + 中文 + Español + हिन्दी + العربية. Every README carries a **9-way language switcher**; the four new files ship in the npm tarball, and the existing structural guards were extended to cover them. Docs only — no code/API change. **1331 tests unchanged** (the i18n invariants are data-driven, no new `it()`).
|
|
8
|
+
|
|
9
|
+
### Added
|
|
10
|
+
|
|
11
|
+
- **README translations for Russian, Portuguese, French, and Japanese** (`README.ru.md`, `README.pt.md`, `README.fr.md`, `README.ja.md`) — full translations of the English README with badges, links, code blocks, CLI flags, and tool names preserved verbatim; only prose translated. Generated via a 4-agent parallel translation Workflow. With the existing EN/zh/es/hi/ar, enquire's README now covers **9 of the most-spoken languages**.
|
|
12
|
+
- **9-way language switcher** (`[English] · [中文] · [Español] · [हिन्दी] · [العربية] · [Русский] · [Português] · [Français] · [日本語]`) on every README (current language bolded). All four new files in `package.json` `files[]`.
|
|
13
|
+
|
|
14
|
+
### Tests (1331)
|
|
15
|
+
|
|
16
|
+
- The per-language numeric-claim invariant (tools/prompts exact, tests `N+` lower bound) extended to ru/pt/fr/ja — the Russian regex matches `1329+ модульных тестов`, the Japanese the spaced `MCP プロンプト`. The switcher cross-link guard extended from 5 → **9 READMEs** (each links the other 8, bolds itself). Both are data-driven (no new `it()`), so the canonical count stays **1331**.
|
|
17
|
+
|
|
18
|
+
---
|
|
19
|
+
|
|
20
|
+
## [3.11.0-rc.1] — 2026-06-22
|
|
21
|
+
|
|
22
|
+
> **TL;DR:** **Closed-loop retrieval feedback (the "Karpathy loop") — the 46th tool, opt-in.** New `obsidian_mark_useful` (gated by `--feedback-weight <0..1>`, default **0 = OFF**): an agent records which recalled notes actually helped a query; the recorded usefulness then gently boosts those notes in subsequent `obsidian_search` results — a provable no-op at weight 0, mirroring the rc.5 recency boost. State lives in a per-vault cache sidecar (relative paths + counts only — **no note content, no query text**), erased by `prune`. Ships on `@rc`; `@latest` promotion is maintainer-gated. **45 → 46 tools · 1313 → 1331 tests.** No API breaks (additive minor).
|
|
23
|
+
|
|
24
|
+
### Added
|
|
25
|
+
|
|
26
|
+
- **`obsidian_mark_useful` (46th tool, opt-in via `--feedback-weight`)** — closes the retrieval feedback loop. The agent passes the `path`(s) of the search hits that actually helped (or `useful: false` for ones that looked relevant but didn't); the per-note tally feeds a Laplace-smoothed score `useful/(useful+notUseful+1)`.
|
|
27
|
+
- **`--feedback-weight <w>`** (in `addAdvancedRetrievalOptions`, so both `serve` + `serve-http` accept it). When `w > 0`, registers the tool and blends feedback into the fused `obsidian_search` order: `(1-w)·relevanceRank + w·feedbackScore`, applied AFTER recency re-ranking. `w = 0` (default) is a provable no-op — no tool registered, ranking stays purely relevance-driven.
|
|
28
|
+
- New leaf module `src/feedback.ts` (`FeedbackStore` + `defaultFeedbackFile` + `feedbackScore`). The store loads once in `prepareServerDeps` (shared across HTTP sessions so a mark in one session influences the boost in all — an in-session closed loop), persists atomically (tmp + rename), and is capped at `MAX_FEEDBACK_ENTRIES` (100,000) to bound disk growth.
|
|
29
|
+
|
|
30
|
+
### Privacy / security
|
|
31
|
+
|
|
32
|
+
- The feedback sidecar (`<vault-hash>.feedback.json`) holds **only** relative note paths + integer counts + an ISO timestamp — never note content or query text (lower sensitivity than `.fts5.db` / `.embed.db`). `0600`, atomic writes.
|
|
33
|
+
- **Right-to-erasure:** the sidecar matches the `ENQUIRE_CACHE_ARTIFACT` pattern, so a cross-vault `enquire-mcp prune` erases a decommissioned vault's feedback (+ any `.tmp` leftover) — pinned by the erasure-completeness invariant. Preserved across `clear-cache` (user-generated signal, not regenerable cache). New SECURITY.md section "Closed-loop feedback store: data-at-rest posture".
|
|
34
|
+
- **K-3:** `obsidian_mark_useful` is annotated `...WRITE` (honest `readOnlyHint: false`, consistent with the additive `obsidian_append_to_note`) via a named `markUseful` handler. It mutates the feedback STORE, not the vault — so it's gated by `--feedback-weight`, not `--enable-write`.
|
|
35
|
+
- **Pre-ship adversarial audit** (4 lenses × 3-skeptic verify; 0 CRIT/0 HIGH) hardened two `FeedbackStore.persist()` issues before tag: (1) it now creates the cache dir `0700` + chmods it when it's the creator (mirroring the sibling cache writers, so SECURITY.md's "Parent dir mode is 0700" holds even when feedback is the first writer to materialize `<cache>/enquire`); (2) writes are **serialized** behind a per-store promise chain — the store is shared across serve-http sessions and the SDK dispatches concurrently, so unsynchronized writes to the shared `.tmp` could interleave into a torn file that the fail-soft `open()` would silently discard. The 4 translated-README breakdown sentences were also corrected to the 46-tool count. +2 tests (dir-mode + 25-way concurrent-persist).
|
|
36
|
+
|
|
37
|
+
### Tests (1331)
|
|
38
|
+
|
|
39
|
+
- `tests/feedback.test.ts` (+16): the store (open/record/scores/cap/fail-soft/atomic-persist), `defaultFeedbackFile` dir+hash parity with `defaultIndexFile`, prune erasure of the feedback family, and the `searchHybrid` boost — a PROVABLE no-op at weight 0 + a marked note rising at weight 1, each with a NEGATIVE control.
|
|
40
|
+
- Erasure-invariant gains the feedback family (writers ⊆ prune-eraser); K-3 `KNOWN_WRITE_HANDLERS` gains `markUseful`; cli-parity flag count 13 → 14; docs-consistency api.md-math + STABILITY-gating + llms-breakdown regexes extended for the new `feedback` term. **1313 → 1331.**
|
|
41
|
+
|
|
42
|
+
### Count cascade (45 → 46)
|
|
43
|
+
|
|
44
|
+
- `TOOL_MANIFEST` gains a `feedback` kind + `--feedback-weight` gating; STABILITY.md (+ Feedback section), `docs/api.md` (tool table + flag table + count math), README.md + all four translations (zh/es/hi/ar), llms.txt, AGENTS.md, COMPARISON.md, ROADMAP.md all updated to 46. All numeric-claim invariants stay green.
|
|
45
|
+
|
|
46
|
+
---
|
|
47
|
+
|
|
5
48
|
## [3.10.1] — 2026-06-22
|
|
6
49
|
|
|
7
50
|
> **TL;DR:** **Internationalization — README in the top-5 most-spoken languages.** Added full **Spanish** (`README.es.md`), **Hindi** (`README.hi.md`), and **Arabic** (`README.ar.md`, RTL) translations alongside English + 中文, with a 5-way language switcher on every README, npm `files[]` inclusion, and structural guards (per-language numeric-claim invariants + a switcher cross-link guard). Docs only — no code/API change. **1311 → 1313 tests** (+2 invariants).
|
package/README.ar.md
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
|
|
5
5
|
# enquire-mcp
|
|
6
6
|
|
|
7
|
-
<sub>[English](./README.md) · [中文](./README.zh.md) · [Español](./README.es.md) · [हिन्दी](./README.hi.md) ·
|
|
7
|
+
<sub>[English](./README.md) · [中文](./README.zh.md) · [Español](./README.es.md) · [हिन्दी](./README.hi.md) · **العربية** · [Русский](./README.ru.md) · [Português](./README.pt.md) · [Français](./README.fr.md) · [日本語](./README.ja.md)</sub>
|
|
8
8
|
|
|
9
9
|
### أكثر خوادم Obsidian MCP تطوّراً. ذاكرة طويلة الأمد لوكلاء الذكاء الاصطناعي.
|
|
10
10
|
|
|
@@ -54,7 +54,7 @@ claude mcp add obsidian -- npx -y @oomkapwn/enquire-mcp serve --vault ~/Document
|
|
|
54
54
|
> 3. **صفر استدعاءات سحابية أثناء التشغيل.** النماذج مخزّنة محلياً (تنزيل لمرة واحدة من HuggingFace). محتوى مكتبتك لا يغادر جهازك أبداً. آمنة للعمل المعزول (air-gap) افتراضياً.
|
|
55
55
|
> 4. **استدعاء واعٍ بالحداثة.** تُبلّغ كل نتيجة عن عمر الملاحظة؛ وإعادة الترتيب الاختيارية بالحداثة تتيح للوكيل تفضيل المعرفة الحديثة ووسم الحقائق القديمة لإعادة التحقق — حدود "الوعي بالنسيان"، مبنيّة على `mtime` الذي تملكه ملفاتك أصلاً.
|
|
56
56
|
|
|
57
|
-
**
|
|
57
|
+
**46 أداة · 19 موجِّه MCP · 1311+ اختبار وحدة · 50+ لغة · إصدار مستقر v3.10.x · مُقيَّد بالـ semver · MIT · إثبات بناء npm (SLSA L2).**
|
|
58
58
|
|
|
59
59
|
</div>
|
|
60
60
|
|
|
@@ -152,7 +152,7 @@ enquire-mcp doctor --vault <path> # color-coded ✓/⚠/✗ health check
|
|
|
152
152
|
| **MCP بعيد** (HTTP + bearer auth + جلسات ذات حالة) | ✅ | ❌ | جزئي |
|
|
153
153
|
| **MCP أصيل** (Claude · Cursor · ChatGPT · Codex · OpenClaw · أي عميل) | ✅ | ❌ Obsidian فقط | متفاوت |
|
|
154
154
|
| **مرشّح خصوصية** مُتحقَّق منه عند كل مسار بحث + كتابة | ✅ | غير منطبق | ❌ |
|
|
155
|
-
| **
|
|
155
|
+
| **46 أداة إنتاجية** (34 أداة قراءة دائمة + 4 اختيارية + 7 كتابات محكومة + 1 تغذية راجعة) | ✅ | غير منطبق | متفاوت |
|
|
156
156
|
| **GraphRAG-light** (كشف مجتمعات بمعامل Louvain) | ✅ **حصرياً هنا** | ❌ | ❌ |
|
|
157
157
|
| **تنفيذ استعلام `.base` مستقل** (يعمل دون تشغيل Obsidian) | ✅ **حصرياً هنا** | ❌ | ❌ |
|
|
158
158
|
| **استرجاع HyDE** + تفكيك الأسئلة الفرعية | ✅ **حصرياً هنا** | ❌ | ❌ |
|
|
@@ -192,11 +192,11 @@ enquire-mcp doctor --vault <path> # color-coded ✓/⚠/✗ health check
|
|
|
192
192
|
|
|
193
193
|
---
|
|
194
194
|
|
|
195
|
-
## 🛠️ جميع الأدوات الـ
|
|
195
|
+
## 🛠️ جميع الأدوات الـ 46
|
|
196
196
|
|
|
197
197
|
<div dir="rtl" align="right">
|
|
198
198
|
|
|
199
|
-
|
|
199
|
+
46 أداة إجمالاً: 34 قراءة دائمة (بما في ذلك المدخل الجامع `obsidian_search`) + 4 اختيارية + 7 كتابات محكومة + 1 تغذية راجعة بحلقة مغلقة. المرجع الكامل في **[docs/api.md](./docs/api.md)**، ويشمل: البحث والاسترجاع، وWikilink والرسم، وFrontmatter وDataview، وCanvas، وObsidian Bases، وPDF + OCR، وكشف المجتمعات، وأدوات الكتابة (تتطلب `--enable-write`) وغيرها.
|
|
200
200
|
|
|
201
201
|
</div>
|
|
202
202
|
|
package/README.es.md
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
|
|
5
5
|
# enquire-mcp
|
|
6
6
|
|
|
7
|
-
<sub>[English](./README.md) · [中文](./README.zh.md) · **Español** · [हिन्दी](./README.hi.md) · [العربية](./README.ar.md)</sub>
|
|
7
|
+
<sub>[English](./README.md) · [中文](./README.zh.md) · **Español** · [हिन्दी](./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
|
### El MCP de Obsidian más avanzado. Memoria a largo plazo para agentes de IA.
|
|
10
10
|
|
|
@@ -48,7 +48,7 @@ Tu bóveda de Obsidian se convierte en **memoria a largo plazo persistente y con
|
|
|
48
48
|
> 3. **Cero llamadas a la nube durante el servicio.** Modelos en caché local (una descarga única desde HuggingFace). El contenido de tu bóveda nunca sale de tu máquina. Seguro para entornos aislados por defecto.
|
|
49
49
|
> 4. **Recuperación consciente de la frescura.** Cada resultado informa de la antigüedad de la nota; el reordenamiento por recencia opcional permite que un agente prefiera el conocimiento reciente y marque los hechos obsoletos para reverificación: la frontera consciente del olvido, construida sobre el `mtime` que tus archivos ya tienen.
|
|
50
50
|
|
|
51
|
-
**
|
|
51
|
+
**46 herramientas · 19 prompts MCP · 1311+ pruebas unitarias · 50+ idiomas · v3.10.x estable · ligado a semver · MIT · procedencia de compilación en npm (SLSA L2).**
|
|
52
52
|
|
|
53
53
|
---
|
|
54
54
|
|
|
@@ -124,7 +124,7 @@ No-objetivos honestos: recurre a otra cosa cuando:
|
|
|
124
124
|
| **MCP remoto** sobre HTTP + autenticación bearer + sesiones con estado | ✅ | ❌ | parcial |
|
|
125
125
|
| **Nativo de MCP** (Claude · Cursor · ChatGPT · Codex · OpenClaw · cualquier cliente) | ✅ | ❌ solo Obsidian | varía |
|
|
126
126
|
| **Filtro de privacidad** verificado en cada ruta de búsqueda + escritura | ✅ | n/d | ❌ |
|
|
127
|
-
| **
|
|
127
|
+
| **46 herramientas de producción** (34 de lectura siempre activas + 4 opcionales + 7 escrituras restringidas + 1 de retroalimentación) | ✅ | n/d | varía |
|
|
128
128
|
| **GraphRAG-light** (detección de comunidades de wikilinks por modularidad de Louvain) | ✅ **solo aquí** | ❌ | ❌ |
|
|
129
129
|
| **Ejecución autónoma de consultas `.base`** (funciona sin Obsidian abierto) | ✅ **solo aquí** | ❌ | ❌ |
|
|
130
130
|
| **Recuperación HyDE** + descomposición en subpreguntas | ✅ **solo aquí** | ❌ | ❌ |
|
|
@@ -156,9 +156,9 @@ Activable por niveles, según lo que necesites:
|
|
|
156
156
|
|
|
157
157
|
---
|
|
158
158
|
|
|
159
|
-
## 🛠️ Las
|
|
159
|
+
## 🛠️ Las 46 herramientas
|
|
160
160
|
|
|
161
|
-
|
|
161
|
+
46 herramientas en total: 34 de lectura siempre activas (incl. el paraguas `obsidian_search`) + 4 opcionales + 7 escrituras restringidas + 1 de retroalimentación de bucle cerrado. Referencia completa en **[docs/api.md](./docs/api.md)**, que abarca: búsqueda y recuperación, wikilinks y grafo, frontmatter y Dataview, Canvas, Obsidian Bases, PDF + OCR, detección de comunidades, herramientas de escritura (requieren `--enable-write`), etc.
|
|
162
162
|
|
|
163
163
|
---
|
|
164
164
|
|
package/README.fr.md
ADDED
|
@@ -0,0 +1,334 @@
|
|
|
1
|
+
<div align="center">
|
|
2
|
+
|
|
3
|
+
<a href="https://github.com/oomkapwn/enquire-mcp"><img src="./assets/social-preview.png" alt="enquire-mcp — le MCP Obsidian le plus avancé. Mémoire à long terme pour les agents IA. Bâti sur votre coffre Obsidian. Open source, MCP-natif, neutre vis-à-vis des fournisseurs. Récupération hybride, reranker BGE, HNSW, PDF avec OCR. Pour Claude Code, Claude Desktop, Cursor, ChatGPT, Codex, OpenClaw." 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.ja.md)</sub>
|
|
8
|
+
|
|
9
|
+
<sub>**TL;DR pour les agents IA** — Serveur MCP qui expose un coffre markdown Obsidian local à Claude Code, Claude Desktop, Cursor, ChatGPT, Codex et OpenClaw comme une mémoire persistante interrogeable. Récupération hybride (BM25 + embeddings ML + reranker BGE, fusionnés par RRF), HNSW + quantification int8, RAG agentique (HyDE + sous-questions), GraphRAG-light, PDF + OCR, Bases autonomes. Neutre vis-à-vis des fournisseurs, MIT, zéro appel au cloud pendant le service. Installation : `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
|
+
|
|
11
|
+
### Le MCP Obsidian le plus avancé. Mémoire à long terme pour les agents IA.
|
|
12
|
+
|
|
13
|
+
**Arrêtez de réexpliquer le contexte à Claude, Cursor, ChatGPT, Codex, OpenClaw à chaque session. Vos notes Obsidian deviennent une mémoire partagée et interrogeable pour chaque agent compatible MCP — votre savoir, tous les modèles, à vous pour toujours.**
|
|
14
|
+
|
|
15
|
+
[](https://github.com/oomkapwn/enquire-mcp/actions/workflows/ci.yml)
|
|
16
|
+
[](https://www.npmjs.com/package/@oomkapwn/enquire-mcp)
|
|
17
|
+
[](https://www.npmjs.com/package/@oomkapwn/enquire-mcp)
|
|
18
|
+
[](#trust)
|
|
19
|
+
[](./STABILITY.md)
|
|
20
|
+
[](https://slsa.dev/spec/v1.0/levels#build-l2)
|
|
21
|
+
[](https://modelcontextprotocol.io/)
|
|
22
|
+
[](./LICENSE)
|
|
23
|
+
|
|
24
|
+
**[⚡ Installation en 30 secondes](#-démarrage-rapide) · [🧠 Cas d'usage](#-cas-dusage) · [📊 Benchmarks](./docs/benchmarks.md) · [📖 Référence de l'API](https://oomkapwn.github.io/enquire-mcp/) · [💬 Comparer les alternatives](./docs/COMPARISON.md)**
|
|
25
|
+
|
|
26
|
+
**Claude Code — en une seule ligne :**
|
|
27
|
+
|
|
28
|
+
```bash
|
|
29
|
+
claude mcp add obsidian -- npx -y @oomkapwn/enquire-mcp serve --vault ~/Documents/Obsidian\ Vault
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
</div>
|
|
33
|
+
|
|
34
|
+
> 📌 Ce document est la traduction française de [README.md](./README.md), pour en faciliter la lecture aux francophones ; en cas de divergence, **la version anglaise fait foi** (elle est mise à jour à chaque publication).
|
|
35
|
+
|
|
36
|
+
---
|
|
37
|
+
|
|
38
|
+
## Le problème
|
|
39
|
+
|
|
40
|
+
Chaque session d'IA repart de zéro. Vous réexpliquez votre projet, vos décisions de conception, les conclusions de la recherche de la semaine dernière. Les fonctionnalités de « mémoire » des fournisseurs ([Claude Memory](https://www.anthropic.com/news/memory-and-tool-use), [ChatGPT Memory](https://openai.com/index/memory-and-new-controls-for-chatgpt/), la mémoire de Cursor) enferment votre savoir dans le cloud d'un seul fournisseur — et l'oublient à nouveau dès que vous changez d'outil. **Votre savoir n'arrête pas de recommencer à zéro.**
|
|
41
|
+
|
|
42
|
+
## La solution
|
|
43
|
+
|
|
44
|
+
Votre coffre Obsidian devient une **mémoire à long terme persistante et interrogeable** pour tout agent compatible MCP. Une seule installation — votre savoir est instantanément accessible depuis Claude Code, Claude Desktop, Cursor, le GPT personnalisé de ChatGPT, Codex, OpenClaw et tout autre client MCP. Des fichiers markdown bruts **qui vous appartiennent**, indexés localement, interrogés avec toute la pile moderne de recherche d'information (RI), rappelés à chaque session et avec chaque modèle.
|
|
45
|
+
|
|
46
|
+
**Ancré, pas extrait.** Les outils de mémoire conversationnelle (mem0, Zep, Supermemory, Memobase) *extraient* des faits de vos journaux de chat vers un dépôt séparé que vous ne pouvez pas lire. enquire-mcp fait l'inverse : il est **ancré dans le savoir que vous avez déjà écrit** — vos propres notes `.md`, à la lettre, avec citations — de sorte que le rappel est auditable, modifiable dans n'importe quel éditeur, et jamais un résumé avec perte d'un chat dont vous vous souvenez à moitié. Et contrairement aux plateformes de mémoire de ***flotte*** côté serveur — des dépôts cloud multi-locataires qui paraphrasent le trafic des agents dans une base de données partagée — enquire est **mono-utilisateur et local-first** : un seul coffre qui vous appartient entièrement et que vous pouvez lire, modifier et supprimer vous-même, avec zéro appel au cloud pendant le service. (Cette critique de l'« extraction » vise spécifiquement la catégorie de la mémoire de chat — pas les outils de graphe de connaissances / ETL comme cognee, ni les pairs de recherche personnelle comme Khoj.)
|
|
47
|
+
|
|
48
|
+
**Ancré — et conscient de la fraîcheur.** Rappeler un fait n'est que la moitié du problème ; savoir s'il est encore *vrai* est l'autre moitié. Le [benchmark Memora](https://arxiv.org/abs/2604.20006) (avr. 2026) a montré que les systèmes de mémoire échouent systématiquement à réutiliser les faits périmés — rappeler une note vieille d'un an comme si elle avait été écrite aujourd'hui. Parce que la mémoire d'enquire *est* vos vrais fichiers markdown, chaque résultat de recherche porte `age_days` + un indicateur `stale` dérivé de l'heure de dernière modification réelle de la note, et vous pouvez activer un classement pondéré par récence (`--recency-weight`) pour que les notes plus fraîches remontent en premier. Votre savoir, conscient de la fraîcheur — et non un bloc intemporel.
|
|
49
|
+
|
|
50
|
+
> **Ce qui rend enquire-mcp différent** :
|
|
51
|
+
> 1. **Neutre vis-à-vis des fournisseurs.** Votre mémoire vit dans des fichiers `.md`. Passez de Claude à Cursor — votre mémoire vous suit.
|
|
52
|
+
> 2. **Récupération de premier ordre.** BM25 hybride + embeddings multilingues + reranker cross-encoder BGE fusionnés par RRF, mis à l'échelle avec HNSW + quantification int8. La même pile de RI qu'une startup de recherche bâtirait — open-sourcée, dans un seul binaire.
|
|
53
|
+
> 3. **Zéro appel au cloud pendant le service.** Modèles mis en cache localement (téléchargement unique depuis HuggingFace). Le contenu de votre coffre ne quitte jamais votre machine. Sûr en environnement isolé par défaut.
|
|
54
|
+
> 4. **Rappel conscient de la fraîcheur.** Chaque résultat indique l'âge de la note ; le reclassement par récence optionnel permet à un agent de préférer le savoir frais et de signaler les faits périmés à revérifier — la frontière consciente de l'oubli, bâtie sur le `mtime` que vos fichiers possèdent déjà.
|
|
55
|
+
|
|
56
|
+
**46 outils · 19 prompts MCP · 1329+ tests unitaires · 50+ langues · v3.10.x stable · lié au semver · MIT · provenance de build npm (SLSA L2).**
|
|
57
|
+
|
|
58
|
+
---
|
|
59
|
+
|
|
60
|
+
## 🏆 Pourquoi c'est le meilleur
|
|
61
|
+
|
|
62
|
+
**Six fonctionnalités qu'aucun autre Obsidian-MCP ne possède** (GraphRAG-light, exécution autonome de `.base`, HyDE, quantification int8, late-chunking, harnais d'évaluation intégré). **Plus toute la pile moderne de RI** (BM25 + embeddings ML + reranking par cross-encoder + HNSW), dont les concurrents proposent au plus un ou deux éléments. Côte à côte :
|
|
63
|
+
|
|
64
|
+
| Capacité | enquire-mcp | Smart Connections | Autres Obsidian-MCP |
|
|
65
|
+
|---|:---:|:---:|:---:|
|
|
66
|
+
| Récupération hybride (BM25 + TF-IDF + embeddings ML, fusionnés par RRF) | ✅ | ❌ | ❌ |
|
|
67
|
+
| **Reranking par cross-encoder** (BGE, +15.5 NDCG@10 mesuré) | ✅ | ❌ | ❌ |
|
|
68
|
+
| **Index vectoriel HNSW** (top-K en moins de 10 ms, persisté) | ✅ | ❌ | ❌ |
|
|
69
|
+
| **Quantification vectorielle int8** (embed-db ~4× plus petite) | ✅ | ❌ | ❌ |
|
|
70
|
+
| **Late-chunking** (embeddings à fenêtre de contexte) | ✅ | ❌ | ❌ |
|
|
71
|
+
| **PDF fondus dans la recherche hybride** (citations `[page: N]`) | ✅ | ❌ | ❌ |
|
|
72
|
+
| **OCR pour les PDF scannés** (Tesseract.js, multilingue) | ✅ | ❌ | ❌ |
|
|
73
|
+
| **Graph-boost de wikilinks** comme signal de récupération | ✅ | ❌ | ❌ |
|
|
74
|
+
| **Recherche sémantique multilingue** (50+ langues, sur l'appareil) | ✅ | 💰 payant | ❌ |
|
|
75
|
+
| **Harnais d'évaluation de la qualité de récupération intégré** (NDCG, Recall, MRR, matrice A/B) | ✅ | ❌ | ❌ |
|
|
76
|
+
| **MCP distant** sur HTTP + auth bearer + sessions à état | ✅ | ❌ | partiel |
|
|
77
|
+
| **Observabilité par signal** pour chaque résultat | ✅ | ❌ | ❌ |
|
|
78
|
+
| **MCP-natif** (Claude · Cursor · ChatGPT · Codex · OpenClaw · n'importe quel client) | ✅ | ❌ Obsidian uniquement | variable |
|
|
79
|
+
| **Filtre de confidentialité** vérifié à chaque chemin de recherche + écriture | ✅ | s.o. | ❌ |
|
|
80
|
+
| **46 outils de production** (34 outils de lecture toujours actifs + 4 optionnels + 7 écritures restreintes + 1 outil de retour) | ✅ | s.o. | variable |
|
|
81
|
+
| **GraphRAG-light** (détection de communautés de wikilinks par modularité de Louvain) | ✅ **uniquement ici** | ❌ | ❌ |
|
|
82
|
+
| **Exécution autonome de requêtes `.base`** (fonctionne sans Obsidian ouvert) | ✅ **uniquement ici** | ❌ | ❌ délègue à Obsidian |
|
|
83
|
+
| **Récupération HyDE** (Gao et al. 2023) + décomposition en sous-questions | ✅ **uniquement ici** | ❌ | ❌ |
|
|
84
|
+
| **1329 tests unitaires · 9 portes CI requises + 5 indicatives par PR** | ✅ | s.o. | rare |
|
|
85
|
+
| **Provenance de build signée** (npm + Sigstore, SLSA Build L2) | ✅ | s.o. | ❌ |
|
|
86
|
+
| **Surface publique liée au semver** ([STABILITY.md](./STABILITY.md)) | ✅ | s.o. | ❌ |
|
|
87
|
+
| Autonome (aucun plugin Obsidian requis) | ✅ | ❌ requiert Obsidian | variable |
|
|
88
|
+
| Licence | MIT, gratuit | propriétaire, payant | variable |
|
|
89
|
+
|
|
90
|
+
<sub>Comparaison fondée sur les capacités publiques de chaque projet à la date de la version stable v3.8.x (instantané initial v3.7.0 / 2026-05-15 ; actualisé en v3.8.4). Smart Connections est un plugin Obsidian payant (pas un serveur MCP). « Autres Obsidian-MCP » désigne les serveurs Obsidian-MCP publics open source présents sur GitHub au moment de la rédaction. Les benchmarks de récupération de bout en bout publics d'enquire-mcp sont publiés dans <a href="./docs/benchmarks.md"><code>docs/benchmarks.md</code></a> — le delta mesuré de `rerank-bge` est de +24.7 MRR / +15.5 NDCG@10 par rapport à l'hybride pur sur une ablation de 60 requêtes.</sub>
|
|
91
|
+
|
|
92
|
+
> Affirmation stratégique : enquire-mcp est le backend open source des [wikis LLM façon Karpathy](https://gist.github.com/karpathy/442a6bf555914893e9891c11519de94f) bâtis sur votre coffre Obsidian existant. Un savoir qui se cumule, traçable jusqu'aux sources.
|
|
93
|
+
|
|
94
|
+
---
|
|
95
|
+
|
|
96
|
+
## ⚡ Démarrage rapide
|
|
97
|
+
|
|
98
|
+
```bash
|
|
99
|
+
npm install -g @oomkapwn/enquire-mcp
|
|
100
|
+
enquire-mcp serve --vault ~/Documents/Obsidian\ Vault
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
Connectez-le à n'importe quel client MCP :
|
|
104
|
+
|
|
105
|
+
```json
|
|
106
|
+
{
|
|
107
|
+
"mcpServers": {
|
|
108
|
+
"obsidian": {
|
|
109
|
+
"command": "npx",
|
|
110
|
+
"args": ["-y", "@oomkapwn/enquire-mcp", "serve", "--vault", "/path/to/vault"]
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
```
|
|
115
|
+
|
|
116
|
+
📂 Configurations prêtes à l'emploi dans [`examples/`](./examples/) — **Claude Desktop**, **Cursor**, **GPT personnalisé de ChatGPT** (MCP distant sur HTTP), plus un jeu de requêtes d'exemple pour le harnais d'évaluation.
|
|
117
|
+
|
|
118
|
+
**Vous voulez toute la puissance hybride ?** Mise en route sans friction, en une commande :
|
|
119
|
+
|
|
120
|
+
```bash
|
|
121
|
+
enquire-mcp setup --vault <path> # télécharge le modèle, construit FTS5 + embed-db
|
|
122
|
+
enquire-mcp serve --vault <path> --persistent-index --enable-reranker --use-hnsw
|
|
123
|
+
enquire-mcp doctor --vault <path> # contrôle de santé codé par couleur ✓/⚠/✗
|
|
124
|
+
```
|
|
125
|
+
|
|
126
|
+
---
|
|
127
|
+
|
|
128
|
+
## 🤖 Configuration dans votre agent IA — prompts à copier-coller
|
|
129
|
+
|
|
130
|
+
Une fois `enquire-mcp` installé, collez ces prompts dans votre agent pour qu'il sache que le coffre est disponible comme mémoire.
|
|
131
|
+
|
|
132
|
+
<details>
|
|
133
|
+
<summary><b>Claude Code (terminal)</b> — ajouter le serveur MCP + premier prompt</summary>
|
|
134
|
+
|
|
135
|
+
```bash
|
|
136
|
+
# Ajoutez le serveur MCP à votre configuration Claude Code (une seule fois)
|
|
137
|
+
claude mcp add obsidian -- npx -y @oomkapwn/enquire-mcp serve --vault ~/Documents/Obsidian\ Vault
|
|
138
|
+
```
|
|
139
|
+
|
|
140
|
+
Ensuite, dans n'importe quelle session Claude Code :
|
|
141
|
+
|
|
142
|
+
> Tu disposes désormais d'outils `obsidian_*` qui recherchent et lisent mon coffre Obsidian — ma mémoire à long terme. Avant de répondre à des questions sur des projets, des décisions, des personnes ou un contexte technique, appelle `obsidian_search` avec les termes pertinents. Cite chaque fait avec la note source (et `[page: N]` pour les PDF). Si tu ne trouves pas de note pertinente, dis-le — ne devine pas.
|
|
143
|
+
|
|
144
|
+
</details>
|
|
145
|
+
|
|
146
|
+
<details>
|
|
147
|
+
<summary><b>Claude Desktop</b> — fichier de configuration + premier prompt</summary>
|
|
148
|
+
|
|
149
|
+
Déposez [`examples/claude-desktop-hybrid.json`](./examples/claude-desktop-hybrid.json) dans la configuration MCP de Claude Desktop (modifiez d'abord le chemin du coffre). Redémarrez Claude Desktop, puis :
|
|
150
|
+
|
|
151
|
+
> Tu as mon coffre Obsidian branché comme mémoire interrogeable via les outils `obsidian_*`. Vérifie toujours `obsidian_search` en premier quand je te demande quoi que ce soit dans mes notes — contexte de réunion, recherche, décisions, entrées de journal. Cite le chemin de la note source pour chaque fait.
|
|
152
|
+
|
|
153
|
+
</details>
|
|
154
|
+
|
|
155
|
+
<details>
|
|
156
|
+
<summary><b>Cursor</b> — configuration MCP stdio + règle d'agent</summary>
|
|
157
|
+
|
|
158
|
+
Déposez [`examples/cursor-mcp.json`](./examples/cursor-mcp.json) à `~/.cursor/mcp.json` (modifiez le chemin du coffre). Dans votre fichier `.cursorrules` ou dans le chat :
|
|
159
|
+
|
|
160
|
+
> Avant de proposer du code qui touche à un sujet sur lequel j'ai peut-être des notes (décisions d'architecture, contrats d'API, évaluations de fournisseurs), appelle d'abord `obsidian_search`. Considère mon coffre Obsidian comme un contexte faisant autorité.
|
|
161
|
+
|
|
162
|
+
</details>
|
|
163
|
+
|
|
164
|
+
<details>
|
|
165
|
+
<summary><b>GPT personnalisé de ChatGPT</b> — MCP distant sur HTTP</summary>
|
|
166
|
+
|
|
167
|
+
Suivez [`examples/chatgpt-actions.md`](./examples/chatgpt-actions.md) pour exposer `serve-http` via un tunnel avec auth bearer. Dans les instructions de votre GPT personnalisé :
|
|
168
|
+
|
|
169
|
+
> Tu as un accès en lecture à mon coffre Obsidian via la famille d'outils `obsidian_*`. Cherche avant de répondre à tout ce qui pourrait se trouver dans mes notes ; cite le chemin du fichier source pour chaque affirmation.
|
|
170
|
+
|
|
171
|
+
</details>
|
|
172
|
+
|
|
173
|
+
<details>
|
|
174
|
+
<summary><b>OpenClaw / Codex / tout autre client MCP</b></summary>
|
|
175
|
+
|
|
176
|
+
La même commande `npx -y @oomkapwn/enquire-mcp serve --vault <path>` fonctionne pour tout client compatible MCP. Consultez la documentation de configuration MCP du client pour savoir où déposer l'entrée du serveur, puis utilisez l'un des prompts ci-dessus.
|
|
177
|
+
|
|
178
|
+
</details>
|
|
179
|
+
|
|
180
|
+
**Règle d'agent réutilisable** (à déposer dans n'importe quel `AGENTS.md` / `CLAUDE.md` / `.cursorrules` pour que l'agent sache *quand* recourir au coffre) :
|
|
181
|
+
|
|
182
|
+
> Quand ma question touche à mes propres notes, décisions, projets, personnes ou recherches, **cherche d'abord dans mon coffre Obsidian** via les outils `obsidian_*` (commence par `obsidian_search`) et cite la note source pour chaque fait. Préfère enquire pour le rappel *conceptuel / interlangue / « qu'ai-je dit à propos de X »* ; utilise `grep` / `ripgrep` simple pour les chaînes littérales exactes. Si rien de pertinent ne ressort, dis-le — ne devine pas.
|
|
183
|
+
|
|
184
|
+
### Exemples de requêtes qui fonctionnent bien
|
|
185
|
+
|
|
186
|
+
- *« Trouve chaque note où j'ai discuté de stratégie tarifaire, résume l'évolution. »* — la fusion RRF + le reranker gèrent « évolution » sémantiquement
|
|
187
|
+
- *« Quelle a été ma décision sur PostgreSQL vs MongoDB ? Cite la note quotidienne. »* — le graph-boost de wikilinks fait remonter le document de décision central
|
|
188
|
+
- *« Анализируй мои заметки о RAG за последние 3 месяца »* — embeddings multilingues + filtre de date sur le frontmatter
|
|
189
|
+
- *« De quelles pages du PDF de l'article LLaMA-3 parle-t-on de mise à l'échelle ? »* — PDF fondus dans la recherche avec citations `[page: N]`
|
|
190
|
+
- *« Montre-moi les communautés thématiques de mon coffre de recherche — quels thèmes ai-je explorés ? »* — `obsidian_get_communities` (GraphRAG-light)
|
|
191
|
+
|
|
192
|
+
---
|
|
193
|
+
|
|
194
|
+
## 🧠 Cas d'usage
|
|
195
|
+
|
|
196
|
+
**1 — Mémoire à long terme pour les agents IA.** Déposez votre coffre Obsidian dans n'importe quel agent compatible MCP (Claude Code, Claude Desktop, Cursor, ChatGPT, Codex, OpenClaw). L'agent dispose désormais d'un rappel sémantique durable sur chaque note de réunion, entrée de journal, journal de recherche et document de décision que vous ayez jamais écrit — à travers les sessions, les modèles et les fournisseurs. Contrairement à `Claude Memory` ou `ChatGPT Memory`, votre savoir n'est pas enfermé dans le cloud d'un seul fournisseur ; il vit dans du markdown brut qui vous appartient et que vous pouvez migrer librement.
|
|
197
|
+
|
|
198
|
+
**2 — Base de connaissances personnelle / second cerveau.** La récupération hybride fait remonter la bonne note pour *n'importe quelle* formulation, dans l'une des 50+ langues. Posez une question en anglais sur une entrée de journal en russe d'il y a deux ans, obtenez le bon résultat. Le graph-boost de wikilinks reclasse les notes qui se trouvent au centre de votre graphe de connaissances. GraphRAG-light fait émerger des communautés thématiques — découvrez des connexions que vous aviez oublié avoir faites. Les PDF se fondent dans la recherche avec des citations `[page: N]`, de sorte que les articles de recherche et les transcriptions de réunions deviennent une mémoire de premier ordre.
|
|
199
|
+
|
|
200
|
+
**3 — RAG agentique / ingénierie de contexte.** `obsidian_search` expose les scores par signal pour que l'agent voie *pourquoi* chaque résultat a été classé. HyDE réécrit au préalable les requêtes vagues en réponses hypothétiques riches avant la récupération. La décomposition en sous-questions gère les questions multi-sauts (« comment notre stratégie tarifaire a-t-elle évolué et quelle a été la réaction des clients ? ») en les découpant en sous-requêtes indépendantes, puis en fusionnant les résultats. Le harnais d'évaluation intégré (NDCG / Recall / MRR) vous permet de mesurer la qualité de récupération sur vos propres requêtes plutôt que de faire confiance aux benchmarks des fournisseurs.
|
|
201
|
+
|
|
202
|
+
---
|
|
203
|
+
|
|
204
|
+
## 🚫 Quand enquire-mcp n'est *pas* le bon outil
|
|
205
|
+
|
|
206
|
+
Des non-objectifs honnêtes — tournez-vous vers autre chose quand :
|
|
207
|
+
|
|
208
|
+
- **Vous voulez une recherche littérale de chaîne / regex.** `ripgrep` / `grep` est plus rapide et exact pour « trouver ce token précis ». enquire brille sur le rappel *conceptuel* — synonymes, interlangue, « qu'ai-je dit à propos de X ». Utilisez les deux : `rg` pour le littéral, enquire pour le sens.
|
|
209
|
+
- **Votre savoir vit dans des journaux de chat, pas dans des notes.** enquire est *ancré* dans le markdown que vous avez rédigé. Les outils de mémoire conversationnelle (mem0, Zep, Supermemory) qui *extraient* des faits de transcriptions de chat vers un dépôt séparé sont une catégorie différente — voir la [comparaison](./docs/COMPARISON.md).
|
|
210
|
+
- **Vous avez besoin d'une recherche multi-utilisateurs / hébergée / synchronisée.** enquire est local-first et mono-coffre par conception — pas d'index multi-locataire côté serveur.
|
|
211
|
+
- **Vos sources ne sont ni du Markdown ni du PDF.** `.md` / `.canvas` / `.base` / `.pdf` sont de premier ordre ; les autres formats nécessitent d'abord une conversion.
|
|
212
|
+
- **Vous voulez une interface graphique ou un plugin intégré à Obsidian.** enquire est un serveur MCP / CLI sans interface — il *complète* Obsidian, il n'en est pas un. (Smart Connections est l'option de plugin intégré à l'app.)
|
|
213
|
+
- **Vous avez besoin d'une recherche en moins d'une milliseconde sur des millions de notes.** HNSW offre un top-K en moins de 10 ms à grande échelle, mais enquire vise les coffres personnels / d'équipe, pas les corpus à l'échelle du web.
|
|
214
|
+
|
|
215
|
+
---
|
|
216
|
+
|
|
217
|
+
## 📖 Référence de l'API
|
|
218
|
+
|
|
219
|
+
**[Référence de l'API auto-générée sur oomkapwn.github.io/enquire-mcp](https://oomkapwn.github.io/enquire-mcp/)** — chaque outil, prompt et helper exporté avec un TSDoc complet (`@param` / `@returns` / `@example`). Reconstruite depuis les sources à chaque push sur `main` via [`publish-docs.yml`](https://github.com/oomkapwn/enquire-mcp/blob/main/.github/workflows/publish-docs.yml) (TypeDoc → GitHub Pages). Sans dérive par construction : le même TSDoc que voient les agents IA et les IDE est celui qui est publié.
|
|
220
|
+
|
|
221
|
+
---
|
|
222
|
+
|
|
223
|
+
## 🏗️ Comment fonctionne la récupération
|
|
224
|
+
|
|
225
|
+
```mermaid
|
|
226
|
+
graph LR
|
|
227
|
+
Q[Query] --> S[obsidian_search]
|
|
228
|
+
S --> BM25[BM25 / FTS5]
|
|
229
|
+
S --> TFIDF[TF-IDF cosine]
|
|
230
|
+
S --> EMB[ML embeddings<br/>HNSW]
|
|
231
|
+
BM25 --> RRF{RRF fusion<br/>k=60}
|
|
232
|
+
TFIDF --> RRF
|
|
233
|
+
EMB --> RRF
|
|
234
|
+
RRF --> GB[Graph boost<br/>α × in-degree]
|
|
235
|
+
GB --> RR[BGE cross-encoder<br/>reranker]
|
|
236
|
+
RR --> R[Ranked hits<br/>per_signal observability]
|
|
237
|
+
```
|
|
238
|
+
|
|
239
|
+
`obsidian_search` détecte automatiquement les signaux disponibles et se dégrade avec élégance. Le graph-boost de wikilinks reclasse le top-K via un PageRank personnalisé d'un pas. Le reranking par cross-encoder optionnel re-score le top-N pour +15.5 NDCG@10 mesuré. Chaque résultat renvoie `per_signal: { bm25, tfidf, embeddings }` pour que vous voyiez POURQUOI il a été classé.
|
|
240
|
+
|
|
241
|
+
| Niveau | Configuration | Ce que vous obtenez |
|
|
242
|
+
|---|---|---|
|
|
243
|
+
| **1** | `serve --vault <path>` | Cosinus TF-IDF (zéro configuration, instantané) |
|
|
244
|
+
| **2** | + `--persistent-index` | + BM25 / FTS5 (top-10 en moins de 100 ms) |
|
|
245
|
+
| **3** | + `setup` (télécharge le modèle + construit embed-db) | + embeddings ML multilingues |
|
|
246
|
+
| **4** | + `--enable-reranker` | + cross-encoder BGE (+15.5 NDCG@10 mesuré) |
|
|
247
|
+
| **5** | + `--use-hnsw` | + top-K en moins de 10 ms à l'échelle du million de chunks |
|
|
248
|
+
| **6** | + `--include-pdfs` | + PDF fondus dans tout ce qui précède |
|
|
249
|
+
| **7** | `serve-http --bearer-token …` | + MCP distant (web Claude.ai, ChatGPT, Cursor HTTP, mobile) |
|
|
250
|
+
|
|
251
|
+
---
|
|
252
|
+
|
|
253
|
+
## 🛠️ Les 46 outils
|
|
254
|
+
|
|
255
|
+
46 outils au total : 34 de lecture toujours actifs (dont le parapluie `obsidian_search`) + 4 de lecture optionnels + 7 écritures restreintes + 1 de retour en boucle fermée. Référence complète : **[docs/api.md](./docs/api.md)**.
|
|
256
|
+
|
|
257
|
+
| Catégorie | Outils |
|
|
258
|
+
|---|---|
|
|
259
|
+
| **Recherche & récupération** | `obsidian_search` (parapluie, fusionné par RRF) · `obsidian_hyde_search` (augmenté par HyDE, v3.1.0) · `obsidian_search_text` · `obsidian_full_text_search` · `obsidian_semantic_search` · `obsidian_embeddings_search` · `obsidian_find_similar` |
|
|
260
|
+
| **Wikilinks & graphe** | `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) |
|
|
261
|
+
| **Frontmatter & Dataview** | `obsidian_frontmatter_get` · `obsidian_frontmatter_search` · `obsidian_dataview_query` · `obsidian_list_tags` |
|
|
262
|
+
| **Lire & naviguer** | `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` |
|
|
263
|
+
| **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) |
|
|
264
|
+
| **Écritures** (restreintes par `--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` |
|
|
265
|
+
| **Diagnostic / lint** | `obsidian_lint_wiki` · `obsidian_paper_audit` · `obsidian_validate_note_proposal` |
|
|
266
|
+
| **Retour** (optionnel via `--feedback-weight`) | `obsidian_mark_useful` (boucle fermée : enregistre quelles notes rappelées ont aidé ; les valorise dans les recherches futures) |
|
|
267
|
+
|
|
268
|
+
Plus 3 ressources MCP (`obsidian://vault/info`, `obsidian://note/{path}`, `obsidian://chunk/{n}/{path}`) et 19 **prompts 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`) pour les flux de travail courants sur le coffre.
|
|
269
|
+
|
|
270
|
+
---
|
|
271
|
+
|
|
272
|
+
## 🛡️ Confiance
|
|
273
|
+
|
|
274
|
+
| Aspect | Posture |
|
|
275
|
+
|---|---|
|
|
276
|
+
| **Par défaut** | Lecture seule — `--enable-write` requis pour les 7 outils d'écriture |
|
|
277
|
+
| **Moindre privilège** | `--disabled-tools` / `--enabled-tools` exposent une surface minimale (p. ex. un agent de recherche en lecture seule n'obtient que `obsidian_search` + `obsidian_read_note`) |
|
|
278
|
+
| **Sécurité des chemins** | Vérification realpath à chaque lecture+écriture ; les liens symboliques sortant du coffre sont rejetés |
|
|
279
|
+
| **Filtre de confidentialité** | Vérifié aux chemins de ressources FTS5 + embed-db + chunk ; fail-closed sur des listes d'autorisation/interdiction vides |
|
|
280
|
+
| **Transport HTTP** | Auth bearer (SHA-256 à temps constant + `timingSafeEqual`), limite de débit par token, CORS strict |
|
|
281
|
+
| **Frontmatter** | `js-yaml@4` `load` (schéma cœur YAML 1.2, sûr par défaut) — aucune exécution de code |
|
|
282
|
+
| **Fichiers de cache + index** | chmod 0600, répertoire parent 0700 |
|
|
283
|
+
| **CI** | **9 portes** de protection de branche **requises** : (1) `lint`, (2) `test` sur Node 22, (3) `test` sur Node 24, (4) `smoke`, (5) `audit`, (6) `coverage`, (7) `version-consistency`, (8) `docs`, (9) `oia`. **5 indicatives** : `test-macos` + `docker` (build du Dockerfile + smoke d'introspection `tools/list`) via `.github/workflows/ci.yml` ; CodeQL ×2 + actions Analyze via le [default-setup de GitHub](https://docs.github.com/code-security/code-scanning/automatically-scanning-your-code-for-vulnerabilities-and-errors/configuring-default-setup-for-code-scanning) (pas des fichiers de workflow). Le workflow de release revérifie que les 9 portes requises sont passées sur le SHA taggé avant la publication npm. _v3.7.10 — `docs` (porte de génération TypeDoc) ajoutée à l'ensemble requis. v3.7.13 — plancher `engines.node` relevé à `>=22.13.0` pour correspondre à la matrice CI. v3.8.0-rc.6 — `oia` (Outside-In Audit) promue depuis l'ensemble indicatif._ |
|
|
284
|
+
| **Couverture** | Lignes ≥86 % · instructions ≥82 % · fonctions ≥75 % · branches ≥74 % (sous garde) |
|
|
285
|
+
| **Publications** | npm + release GitHub par tag · semver · **provenance de build signée** (npm + Sigstore, SLSA Build L2 ; générateur L3 sur la feuille de route) |
|
|
286
|
+
| **Stabilité** | v3.0+ liée au semver — chaque flag CLI, nom d'outil, ressource MCP, prompt et symbole exporté est un contrat |
|
|
287
|
+
|
|
288
|
+
Posture complète : **[SECURITY.md](./SECURITY.md)** · Surface de stabilité : **[STABILITY.md](./STABILITY.md)** · Vulnérabilités : `oomkapwn@gmail.com`.
|
|
289
|
+
|
|
290
|
+
---
|
|
291
|
+
|
|
292
|
+
## ❓ FAQ
|
|
293
|
+
|
|
294
|
+
**Faut-il installer Obsidian ?** Non. Lit `.md` + `.canvas` + `.pdf` directement. Fonctionne avec n'importe quel coffre au format Obsidian.
|
|
295
|
+
|
|
296
|
+
**Va-t-il écrire dans mon coffre ?** Pas sauf si vous passez `--enable-write`. Les 7 outils d'écriture sont restreints ; les outils destructifs prennent en charge `dry_run`.
|
|
297
|
+
|
|
298
|
+
**Des données envoyées quelque part ?** Uniquement lors de `enquire-mcp install-model` (télécharge les poids ONNX depuis HuggingFace, une seule fois). Le mode serve ne fait jamais d'HTTP sortant. Les embeddings + le reranker s'exécutent localement sur le CPU.
|
|
299
|
+
|
|
300
|
+
**Performances ?** Build à froid FTS5 : ~5 s/1k notes, ~30 s/50k. Requête BM25 : <100 ms toujours. Build d'embeddings : ~30 ms/chunk sur M1. **HNSW top-10 : moins de 10 ms à toute échelle.** Démarrage à froid de serve : ~50 ms avec persistance HNSW.
|
|
301
|
+
|
|
302
|
+
**Langues ?** Par défaut `paraphrase-multilingual-MiniLM-L12-v2` (50+ langues). Cross-encoder multilingue. Validé de bout en bout sur des coffres bilingues russe + anglais. Tokenisation CJK/thaï/khmer via `Intl.Segmenter`.
|
|
303
|
+
|
|
304
|
+
**Exécution à distance ?** Oui — `serve-http` expose le même serveur via [Streamable HTTP](https://modelcontextprotocol.io/specification/2025-06-18/basic/transports#streamable-http). Mettez Tailscale Funnel ou Cloudflare Tunnel devant pour le HTTPS. Fonctionne avec le web claude.ai, le GPT personnalisé de ChatGPT, le mode HTTP de Cursor et les clients MCP mobiles. Voir **[docs/http-transport.md](./docs/http-transport.md)**.
|
|
305
|
+
|
|
306
|
+
---
|
|
307
|
+
|
|
308
|
+
## 🚀 Publications
|
|
309
|
+
|
|
310
|
+
**v3.0.0 — canal stable.** La feuille de route de récupération v2.x est complète et la surface publique est désormais [liée au semver](./STABILITY.md). Florilège :
|
|
311
|
+
|
|
312
|
+
`v2.0` récupération hybride (BM25+TF-IDF+embeddings via RRF) · `v2.6` MCP distant · `v2.7-2.8` PDF fondus · `v2.9` reranker BGE · `v2.10` OCR · `v2.11` doctor + setup · `v2.12` harnais d'évaluation · `v2.13` HNSW · `v2.14` sessions à état · `v2.15` late-chunking · `v2.16` persistance HNSW · `v2.17` quantification int8 · `v3.8.0` stable · `v3.8.7` durcissement du transport HTTP · **`v3.9.0` stable** : embed-sync du watcher pour les PDF OCRisés, mise à jour HNSW en mémoire en temps réel lors des modifications de fichiers, refill HNSW adaptatif R-10 (clôt la sous-restitution avec >66 % d'exclusion). · **`v3.10` (`@rc`)** : fraîcheur consciente de l'oubli — indicateur `age_days` + `stale` + reclassement optionnel `--recency-weight` + `obsidian_search` conscient du frontmatter.
|
|
313
|
+
|
|
314
|
+
Canal : `npm install @oomkapwn/enquire-mcp` → dernière version stable (`@latest` = v3.10.x). Préversion : `npm install @oomkapwn/enquire-mcp@rc` (le dernier candidat à la version — voir [CHANGELOG.md](./CHANGELOG.md)). Changelog complet : **[CHANGELOG.md](./CHANGELOG.md)** · Plan à venir : **[ROADMAP.md](https://github.com/oomkapwn/enquire-mcp/blob/main/ROADMAP.md)**.
|
|
315
|
+
|
|
316
|
+
---
|
|
317
|
+
|
|
318
|
+
## 🤝 Contribuer
|
|
319
|
+
|
|
320
|
+
```bash
|
|
321
|
+
git clone https://github.com/oomkapwn/enquire-mcp.git
|
|
322
|
+
cd enquire-mcp && npm install
|
|
323
|
+
npm test # suite complète (1329 tests, ~12 s)
|
|
324
|
+
npm run lint # zéro avertissement
|
|
325
|
+
npm run build # tsc → dist/
|
|
326
|
+
```
|
|
327
|
+
|
|
328
|
+
Issues, PR et idées bienvenues. La protection de branche exige une revue de PR sur `main`.
|
|
329
|
+
|
|
330
|
+
---
|
|
331
|
+
|
|
332
|
+
## 📜 Licence
|
|
333
|
+
|
|
334
|
+
MIT. Réalisé par [Alex (@OomkaBear)](https://github.com/oomkapwn). Nommé d'après le [prototype du WWW de Tim Berners-Lee de 1980](https://en.wikipedia.org/wiki/ENQUIRE) — le système hypertexte originel, avant le web. La spécification d'origine était la suivante : vous pouviez interroger le système sur tout. **enquire-mcp apporte cela à votre coffre.**
|
package/README.hi.md
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
|
|
5
5
|
# enquire-mcp
|
|
6
6
|
|
|
7
|
-
<sub>[English](./README.md) · [中文](./README.zh.md) · [Español](./README.es.md) · **हिन्दी** · [العربية](./README.ar.md)</sub>
|
|
7
|
+
<sub>[English](./README.md) · [中文](./README.zh.md) · [Español](./README.es.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
|
### सबसे उन्नत Obsidian MCP। AI एजेंट्स के लिए बनी दीर्घकालिक स्मृति।
|
|
10
10
|
|
|
@@ -48,7 +48,7 @@ claude mcp add obsidian -- npx -y @oomkapwn/enquire-mcp serve --vault ~/Document
|
|
|
48
48
|
> 3. **serve के दौरान शून्य क्लाउड कॉल।** मॉडल स्थानीय रूप से कैश्ड (HuggingFace से एक-बार डाउनलोड)। आपके vault की सामग्री कभी आपकी मशीन नहीं छोड़ती। डिफ़ॉल्ट रूप से एयर-गैप-सुरक्षित।
|
|
49
49
|
> 4. **ताज़गी-सजग recall।** हर परिणाम बताता है कि नोट कितना पुराना है; वैकल्पिक recency re-ranking एजेंट को ताज़ा ज्ञान को प्राथमिकता देने और बासी तथ्यों को पुनः-सत्यापन हेतु चिह्नित करने देता है — भूलने-के-प्रति-सजग सीमांत, जो आपकी फ़ाइलों में पहले से मौजूद `mtime` पर बना है।
|
|
50
50
|
|
|
51
|
-
**
|
|
51
|
+
**46 टूल · 19 MCP प्रॉम्प्ट · 1311+ यूनिट टेस्ट · 50+ भाषाएँ · v3.10.x स्थिर · semver-बाध्य · MIT · npm बिल्ड प्रोवेनेंस (SLSA L2)।**
|
|
52
52
|
|
|
53
53
|
---
|
|
54
54
|
|
|
@@ -124,7 +124,7 @@ enquire-mcp doctor --vault <path> # रंग-कोडित ✓/⚠/✗ स
|
|
|
124
124
|
| **रिमोट MCP** (HTTP + bearer auth + stateful sessions) | ✅ | ❌ | आंशिक |
|
|
125
125
|
| **MCP-नेटिव** (Claude · Cursor · ChatGPT · Codex · OpenClaw · कोई भी क्लाइंट) | ✅ | ❌ केवल Obsidian | भिन्न |
|
|
126
126
|
| **प्राइवेसी फ़िल्टर** हर खोज + लेखन पथ पर सत्यापित | ✅ | लागू नहीं | ❌ |
|
|
127
|
-
| **
|
|
127
|
+
| **46 प्रोडक्शन टूल** (34 हमेशा-चालू read + 4 opt-in + 7 gated writes + 1 फ़ीडबैक) | ✅ | लागू नहीं | भिन्न |
|
|
128
128
|
| **GraphRAG-light** (Louvain modularity समुदाय-पहचान) | ✅ **केवल यहीं** | ❌ | ❌ |
|
|
129
129
|
| **स्वतंत्र `.base` क्वेरी निष्पादन** (Obsidian चले बिना काम करता है) | ✅ **केवल यहीं** | ❌ | ❌ |
|
|
130
130
|
| **HyDE retrieval** + उप-प्रश्न विघटन | ✅ **केवल यहीं** | ❌ | ❌ |
|
|
@@ -156,9 +156,9 @@ enquire-mcp doctor --vault <path> # रंग-कोडित ✓/⚠/✗ स
|
|
|
156
156
|
|
|
157
157
|
---
|
|
158
158
|
|
|
159
|
-
## 🛠️ सभी
|
|
159
|
+
## 🛠️ सभी 46 टूल
|
|
160
160
|
|
|
161
|
-
|
|
161
|
+
कुल 46 टूल: 34 हमेशा-चालू read (अम्ब्रेला `obsidian_search` सहित) + 4 opt-in + 7 gated writes + 1 क्लोज़्ड-लूप फ़ीडबैक। पूर्ण संदर्भ **[docs/api.md](./docs/api.md)** में, जो शामिल करता है: खोज व retrieval, Wikilink व ग्राफ़, Frontmatter व Dataview, Canvas, Obsidian Bases, PDF + OCR, समुदाय-पहचान, लेखन टूल (`--enable-write` ज़रूरी) आदि।
|
|
162
162
|
|
|
163
163
|
इसके अलावा 3 MCP resources और सामान्य vault वर्कफ़्लो के लिए 19 **MCP प्रॉम्प्ट**।
|
|
164
164
|
|