@oomkapwn/enquire-mcp 3.11.2 → 3.11.3-rc.1
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 +4 -0
- package/README.ar.md +1 -1
- package/README.de.md +336 -0
- package/README.es.md +1 -1
- package/README.fr.md +1 -1
- package/README.hi.md +1 -1
- package/README.ja.md +1 -1
- package/README.ko.md +336 -0
- package/README.md +2 -2
- package/README.pt.md +1 -1
- package/README.ru.md +1 -1
- package/README.zh.md +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/package.json +3 -1
package/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,10 @@
|
|
|
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.3-rc.1] — 2026-06-30
|
|
6
|
+
|
|
7
|
+
> **TL;DR:** **i18n expansion — README now ships in 11 languages (added 한국어 + Deutsch).** Korean and German are both large, active Cursor/Claude Code communities not covered by the existing 9. Both translations are complete and structurally faithful (all 17 H2/H3 sections, the 7-tier retrieval table, the full 46-tool table, the 19-prompt list, the mermaid diagram), produced + audited by a parallel translation/audit Workflow (13 agents, every README cross-checked against the canonical `README.md`). The 11-language switcher is wired across all READMEs; the per-language numeric invariant (`docs-consistency`), the switcher cross-link guard ("9"→"11"), and the anchor-integrity invariant all extended to cover ko/de in the same PR. Also fixes a small state-driven finding the audit surfaced: `README.md`'s Releases highlight reel labelled `v3.10` as `(@rc)` though it's been promoted to stable (the `@latest = v3.11.x` line below it already said so) — relabelled `v3.10` stable in en/ko/de. **No `src/` change** — docs + `files[]` + invariants only. **46 tools · 19 prompts · 1439 tests.** Ships `@rc`. _Known follow-up (stage 2): zh/es/hi/ar are abbreviated translations missing 3 sections (Set-up prompts / Example queries / API reference) — accurate but incomplete vs the complete ru/pt/fr/ja/ko/de; a parity pass + a section-parity invariant are tracked separately._
|
|
8
|
+
|
|
5
9
|
## [3.11.2] — 2026-06-30
|
|
6
10
|
|
|
7
11
|
> **TL;DR:** **v3.11.2 STABLE — promoted `@rc` → `@latest`. A positioning + eval-rigor patch, zero `src/` behavior change.** Born from a study of a 21k★ adjacent-domain competitor (DeusData/codebase-memory-mcp, *code* memory): borrow the **discipline** (lead with one *measured* number, re-narrate constraints as moats, broaden agent-SEO), never the domain or an unmeasured claim. Ships **`bench:context`** (a context-savings harness — our niche analog of "Nx fewer tokens", with **no figure published** until a representative-vault run + sign-off) + **`docs/EVALUATION_PLAN.md`** (a pre-registered, score-free methodology) + a README hero that now **leads with the already-measured reranker delta** (+15.5 NDCG@10 / +24.7 MRR on a reproducible 60-query ablation) and re-frames the on-device model's weight as the privacy/grounded **moat** (zero cloud calls during serve — *enforced* via `setEmbeddingsOffline`, not aspirational). Every positioning claim is substantiated + invariant-pinned; the no-overclaim rule held (the own-diff sweep even caught + reverted a stray synthetic-vault number `git add -A` had committed). **46 tools · 19 prompts · 1439 tests · 0 CodeQL · 0 open dependabot.** No API breaks (additive patch). CI publishes `@latest` + signed provenance (SLSA L2) + OIDC MCP-registry sync. **Per-RC detail: rc.1 below.**
|
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) · **العربية** · [Русский](./README.ru.md) · [Português](./README.pt.md) · [Français](./README.fr.md) · [日本語](./README.ja.md)</sub>
|
|
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) · [한국어](./README.ko.md) · [Deutsch](./README.de.md)</sub>
|
|
8
8
|
|
|
9
9
|
### أكثر خوادم Obsidian MCP تطوّراً. ذاكرة طويلة الأمد لوكلاء الذكاء الاصطناعي.
|
|
10
10
|
|
package/README.de.md
ADDED
|
@@ -0,0 +1,336 @@
|
|
|
1
|
+
<div align="center">
|
|
2
|
+
|
|
3
|
+
<a href="https://github.com/oomkapwn/enquire-mcp"><img src="./assets/social-preview.png" alt="enquire-mcp — das fortschrittlichste Obsidian-MCP. Langzeitgedächtnis für KI-Agenten. Aufgebaut auf Ihrem Obsidian-Vault. Open Source, MCP-nativ, anbieterneutral. Hybrid-Retrieval, BGE-Reranker, HNSW, PDFs mit OCR. Für 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.fr.md) · [日本語](./README.ja.md) · [한국어](./README.ko.md) · **Deutsch**</sub>
|
|
8
|
+
|
|
9
|
+
<sub>**TL;DR für KI-Agenten** — MCP-Server, der einen lokalen Obsidian-Markdown-Vault für Claude Code, Claude Desktop, Cursor, ChatGPT, Codex und OpenClaw als persistentes, durchsuchbares Gedächtnis bereitstellt. Hybrid-Retrieval (BM25 + ML-Embeddings + BGE-Reranker, per RRF fusioniert), HNSW + int8-Quantisierung, agentisches RAG (HyDE + Teilfragen), GraphRAG-light, PDFs + OCR, eigenständige Bases. Anbieterneutral, MIT, null Cloud-Aufrufe während des Servings. 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
|
+
### Das fortschrittlichste Obsidian-MCP. Langzeitgedächtnis für KI-Agenten.
|
|
12
|
+
|
|
13
|
+
**Hören Sie auf, Claude, Cursor, ChatGPT, Codex und OpenClaw in jeder Sitzung den Kontext neu zu erklären. Ihre Obsidian-Notizen werden zu einem gemeinsamen, durchsuchbaren Gedächtnis über jeden MCP-kompatiblen Agenten hinweg — Ihr Wissen, jedes Modell, für immer Ihnen gehörend.**
|
|
14
|
+
|
|
15
|
+
*Gemessen: Der BGE-Cross-Encoder-Reranker bringt **+15.5 NDCG@10 / +24.7 MRR** gegenüber reinem Hybrid auf einer [reproduzierbaren 60-Abfragen-Ablation](./docs/benchmarks.md) — der vollständige moderne IR-Stack, der das von **Ihnen** geschriebene Markdown zurückholt (zitiert, editierbar), niemals eine Cloud-Paraphrase.*
|
|
16
|
+
|
|
17
|
+
[](https://github.com/oomkapwn/enquire-mcp/actions/workflows/ci.yml)
|
|
18
|
+
[](https://www.npmjs.com/package/@oomkapwn/enquire-mcp)
|
|
19
|
+
[](https://www.npmjs.com/package/@oomkapwn/enquire-mcp)
|
|
20
|
+
[](#️-vertrauen)
|
|
21
|
+
[](./STABILITY.md)
|
|
22
|
+
[](https://slsa.dev/spec/v1.0/levels#build-l2)
|
|
23
|
+
[](https://modelcontextprotocol.io/)
|
|
24
|
+
[](./LICENSE)
|
|
25
|
+
|
|
26
|
+
**[⚡ Installation in 30 Sekunden](#-schnellstart) · [🧠 Anwendungsfälle](#-anwendungsfälle) · [📊 Benchmarks](./docs/benchmarks.md) · [📖 API-Referenz](https://oomkapwn.github.io/enquire-mcp/) · [💬 Alternativen vergleichen](./docs/COMPARISON.md)**
|
|
27
|
+
|
|
28
|
+
**Claude Code — eine einzige Zeile:**
|
|
29
|
+
|
|
30
|
+
```bash
|
|
31
|
+
claude mcp add obsidian -- npx -y @oomkapwn/enquire-mcp serve --vault ~/Documents/Obsidian\ Vault
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
</div>
|
|
35
|
+
|
|
36
|
+
> 📌 Dieses Dokument ist die deutsche Übersetzung von [README.md](./README.md), um die Lektüre für deutschsprachige Nutzer zu erleichtern; bei Abweichungen ist **die englische Fassung maßgeblich** (sie wird bei jeder Veröffentlichung aktualisiert).
|
|
37
|
+
|
|
38
|
+
---
|
|
39
|
+
|
|
40
|
+
## Das Problem
|
|
41
|
+
|
|
42
|
+
Jede KI-Sitzung beginnt bei null. Sie erklären Ihr Projekt, Ihre Design-Entscheidungen, die Schlussfolgerungen der Recherche der letzten Woche immer wieder neu. Die „Gedächtnis"-Funktionen der Anbieter ([Claude Memory](https://www.anthropic.com/news/memory-and-tool-use), [ChatGPT Memory](https://openai.com/index/memory-and-new-controls-for-chatgpt/), Cursor-Gedächtnis) sperren Ihr Wissen in die Cloud eines einzigen Anbieters ein — und vergessen es wieder, sobald Sie das Tool wechseln. **Ihr Wissen fängt immer wieder von vorne an.**
|
|
43
|
+
|
|
44
|
+
## Die Lösung
|
|
45
|
+
|
|
46
|
+
Ihr Obsidian-Vault wird zum **persistenten, abfragbaren Langzeitgedächtnis** für jeden MCP-kompatiblen Agenten. Eine Installation — Ihr Wissen ist sofort aus Claude Code, Claude Desktop, Cursor, dem benutzerdefinierten GPT von ChatGPT, Codex, OpenClaw und jedem anderen MCP-Client zugänglich. Reine Markdown-Dateien, **die Ihnen gehören**, lokal indexiert, durchsucht mit dem vollständigen modernen IR-Stack, über jede Sitzung und jedes Modell hinweg abrufbar.
|
|
47
|
+
|
|
48
|
+
**Verankert, nicht extrahiert.** Konversationsgedächtnis-Tools (mem0, Zep, Supermemory, Memobase) *extrahieren* Fakten aus Ihren Chat-Protokollen in einen separaten Speicher, den Sie nicht lesen können. enquire-mcp macht das Gegenteil: Es ist **im Wissen verankert, das Sie bereits geschrieben haben** — Ihren eigenen `.md`-Notizen, wortgetreu, mit Zitaten — sodass der Abruf nachvollziehbar, in jedem Editor editierbar und niemals eine verlustbehaftete Zusammenfassung eines Chats ist, an den Sie sich nur halb erinnern. Und anders als serverseitige ***Flotten*-Gedächtnis**-Plattformen — mandantenfähige Cloud-Speicher, die Agenten-Traffic in eine gemeinsame Datenbank paraphrasieren — ist enquire **Einzelnutzer- und Local-First**: ein Vault, der Ihnen vollständig gehört und den Sie selbst lesen, bearbeiten und löschen können, mit null Cloud-Aufrufen während des Servings. (Diese „Extraktions"-Kritik gilt speziell der Chat-Gedächtnis-Kohorte — nicht Knowledge-Graph- / ETL-Tools wie cognee, ebenso wenig persönlichen Such-Pendants wie Khoj.)
|
|
49
|
+
|
|
50
|
+
**Verankert — und frischebewusst.** Einen Fakt abzurufen ist nur die halbe Aufgabe; zu wissen, ob er noch *wahr* ist, ist die andere Hälfte. Der [Memora-Benchmark](https://arxiv.org/abs/2604.20006) (Apr. 2026) zeigte, dass Gedächtnissysteme systematisch an der Wiederverwendung veralteter Fakten scheitern — eine ein Jahr alte Notiz so abzurufen, als wäre sie heute geschrieben worden. Weil enquires Gedächtnis Ihre echten Markdown-Dateien *ist*, trägt jeder Suchtreffer `age_days` + ein `stale`-Flag, das aus der echten Zeit der letzten Änderung der Notiz abgeleitet wird, und Sie können sich für ein nach Aktualität gewichtetes Ranking (`--recency-weight`) entscheiden, sodass frischere Notizen zuerst erscheinen. Ihr Wissen, frischebewusst — kein zeitloser Klumpen.
|
|
51
|
+
|
|
52
|
+
> **Was enquire-mcp anders macht**:
|
|
53
|
+
> 1. **Anbieterneutral.** Ihr Gedächtnis lebt in `.md`-Dateien. Wechseln Sie von Claude zu Cursor — Ihr Gedächtnis kommt mit.
|
|
54
|
+
> 2. **Retrieval der Spitzenklasse.** Hybrides BM25 + mehrsprachige Embeddings + BGE-Cross-Encoder-Reranker, per RRF fusioniert, skaliert mit HNSW + int8-Quantisierung. Derselbe IR-Stack, den ein Such-Startup bauen würde — als Open Source, in einer einzigen Binärdatei.
|
|
55
|
+
> 3. **Null Cloud-Aufrufe während des Servings.** Das Embedding-Modell läuft **auf Ihrem Rechner** und indexiert das von **Ihnen** geschriebene Markdown — deshalb ist es ein einmaliger lokaler Download (~110 MB), kein Cloud-API-Schlüssel. Verankert + privat gibt es nicht umsonst, und wir tun nicht so: Der Inhalt Ihres Vaults verlässt niemals Ihren Rechner, standardmäßig air-gap-sicher ([erzwungen](./SECURITY.md), nicht nur angestrebt).
|
|
56
|
+
> 4. **Frischebewusster Abruf.** Jeder Treffer meldet, wie alt die Notiz ist; das optionale Reranking nach Aktualität erlaubt es einem Agenten, frisches Wissen zu bevorzugen und veraltete Fakten zur erneuten Überprüfung zu markieren — die vergessensbewusste Front, aufgebaut auf der `mtime`, die Ihre Dateien bereits besitzen.
|
|
57
|
+
|
|
58
|
+
**46 Tools · 19 MCP-Prompts · 1439+ Unit-Tests · 50+ Sprachen · v3.11.x stable · semver-gebunden · MIT · npm-Build-Provenienz (SLSA L2).**
|
|
59
|
+
|
|
60
|
+
---
|
|
61
|
+
|
|
62
|
+
## 🏆 Warum es das Beste ist
|
|
63
|
+
|
|
64
|
+
**Sechs Funktionen, die kein anderes Obsidian-MCP überhaupt hat** (GraphRAG-light, eigenständige `.base`-Ausführung, HyDE, int8-Quantisierung, Late-Chunking, integriertes Eval-Harness). **Plus der gesamte moderne IR-Stack** (BM25 + ML-Embeddings + Cross-Encoder-Reranking + HNSW), von dem Konkurrenten höchstens ein oder zwei Bestandteile mitbringen. Im direkten Vergleich:
|
|
65
|
+
|
|
66
|
+
| Fähigkeit | enquire-mcp | Smart Connections | Andere Obsidian-MCPs |
|
|
67
|
+
|---|:---:|:---:|:---:|
|
|
68
|
+
| Hybrid-Retrieval (BM25 + TF-IDF + ML-Embeddings, per RRF fusioniert) | ✅ | ❌ | ❌ |
|
|
69
|
+
| **Cross-Encoder-Reranking** (BGE, +15.5 NDCG@10 gemessen) | ✅ | ❌ | ❌ |
|
|
70
|
+
| **HNSW-Vektorindex** (Top-K in unter 10 ms, persistiert) | ✅ | ❌ | ❌ |
|
|
71
|
+
| **int8-Vektorquantisierung** (~4× kleinere embed-db) | ✅ | ❌ | ❌ |
|
|
72
|
+
| **Late-Chunking** (kontextfenstergestützte Embeddings) | ✅ | ❌ | ❌ |
|
|
73
|
+
| **PDFs in die Hybrid-Suche eingemischt** (`[page: N]`-Zitate) | ✅ | ❌ | ❌ |
|
|
74
|
+
| **OCR für gescannte PDFs** (Tesseract.js, mehrsprachig) | ✅ | ❌ | ❌ |
|
|
75
|
+
| **Wikilink-Graph-Boost** als Retrieval-Signal | ✅ | ❌ | ❌ |
|
|
76
|
+
| **Mehrsprachige semantische Suche** (50+ Sprachen, on-device) | ✅ | 💰 kostenpflichtig | ❌ |
|
|
77
|
+
| **Integriertes Eval-Harness für die Retrieval-Qualität** (NDCG, Recall, MRR, A/B-Matrix) | ✅ | ❌ | ❌ |
|
|
78
|
+
| **Remote-MCP** über HTTP + Bearer-Auth + zustandsbehaftete Sitzungen | ✅ | ❌ | teilweise |
|
|
79
|
+
| **Pro-Signal-Observability** je Treffer | ✅ | ❌ | ❌ |
|
|
80
|
+
| **MCP-nativ** (Claude · Cursor · ChatGPT · Codex · OpenClaw · jeder Client) | ✅ | ❌ nur Obsidian | variiert |
|
|
81
|
+
| **Privatsphäre-Filter** an jedem Such- + Schreibpfad verifiziert | ✅ | n. z. | ❌ |
|
|
82
|
+
| **46 Produktions-Tools** (34 stets aktive Lese-Tools + 4 optionale + 7 abgesicherte Schreib-Tools + 1 Feedback-Tool) | ✅ | n. z. | variiert |
|
|
83
|
+
| **GraphRAG-light** (Wikilink-Community-Erkennung via Louvain-Modularität) | ✅ **nur hier** | ❌ | ❌ |
|
|
84
|
+
| **Eigenständige `.base`-Abfrageausführung** (funktioniert ohne laufendes Obsidian) | ✅ **nur hier** | ❌ | ❌ delegiert an Obsidian |
|
|
85
|
+
| **HyDE-Retrieval** (Gao et al. 2023) + Teilfragen-Zerlegung | ✅ **nur hier** | ❌ | ❌ |
|
|
86
|
+
| **1439 Unit-Tests · 9 erforderliche + 5 beratende CI-Gates pro PR** | ✅ | n. z. | selten |
|
|
87
|
+
| **Signierte Build-Provenienz** (npm + Sigstore, SLSA Build L2) | ✅ | n. z. | ❌ |
|
|
88
|
+
| **Semver-gebundene öffentliche Oberfläche** ([STABILITY.md](./STABILITY.md)) | ✅ | n. z. | ❌ |
|
|
89
|
+
| Eigenständig (kein Obsidian-Plugin nötig) | ✅ | ❌ erfordert Obsidian | variiert |
|
|
90
|
+
| Lizenz | MIT, kostenlos | proprietär, kostenpflichtig | variiert |
|
|
91
|
+
|
|
92
|
+
<sub>Vergleich basierend auf den öffentlichen Fähigkeiten jedes Projekts zum Stand der stabilen Version v3.8.x (initiale Momentaufnahme v3.7.0 / 2026-05-15; aktualisiert in v3.8.4). Smart Connections ist ein kostenpflichtiges Obsidian-Plugin (kein MCP-Server). „Andere Obsidian-MCPs" bezeichnet die öffentlichen Open-Source-Obsidian-MCP-Server auf GitHub zum Zeitpunkt der Erstellung. Öffentliche End-to-End-Retrieval-Benchmarks für enquire-mcp sind in <a href="./docs/benchmarks.md"><code>docs/benchmarks.md</code></a> veröffentlicht — das gemessene `rerank-bge`-Delta beträgt +24.7 MRR / +15.5 NDCG@10 gegenüber reinem Hybrid auf einer 60-Abfragen-Ablation.</sub>
|
|
93
|
+
|
|
94
|
+
> Strategische Behauptung: enquire-mcp ist das Open-Source-Backend für [LLM-Wikis im Karpathy-Stil](https://gist.github.com/karpathy/442a6bf555914893e9891c11519de94f) auf Basis Ihres bestehenden Obsidian-Vaults. Wissen, das sich kumuliert, bis zu den Quellen nachverfolgbar.
|
|
95
|
+
|
|
96
|
+
---
|
|
97
|
+
|
|
98
|
+
## ⚡ Schnellstart
|
|
99
|
+
|
|
100
|
+
```bash
|
|
101
|
+
npm install -g @oomkapwn/enquire-mcp
|
|
102
|
+
enquire-mcp serve --vault ~/Documents/Obsidian\ Vault
|
|
103
|
+
```
|
|
104
|
+
|
|
105
|
+
In jeden MCP-Client einklinken:
|
|
106
|
+
|
|
107
|
+
```json
|
|
108
|
+
{
|
|
109
|
+
"mcpServers": {
|
|
110
|
+
"obsidian": {
|
|
111
|
+
"command": "npx",
|
|
112
|
+
"args": ["-y", "@oomkapwn/enquire-mcp", "serve", "--vault", "/path/to/vault"]
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
```
|
|
117
|
+
|
|
118
|
+
📂 Sofort einsetzbare Konfigurationen in [`examples/`](./examples/) — **Claude Desktop**, **Cursor**, **benutzerdefiniertes GPT von ChatGPT** (Remote-MCP über HTTP), plus ein Beispiel-Abfragesatz für das Eval-Harness.
|
|
119
|
+
|
|
120
|
+
**Möchten Sie die volle Hybrid-Power?** Reibungsloses Onboarding ohne manuelle Schritte, mit einem Befehl:
|
|
121
|
+
|
|
122
|
+
```bash
|
|
123
|
+
enquire-mcp setup --vault <path> # lädt das Modell herunter, baut FTS5 + embed-db
|
|
124
|
+
enquire-mcp serve --vault <path> --persistent-index --enable-reranker --use-hnsw
|
|
125
|
+
enquire-mcp doctor --vault <path> # farblich codierter ✓/⚠/✗-Gesundheitscheck
|
|
126
|
+
```
|
|
127
|
+
|
|
128
|
+
---
|
|
129
|
+
|
|
130
|
+
## 🤖 In Ihrem KI-Agenten einrichten — Prompts zum Kopieren und Einfügen
|
|
131
|
+
|
|
132
|
+
Sobald `enquire-mcp` installiert ist, fügen Sie diese Prompts in Ihren Agenten ein, damit er weiß, dass der Vault als Gedächtnis verfügbar ist.
|
|
133
|
+
|
|
134
|
+
<details>
|
|
135
|
+
<summary><b>Claude Code (Terminal)</b> — MCP-Server hinzufügen + erster Prompt</summary>
|
|
136
|
+
|
|
137
|
+
```bash
|
|
138
|
+
# Fügen Sie den MCP-Server zu Ihrer Claude-Code-Konfiguration hinzu (einmalig)
|
|
139
|
+
claude mcp add obsidian -- npx -y @oomkapwn/enquire-mcp serve --vault ~/Documents/Obsidian\ Vault
|
|
140
|
+
```
|
|
141
|
+
|
|
142
|
+
Dann in jeder Claude-Code-Sitzung:
|
|
143
|
+
|
|
144
|
+
> Du verfügst jetzt über `obsidian_*`-Tools, die meinen Obsidian-Vault durchsuchen und lesen — mein Langzeitgedächtnis. Bevor du Fragen zu Projekten, Entscheidungen, Personen oder technischem Kontext beantwortest, rufe `obsidian_search` mit den relevanten Begriffen auf. Belege jeden Fakt mit der Quellnotiz (und `[page: N]` bei PDFs). Wenn du keine relevante Notiz findest, sag es — rate nicht.
|
|
145
|
+
|
|
146
|
+
</details>
|
|
147
|
+
|
|
148
|
+
<details>
|
|
149
|
+
<summary><b>Claude Desktop</b> — Konfigurationsdatei + erster Prompt</summary>
|
|
150
|
+
|
|
151
|
+
Legen Sie [`examples/claude-desktop-hybrid.json`](./examples/claude-desktop-hybrid.json) in die MCP-Konfiguration von Claude Desktop (bearbeiten Sie zuerst den Vault-Pfad). Starten Sie Claude Desktop neu, dann:
|
|
152
|
+
|
|
153
|
+
> Du hast meinen Obsidian-Vault als durchsuchbares Gedächtnis über die `obsidian_*`-Tools angebunden. Prüfe immer zuerst `obsidian_search`, wenn ich dich nach etwas in meinen Notizen frage — Besprechungskontext, Recherche, Entscheidungen, Journaleinträge. Zitiere bei jedem Fakt den Pfad der Quellnotiz.
|
|
154
|
+
|
|
155
|
+
</details>
|
|
156
|
+
|
|
157
|
+
<details>
|
|
158
|
+
<summary><b>Cursor</b> — MCP-stdio-Konfiguration + Agenten-Regel</summary>
|
|
159
|
+
|
|
160
|
+
Legen Sie [`examples/cursor-mcp.json`](./examples/cursor-mcp.json) nach `~/.cursor/mcp.json` (bearbeiten Sie den Vault-Pfad). In Ihrer `.cursorrules`-Datei oder im Chat:
|
|
161
|
+
|
|
162
|
+
> Bevor du Code vorschlägst, der ein Thema berührt, zu dem ich Notizen haben könnte (Architektur-Entscheidungen, API-Verträge, Anbieterbewertungen), rufe zuerst `obsidian_search` auf. Behandle meinen Obsidian-Vault als maßgeblichen Kontext.
|
|
163
|
+
|
|
164
|
+
</details>
|
|
165
|
+
|
|
166
|
+
<details>
|
|
167
|
+
<summary><b>Benutzerdefiniertes GPT von ChatGPT</b> — Remote-MCP über HTTP</summary>
|
|
168
|
+
|
|
169
|
+
Folgen Sie [`examples/chatgpt-actions.md`](./examples/chatgpt-actions.md), um `serve-http` über einen Tunnel mit Bearer-Auth bereitzustellen. In den Anweisungen Ihres benutzerdefinierten GPT:
|
|
170
|
+
|
|
171
|
+
> Du hast Lesezugriff auf meinen Obsidian-Vault über die `obsidian_*`-Tool-Familie. Suche, bevor du etwas beantwortest, das in meinen Notizen stehen könnte; zitiere bei jeder Behauptung den Pfad der Quelldatei.
|
|
172
|
+
|
|
173
|
+
</details>
|
|
174
|
+
|
|
175
|
+
<details>
|
|
176
|
+
<summary><b>OpenClaw / Codex / jeder andere MCP-Client</b></summary>
|
|
177
|
+
|
|
178
|
+
Derselbe Befehl `npx -y @oomkapwn/enquire-mcp serve --vault <path>` funktioniert für jeden MCP-kompatiblen Client. In der MCP-Konfigurationsdokumentation des Clients erfahren Sie, wo der Servereintrag abzulegen ist; verwenden Sie dann einen der obigen Prompts.
|
|
179
|
+
|
|
180
|
+
</details>
|
|
181
|
+
|
|
182
|
+
**Wiederverwendbare Agenten-Regel** (in eine beliebige `AGENTS.md` / `CLAUDE.md` / `.cursorrules` einfügen, damit der Agent weiß, *wann* er auf den Vault zugreifen soll):
|
|
183
|
+
|
|
184
|
+
> Wenn meine Frage meine eigenen Notizen, Entscheidungen, Projekte, Personen oder Recherchen berührt, **suche zuerst in meinem Obsidian-Vault** über die `obsidian_*`-Tools (beginne mit `obsidian_search`) und zitiere bei jedem Fakt die Quellnotiz. Bevorzuge enquire für *konzeptuellen / sprachübergreifenden / „Was habe ich über X gesagt"*-Abruf; verwende einfaches `grep` / `ripgrep` für exakte wörtliche Zeichenketten. Wenn nichts Relevantes zurückkommt, sag es — rate nicht.
|
|
185
|
+
|
|
186
|
+
### Beispielabfragen, die gut funktionieren
|
|
187
|
+
|
|
188
|
+
- *„Finde jede Notiz, in der ich über Preisstrategie gesprochen habe, und fasse die Entwicklung zusammen."* — RRF-Fusion + Reranker verarbeiten „Entwicklung" semantisch
|
|
189
|
+
- *„Wie lautete meine Entscheidung zu PostgreSQL vs. MongoDB? Zitiere die Tagesnotiz."* — Wikilink-Graph-Boost holt das zentrale Entscheidungsdokument nach oben
|
|
190
|
+
- *„Анализируй мои заметки о RAG за последние 3 месяца"* — mehrsprachige Embeddings + Frontmatter-Datumsfilter
|
|
191
|
+
- *„Auf welchen Seiten des LLaMA-3-Paper-PDFs geht es um Skalierung?"* — PDFs in die Suche eingemischt mit `[page: N]`-Zitaten
|
|
192
|
+
- *„Zeig mir thematische Communities in meinem Recherche-Vault — welche Themen habe ich erkundet?"* — `obsidian_get_communities` (GraphRAG-light)
|
|
193
|
+
|
|
194
|
+
---
|
|
195
|
+
|
|
196
|
+
## 🧠 Anwendungsfälle
|
|
197
|
+
|
|
198
|
+
**1 — Langzeitgedächtnis für KI-Agenten.** Klinken Sie Ihren Obsidian-Vault in jeden MCP-kompatiblen Agenten ein (Claude Code, Claude Desktop, Cursor, ChatGPT, Codex, OpenClaw). Der Agent verfügt nun über dauerhaften, semantischen Abruf über jede Besprechungsnotiz, jeden Journaleintrag, jedes Recherche-Log und jedes Entscheidungsdokument, das Sie je geschrieben haben — über Sitzungen, Modelle und Anbieter hinweg. Anders als `Claude Memory` oder `ChatGPT Memory` ist Ihr Wissen nicht in die Cloud eines einzigen Anbieters gesperrt; es lebt in reinem Markdown, das Ihnen gehört und das Sie frei migrieren können.
|
|
199
|
+
|
|
200
|
+
**2 — Persönliche Wissensdatenbank / zweites Gehirn.** Das Hybrid-Retrieval holt die richtige Notiz für *jede* Formulierung nach oben, in jeder der 50+ Sprachen. Fragen Sie auf Englisch nach einem russischsprachigen Journaleintrag von vor zwei Jahren, und Sie erhalten den richtigen Treffer. Der Wikilink-Graph-Boost stuft Notizen höher ein, die im Zentrum Ihres Wissensgraphen stehen. GraphRAG-light bringt thematische Communities zum Vorschein — entdecken Sie Verbindungen, an die Sie sich nicht mehr erinnert haben. PDFs fließen mit `[page: N]`-Zitaten in die Suche ein, sodass Forschungsarbeiten und Besprechungsprotokolle zu erstklassigem Gedächtnis werden.
|
|
201
|
+
|
|
202
|
+
**3 — Agentisches RAG / Kontext-Engineering.** `obsidian_search` legt die Scores pro Signal offen, damit der Agent sieht, *warum* jeder Treffer eingestuft wurde. HyDE schreibt vage Abfragen vorab in reichhaltige hypothetische Antworten um, bevor das Retrieval erfolgt. Die Teilfragen-Zerlegung bewältigt Multi-Hop-Fragen („Wie hat sich unsere Preisstrategie entwickelt und wie haben die Kunden reagiert?"), indem sie sie in unabhängige Teilabfragen aufteilt und die Ergebnisse fusioniert. Das integrierte Eval-Harness (NDCG / Recall / MRR) erlaubt es Ihnen, die Retrieval-Qualität an Ihren eigenen Abfragen zu messen, statt den Benchmarks der Anbieter zu vertrauen.
|
|
203
|
+
|
|
204
|
+
---
|
|
205
|
+
|
|
206
|
+
## 🚫 Wann enquire-mcp *nicht* das richtige Tool ist
|
|
207
|
+
|
|
208
|
+
Ehrliche Nicht-Ziele — greifen Sie zu etwas anderem, wenn:
|
|
209
|
+
|
|
210
|
+
- **Sie eine wörtliche String-/Regex-Suche wollen.** `ripgrep` / `grep` ist schneller und exakt für „finde genau dieses Token". enquire glänzt beim *konzeptuellen* Abruf — Synonyme, sprachübergreifend, „Was habe ich über X gesagt". Nutzen Sie beides: `rg` fürs Wörtliche, enquire fürs Bedeutungsmäßige.
|
|
211
|
+
- **Ihr Wissen in Chat-Protokollen lebt, nicht in Notizen.** enquire ist im Markdown *verankert*, das Sie verfasst haben. Konversationsgedächtnis-Tools (mem0, Zep, Supermemory), die Fakten aus Chat-Transkripten in einen separaten Speicher *extrahieren*, sind eine andere Kategorie — siehe den [Vergleich](./docs/COMPARISON.md).
|
|
212
|
+
- **Sie eine Mehrbenutzer- / gehostete / synchronisierte Suche brauchen.** enquire ist von Grund auf Local-First und Single-Vault — kein serverseitiger mandantenfähiger Index.
|
|
213
|
+
- **Ihre Quellen weder Markdown noch PDF sind.** `.md` / `.canvas` / `.base` / `.pdf` sind erstklassig; andere Formate müssen zuerst konvertiert werden.
|
|
214
|
+
- **Sie eine GUI oder ein In-App-Obsidian-Plugin wollen.** enquire ist ein Headless-MCP-Server / CLI — es *ergänzt* Obsidian, es ist keines. (Smart Connections ist die In-App-Plugin-Option.)
|
|
215
|
+
- **Sie eine Suche im Submillisekundenbereich über Millionen von Notizen brauchen.** HNSW liefert Top-K in unter 10 ms bei großem Maßstab, aber enquire zielt auf persönliche / Team-Vaults ab, nicht auf Korpora im Web-Maßstab.
|
|
216
|
+
|
|
217
|
+
---
|
|
218
|
+
|
|
219
|
+
## 📖 API-Referenz
|
|
220
|
+
|
|
221
|
+
Automatisch generierte **[API-Referenz auf oomkapwn.github.io/enquire-mcp](https://oomkapwn.github.io/enquire-mcp/)** — jedes Tool, jeder Prompt und jeder exportierte Helper mit vollständigem TSDoc (`@param` / `@returns` / `@example`). Bei jedem Push auf `main` aus dem Quellcode neu gebaut über [`publish-docs.yml`](https://github.com/oomkapwn/enquire-mcp/blob/main/.github/workflows/publish-docs.yml) (TypeDoc → GitHub Pages). Driftfrei per Konstruktion: Dasselbe TSDoc, das KI-Agenten und IDEs sehen, ist das, was veröffentlicht wird.
|
|
222
|
+
|
|
223
|
+
---
|
|
224
|
+
|
|
225
|
+
## 🏗️ Wie das Retrieval funktioniert
|
|
226
|
+
|
|
227
|
+
```mermaid
|
|
228
|
+
graph LR
|
|
229
|
+
Q[Query] --> S[obsidian_search]
|
|
230
|
+
S --> BM25[BM25 / FTS5]
|
|
231
|
+
S --> TFIDF[TF-IDF cosine]
|
|
232
|
+
S --> EMB[ML embeddings<br/>HNSW]
|
|
233
|
+
BM25 --> RRF{RRF fusion<br/>k=60}
|
|
234
|
+
TFIDF --> RRF
|
|
235
|
+
EMB --> RRF
|
|
236
|
+
RRF --> GB[Graph boost<br/>α × in-degree]
|
|
237
|
+
GB --> RR[BGE cross-encoder<br/>reranker]
|
|
238
|
+
RR --> R[Ranked hits<br/>per_signal observability]
|
|
239
|
+
```
|
|
240
|
+
|
|
241
|
+
`obsidian_search` erkennt automatisch die verfügbaren Signale und degradiert anmutig. Der Wikilink-Graph-Boost stuft das Top-K über ein personalisiertes 1-Schritt-PageRank um. Das optionale Cross-Encoder-Reranking bewertet das Top-N neu für gemessene +15.5 NDCG@10. Jeder Treffer liefert `per_signal: { bm25, tfidf, embeddings }` zurück, damit Sie sehen, WARUM er eingestuft wurde.
|
|
242
|
+
|
|
243
|
+
| Stufe | Einrichtung | Was Sie erhalten |
|
|
244
|
+
|---|---|---|
|
|
245
|
+
| **1** | `serve --vault <path>` | TF-IDF-Cosinus (null Einrichtung, sofort) |
|
|
246
|
+
| **2** | + `--persistent-index` | + BM25 / FTS5 (Top-10 in unter 100 ms) |
|
|
247
|
+
| **3** | + `setup` (lädt Modell herunter + baut embed-db) | + mehrsprachige ML-Embeddings |
|
|
248
|
+
| **4** | + `--enable-reranker` | + BGE-Cross-Encoder (+15.5 NDCG@10 gemessen) |
|
|
249
|
+
| **5** | + `--use-hnsw` | + Top-K in unter 10 ms im Millionen-Chunk-Maßstab |
|
|
250
|
+
| **6** | + `--include-pdfs` | + PDFs in alles Vorstehende eingemischt |
|
|
251
|
+
| **7** | `serve-http --bearer-token …` | + Remote-MCP (Claude.ai-Web, ChatGPT, Cursor-HTTP, mobil) |
|
|
252
|
+
|
|
253
|
+
---
|
|
254
|
+
|
|
255
|
+
## 🛠️ Alle 46 Tools
|
|
256
|
+
|
|
257
|
+
46 Tools insgesamt: 34 stets aktive Lese-Tools (inkl. dem übergreifenden `obsidian_search`) + 4 optionale Lese-Tools + 7 abgesicherte Schreib-Tools + 1 Closed-Loop-Feedback. Vollständige Referenz: **[docs/api.md](./docs/api.md)**.
|
|
258
|
+
|
|
259
|
+
| Kategorie | Tools |
|
|
260
|
+
|---|---|
|
|
261
|
+
| **Suche & Retrieval** | `obsidian_search` (übergreifend, per RRF fusioniert) · `obsidian_hyde_search` (HyDE-augmentiert, v3.1.0) · `obsidian_search_text` · `obsidian_full_text_search` · `obsidian_semantic_search` · `obsidian_embeddings_search` · `obsidian_find_similar` |
|
|
262
|
+
| **Wikilinks & Graph** | `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) |
|
|
263
|
+
| **Frontmatter & Dataview** | `obsidian_frontmatter_get` · `obsidian_frontmatter_search` · `obsidian_dataview_query` · `obsidian_list_tags` |
|
|
264
|
+
| **Lesen & navigieren** | `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` |
|
|
265
|
+
| **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) |
|
|
266
|
+
| **Schreib-Tools** (abgesichert durch `--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` |
|
|
267
|
+
| **Diagnose / Lint** | `obsidian_lint_wiki` · `obsidian_paper_audit` · `obsidian_validate_note_proposal` |
|
|
268
|
+
| **Feedback** (optional via `--feedback-weight`) | `obsidian_mark_useful` (Closed-Loop: erfasst, welche abgerufenen Notizen geholfen haben; wertet sie in künftigen Suchen auf) |
|
|
269
|
+
|
|
270
|
+
Plus 3 MCP-Ressourcen (`obsidian://vault/info`, `obsidian://note/{path}`, `obsidian://chunk/{n}/{path}`) und 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`) für gängige Vault-Workflows.
|
|
271
|
+
|
|
272
|
+
---
|
|
273
|
+
|
|
274
|
+
## 🛡️ Vertrauen
|
|
275
|
+
|
|
276
|
+
| Aspekt | Haltung |
|
|
277
|
+
|---|---|
|
|
278
|
+
| **Standard** | Schreibgeschützt — `--enable-write` für die 7 Schreib-Tools erforderlich |
|
|
279
|
+
| **Geringstes Privileg** | `--disabled-tools` / `--enabled-tools` legen eine minimale Oberfläche offen (z. B. erhält ein schreibgeschützter Recherche-Agent nur `obsidian_search` + `obsidian_read_note`) |
|
|
280
|
+
| **Pfadsicherheit** | Realpath-Prüfung bei jedem Lesen + Schreiben; Symlinks aus dem Vault heraus werden abgelehnt |
|
|
281
|
+
| **Privatsphäre-Filter** | An den Ressourcenpfaden von FTS5 + embed-db + Chunk verifiziert; fail-closed bei leeren Allow-/Deny-Listen |
|
|
282
|
+
| **HTTP-Transport** | Bearer-Auth (konstantzeitiges SHA-256 + `timingSafeEqual`), Rate-Limit pro Token, striktes CORS |
|
|
283
|
+
| **Frontmatter** | `js-yaml@5` `load` (YAML-1.2-Core-Schema, standardmäßig sicher) — keine Code-Ausführung |
|
|
284
|
+
| **Cache- + Indexdateien** | chmod 0600, übergeordnetes Verzeichnis 0700 |
|
|
285
|
+
| **CI** | **9 erforderliche** Branch-Protection-Gates: (1) `lint`, (2) `test` auf Node 22, (3) `test` auf Node 24, (4) `smoke`, (5) `audit`, (6) `coverage`, (7) `version-consistency`, (8) `docs`, (9) `oia`. **5 beratende**: `test-macos` + `docker` (Dockerfile-Build + `tools/list`-Introspektions-Smoke) via `.github/workflows/ci.yml`; CodeQL ×2 + Analyze-Actions via [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) (keine Workflow-Dateien). Der Release-Workflow verifiziert vor dem npm-Publish erneut, dass alle 9 erforderlichen Gates auf dem getaggten SHA bestanden haben. _v3.7.10 — `docs` (TypeDoc-Generierungs-Gate) zum erforderlichen Satz hinzugefügt. v3.7.13 — `engines.node`-Untergrenze auf `>=22.13.0` angehoben, um zur CI-Matrix zu passen. v3.8.0-rc.6 — `oia` (Outside-In-Audit) vom beratenden Satz heraufgestuft._ |
|
|
286
|
+
| **Coverage** | Zeilen ≥86 % · Statements ≥82 % · Funktionen ≥75 % · Branches ≥74 % (abgesichert) |
|
|
287
|
+
| **Releases** | npm + GitHub-Release pro Tag · semver · **signierte Build-Provenienz** (npm + Sigstore, SLSA Build L2; L3-Generator auf der Roadmap) |
|
|
288
|
+
| **Stabilität** | v3.0+ semver-gebunden — jedes CLI-Flag, jeder Tool-Name, jede MCP-Ressource, jeder Prompt und jedes exportierte Symbol ist Vertrag |
|
|
289
|
+
|
|
290
|
+
Vollständige Haltung: **[SECURITY.md](./SECURITY.md)** · Stabilitätsoberfläche: **[STABILITY.md](./STABILITY.md)** · Sicherheitslücken: `oomkapwn@gmail.com`.
|
|
291
|
+
|
|
292
|
+
---
|
|
293
|
+
|
|
294
|
+
## ❓ FAQ
|
|
295
|
+
|
|
296
|
+
**Muss Obsidian installiert sein?** Nein. Liest `.md` + `.canvas` + `.pdf` direkt. Funktioniert mit jedem Vault im Obsidian-Format.
|
|
297
|
+
|
|
298
|
+
**Schreibt es in meinen Vault?** Nur wenn Sie `--enable-write` übergeben. Alle 7 Schreib-Tools sind abgesichert; destruktive unterstützen `dry_run`.
|
|
299
|
+
|
|
300
|
+
**Werden Daten irgendwohin gesendet?** Nur bei `enquire-mcp install-model` (lädt ONNX-Gewichte einmalig von HuggingFace herunter). Der Serve-Modus stellt niemals ausgehende HTTP-Anfragen. Embeddings + Reranker laufen lokal auf der CPU.
|
|
301
|
+
|
|
302
|
+
**Performance?** Kalter FTS5-Build: ~5 s/1k Notizen, ~30 s/50k. BM25-Abfrage: immer <100 ms. Embedding-Build: ~30 ms/Chunk auf M1. **HNSW Top-10: unter 10 ms bei jedem Maßstab.** Serve-Kaltstart: ~50 ms mit HNSW-Persistenz.
|
|
303
|
+
|
|
304
|
+
**Sprachen?** Standard `paraphrase-multilingual-MiniLM-L12-v2` (50+ Sprachen). Mehrsprachiger Cross-Encoder. End-to-End validiert an zweisprachigen russisch-englischen Vaults. CJK/Thai/Khmer-Tokenisierung via `Intl.Segmenter`.
|
|
305
|
+
|
|
306
|
+
**Remote ausführen?** Ja — `serve-http` stellt denselben Server über [Streamable HTTP](https://modelcontextprotocol.io/specification/2025-06-18/basic/transports#streamable-http) bereit. Stellen Sie Tailscale Funnel oder Cloudflare Tunnel davor für HTTPS. Funktioniert mit dem claude.ai-Web, dem benutzerdefinierten GPT von ChatGPT, dem HTTP-Modus von Cursor und mobilen MCP-Clients. Siehe **[docs/http-transport.md](./docs/http-transport.md)**.
|
|
307
|
+
|
|
308
|
+
---
|
|
309
|
+
|
|
310
|
+
## 🚀 Releases
|
|
311
|
+
|
|
312
|
+
**v3.0.0 — stabiler Kanal.** Die v2.x-Retrieval-Roadmap ist abgeschlossen, und die öffentliche Oberfläche ist nun [semver-gebunden](./STABILITY.md). Best-of-Auswahl:
|
|
313
|
+
|
|
314
|
+
`v2.0` Hybrid-Retrieval (BM25+TF-IDF+Embeddings via RRF) · `v2.6` Remote-MCP · `v2.7-2.8` PDFs eingemischt · `v2.9` BGE-Reranker · `v2.10` OCR · `v2.11` doctor + setup · `v2.12` Eval-Harness · `v2.13` HNSW · `v2.14` zustandsbehaftete Sitzungen · `v2.15` Late-Chunking · `v2.16` HNSW-Persistenz · `v2.17` int8-Quantisierung · `v3.8.0` stable · `v3.8.7` Härtung des HTTP-Transports · **`v3.9.0` stable**: embed-sync des Watchers für OCR-PDFs, HNSW-In-Memory-Live-Update bei Dateiänderungen, R-10 adaptives HNSW-Refill (schließt die >66 %-ausgeschlossene Unterrückgabe). · **`v3.10` stable**: vergessensbewusste Frische — `age_days` + `stale`-Flag + optionales `--recency-weight`-Reranking + frontmatterbewusstes `obsidian_search`.
|
|
315
|
+
|
|
316
|
+
Kanal: `npm install @oomkapwn/enquire-mcp` → neueste stabile Version (`@latest` = v3.11.x). Vorabversion: `npm install @oomkapwn/enquire-mcp@rc` (der neueste Release-Kandidat — siehe [CHANGELOG.md](./CHANGELOG.md)). Vollständiges Changelog: **[CHANGELOG.md](./CHANGELOG.md)** · Vorausschauender Plan: **[ROADMAP.md](https://github.com/oomkapwn/enquire-mcp/blob/main/ROADMAP.md)**.
|
|
317
|
+
|
|
318
|
+
---
|
|
319
|
+
|
|
320
|
+
## 🤝 Mitwirken
|
|
321
|
+
|
|
322
|
+
```bash
|
|
323
|
+
git clone https://github.com/oomkapwn/enquire-mcp.git
|
|
324
|
+
cd enquire-mcp && npm install
|
|
325
|
+
npm test # vollständige Suite (1439 Tests, ~12 s)
|
|
326
|
+
npm run lint # null Warnungen
|
|
327
|
+
npm run build # tsc → dist/
|
|
328
|
+
```
|
|
329
|
+
|
|
330
|
+
Issues, PRs und Ideen sind willkommen. Die Branch-Protection erfordert eine PR-Review auf `main`.
|
|
331
|
+
|
|
332
|
+
---
|
|
333
|
+
|
|
334
|
+
## 📜 Lizenz
|
|
335
|
+
|
|
336
|
+
MIT. Erstellt von [Alex (@OomkaBear)](https://github.com/oomkapwn). Benannt nach [Tim Berners-Lees Prototyp des WWW von 1980](https://en.wikipedia.org/wiki/ENQUIRE) — dem ursprünglichen Hypertext-System, vor dem Web. Die ursprüngliche Spezifikation lautete: Man konnte das System nach allem fragen. **enquire-mcp bringt das in Ihren Vault.**
|
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) · [Русский](./README.ru.md) · [Português](./README.pt.md) · [Français](./README.fr.md) · [日本語](./README.ja.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) · [한국어](./README.ko.md) · [Deutsch](./README.de.md)</sub>
|
|
8
8
|
|
|
9
9
|
### El MCP de Obsidian más avanzado. Memoria a largo plazo para agentes de IA.
|
|
10
10
|
|
package/README.fr.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) · [العربية](./README.ar.md) · [Русский](./README.ru.md) · [Português](./README.pt.md) · **Français** · [日本語](./README.ja.md)</sub>
|
|
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) · [한국어](./README.ko.md) · [Deutsch](./README.de.md)</sub>
|
|
8
8
|
|
|
9
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
10
|
|
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) · [Русский](./README.ru.md) · [Português](./README.pt.md) · [Français](./README.fr.md) · [日本語](./README.ja.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) · [한국어](./README.ko.md) · [Deutsch](./README.de.md)</sub>
|
|
8
8
|
|
|
9
9
|
### सबसे उन्नत Obsidian MCP। AI एजेंट्स के लिए बनी दीर्घकालिक स्मृति।
|
|
10
10
|
|
package/README.ja.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) · [العربية](./README.ar.md) · [Русский](./README.ru.md) · [Português](./README.pt.md) · [Français](./README.fr.md) ·
|
|
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) · **日本語** · [한국어](./README.ko.md) · [Deutsch](./README.de.md)</sub>
|
|
8
8
|
|
|
9
9
|
### 最先端の Obsidian MCP。AI エージェントのための長期記憶。
|
|
10
10
|
|
package/README.ko.md
ADDED
|
@@ -0,0 +1,336 @@
|
|
|
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 에이전트를 위한 장기 기억. 당신의 Obsidian Vault 위에 구축. 오픈소스, MCP 네이티브, 벤더 중립. 하이브리드 검색, BGE 리랭커, HNSW, OCR을 지원하는 PDF. 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.fr.md) · [日本語](./README.ja.md) · **한국어** · [Deutsch](./README.de.md)</sub>
|
|
8
|
+
|
|
9
|
+
<sub>**AI 에이전트를 위한 요약(TL;DR)** — 로컬 Obsidian 마크다운 Vault를 Claude Code, Claude Desktop, Cursor, ChatGPT, Codex, OpenClaw에 영속적이고 검색 가능한 기억으로 노출하는 MCP 서버. 하이브리드 검색(BM25 + ML 임베딩 + BGE 리랭커, RRF 융합), HNSW + int8 양자화, 에이전트형 RAG(HyDE + 하위 질문), GraphRAG-light, PDF + OCR, 독립 실행형 Bases. 벤더 중립, MIT, serve 중 클라우드 호출 0건. 설치: `npm i -g @oomkapwn/enquire-mcp`. 문서: [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
|
+
### 가장 진보한 Obsidian MCP. AI 에이전트를 위한 장기 기억.
|
|
12
|
+
|
|
13
|
+
**세션마다 Claude, Cursor, ChatGPT, Codex, OpenClaw에 컨텍스트를 다시 설명하는 일을 멈추세요. 당신의 Obsidian 노트가 MCP 호환 에이전트 전체에서 공유되고 검색 가능한 기억이 됩니다 — 당신의 지식, 모든 모델, 영원히 당신의 것.**
|
|
14
|
+
|
|
15
|
+
*측정 결과: BGE 크로스 인코더 리랭커는 [재현 가능한 60개 쿼리 어블레이션](./docs/benchmarks.md)에서 일반 하이브리드 대비 **+15.5 NDCG@10 / +24.7 MRR**을 더합니다 — 완전한 최신 IR 스택으로, **당신이** 직접 작성한 마크다운을 다시 불러옵니다(출처 인용 가능, 편집 가능). 클라우드의 의역이 아닙니다.*
|
|
16
|
+
|
|
17
|
+
[](https://github.com/oomkapwn/enquire-mcp/actions/workflows/ci.yml)
|
|
18
|
+
[](https://www.npmjs.com/package/@oomkapwn/enquire-mcp)
|
|
19
|
+
[](https://www.npmjs.com/package/@oomkapwn/enquire-mcp)
|
|
20
|
+
[](#️-신뢰)
|
|
21
|
+
[](./STABILITY.md)
|
|
22
|
+
[](https://slsa.dev/spec/v1.0/levels#build-l2)
|
|
23
|
+
[](https://modelcontextprotocol.io/)
|
|
24
|
+
[](./LICENSE)
|
|
25
|
+
|
|
26
|
+
**[⚡ 30초 설치](#-빠른-시작) · [🧠 사용 사례](#-사용-사례) · [📊 벤치마크](./docs/benchmarks.md) · [📖 API 레퍼런스](https://oomkapwn.github.io/enquire-mcp/) · [💬 대안 비교](./docs/COMPARISON.md)**
|
|
27
|
+
|
|
28
|
+
**Claude Code — 한 줄로:**
|
|
29
|
+
|
|
30
|
+
```bash
|
|
31
|
+
claude mcp add obsidian -- npx -y @oomkapwn/enquire-mcp serve --vault ~/Documents/Obsidian\ Vault
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
</div>
|
|
35
|
+
|
|
36
|
+
> 📌 이 문서는 [README.md](./README.md)의 한국어 번역으로, 한국어 사용자의 가독성을 돕기 위한 것입니다. 내용이 다를 경우 **영어 버전이 기준**이 됩니다(영어 버전은 매 릴리스마다 업데이트됩니다).
|
|
37
|
+
|
|
38
|
+
---
|
|
39
|
+
|
|
40
|
+
## 문제
|
|
41
|
+
|
|
42
|
+
모든 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)은 당신의 지식을 한 공급자의 클라우드에 가두며 — 도구를 바꾸면 다시 잊어버립니다. **당신의 지식은 계속해서 처음부터 다시 시작합니다.**
|
|
43
|
+
|
|
44
|
+
## 해결책
|
|
45
|
+
|
|
46
|
+
당신의 Obsidian Vault는 모든 MCP 호환 에이전트를 위한 **영속적이고 질의 가능한 장기 기억**이 됩니다. 한 번의 설치로 — 당신의 지식은 Claude Code, Claude Desktop, Cursor, ChatGPT 커스텀 GPT, Codex, OpenClaw, 그리고 다른 모든 MCP 클라이언트에서 즉시 접근 가능해집니다. **당신이 소유하는** 일반 마크다운 파일을 로컬에서 인덱싱하고, 완전한 최신 IR 스택으로 검색하며, 모든 세션과 모든 모델에 걸쳐 불러옵니다.
|
|
47
|
+
|
|
48
|
+
**추출이 아니라 근거(grounded)입니다.** 대화 기억 도구(mem0, Zep, Supermemory, Memobase)는 당신의 채팅 로그에서 사실을 *추출*해 당신이 읽을 수 없는 별도의 저장소에 넣습니다. enquire-mcp는 그 반대입니다. 즉 **당신이 이미 작성한 지식에 근거**합니다 — 당신 자신의 `.md` 노트를, 그대로, 인용과 함께 — 그래서 회상이 감사 가능하고, 어떤 에디터에서든 편집할 수 있으며, 절반쯤 기억나는 채팅의 손실 있는 요약이 결코 아닙니다. 그리고 서버 측 ***플릿(fleet)*-기억** 플랫폼 — 에이전트 트래픽을 공유 데이터베이스로 의역하는 멀티 테넌트 클라우드 저장소 — 과 달리, enquire는 **단일 사용자, 로컬 우선**입니다. 즉 당신이 온전히 소유하고 직접 읽고 편집하고 삭제할 수 있는 하나의 Vault이며, serve 중 클라우드 호출은 0건입니다. (이 "추출" 비판은 채팅 기억 부류에 특정된 것이며 — cognee 같은 지식 그래프 / ETL 도구나 Khoj 같은 개인 검색 동종 제품을 겨냥한 것이 아닙니다.)
|
|
49
|
+
|
|
50
|
+
**근거 기반 — 그리고 신선도를 인식합니다.** 사실을 회상하는 것은 문제의 절반일 뿐입니다. 그것이 여전히 *참*인지 아는 것이 나머지 절반입니다. [Memora 벤치마크](https://arxiv.org/abs/2604.20006)(2026년 4월)는 기억 시스템이 오래된 사실의 재사용에서 체계적으로 실패함을 보여주었습니다 — 1년 된 노트를 마치 오늘 작성된 것처럼 회상하는 것입니다. enquire의 기억은 당신의 실제 마크다운 파일 *그 자체*이기 때문에, 모든 검색 결과는 노트의 실시간 마지막 수정 시각에서 파생된 `age_days` + `stale` 플래그를 담고 있으며, 더 신선한 노트가 먼저 떠오르도록 최신성 가중 순위(`--recency-weight`)를 선택적으로 켤 수 있습니다. 당신의 지식, 신선도를 인식하는 — 시간을 초월한 덩어리가 아닙니다.
|
|
51
|
+
|
|
52
|
+
> **무엇이 enquire-mcp를 다르게 만드는가**:
|
|
53
|
+
> 1. **벤더 중립.** 당신의 기억은 `.md` 파일에 존재합니다. Claude에서 Cursor로 전환해도 — 당신의 기억이 함께 따라옵니다.
|
|
54
|
+
> 2. **최고 수준의 검색.** 하이브리드 BM25 + 다국어 임베딩 + BGE 크로스 인코더 리랭커를 RRF로 융합하고, HNSW + int8 양자화로 확장합니다. 검색 스타트업이 구축할 법한 바로 그 IR 스택 — 오픈소스로, 하나의 바이너리 안에.
|
|
55
|
+
> 3. **serve 중 클라우드 호출 0건.** 임베딩 모델은 **당신의 머신에서** 실행되어 **당신이** 작성한 마크다운을 인덱싱합니다 — 그래서 클라우드 API 키가 아니라 일회성 로컬 다운로드(~110 MB)입니다. 근거 기반 + 프라이버시는 공짜가 아니며, 우리는 그런 척하지 않습니다. 당신의 Vault 콘텐츠는 당신의 머신을 결코 떠나지 않으며, 기본적으로 에어갭(air-gap) 안전합니다([강제됨](./SECURITY.md), 희망 사항이 아님).
|
|
56
|
+
> 4. **신선도를 인식하는 회상.** 모든 결과는 노트가 얼마나 오래되었는지 보고합니다. 선택형 최신성 재순위는 에이전트가 신선한 지식을 선호하고 재검증이 필요한 오래된 사실을 표시하도록 합니다 — 망각을 인식하는 최전선이, 당신의 파일이 이미 가진 `mtime` 위에 구축됩니다.
|
|
57
|
+
|
|
58
|
+
**도구 46개 · MCP 프롬프트 19개 · 단위 테스트 1439+개 · 50+ 개 언어 · v3.11.x stable · semver 결속 · MIT · npm 빌드 출처 증명(SLSA L2).**
|
|
59
|
+
|
|
60
|
+
---
|
|
61
|
+
|
|
62
|
+
## 🏆 왜 최고인가
|
|
63
|
+
|
|
64
|
+
**다른 어떤 Obsidian-MCP에도 전혀 없는 여섯 가지 기능**(GraphRAG-light, 독립 실행형 `.base` 실행, HyDE, int8 양자화, late-chunking, 내장 평가 하니스). **거기에 더해 완전한 최신 IR 스택**(BM25 + ML 임베딩 + 크로스 인코더 리랭킹 + HNSW)까지 — 경쟁 제품은 이 중 많아야 하나둘만 제공합니다. 나란히 비교하면:
|
|
65
|
+
|
|
66
|
+
| 기능 | enquire-mcp | Smart Connections | 다른 Obsidian-MCP |
|
|
67
|
+
|---|:---:|:---:|:---:|
|
|
68
|
+
| 하이브리드 검색 (BM25 + TF-IDF + ML 임베딩, RRF 융합) | ✅ | ❌ | ❌ |
|
|
69
|
+
| **크로스 인코더 리랭킹** (BGE, +15.5 NDCG@10 측정) | ✅ | ❌ | ❌ |
|
|
70
|
+
| **HNSW 벡터 인덱스** (10ms 미만 top-K, 영속화) | ✅ | ❌ | ❌ |
|
|
71
|
+
| **int8 벡터 양자화** (임베딩 DB ~4× 축소) | ✅ | ❌ | ❌ |
|
|
72
|
+
| **Late-chunking** 컨텍스트 윈도우 임베딩 | ✅ | ❌ | ❌ |
|
|
73
|
+
| **하이브리드 검색에 융합된 PDF** (`[page: N]` 인용) | ✅ | ❌ | ❌ |
|
|
74
|
+
| **스캔된 PDF용 OCR** (Tesseract.js, 다국어) | ✅ | ❌ | ❌ |
|
|
75
|
+
| **위키링크 그래프 부스트** 검색 신호 | ✅ | ❌ | ❌ |
|
|
76
|
+
| **다국어 시맨틱 검색** (50+ 개 언어, 온디바이스) | ✅ | 💰 유료 | ❌ |
|
|
77
|
+
| **내장 검색 품질 평가 하니스** (NDCG, Recall, MRR, A/B 매트릭스) | ✅ | ❌ | ❌ |
|
|
78
|
+
| HTTP 기반 **원격 MCP** + bearer 인증 + 상태 유지 세션 | ✅ | ❌ | 일부 |
|
|
79
|
+
| 결과별 **신호별 관측 가능성** | ✅ | ❌ | ❌ |
|
|
80
|
+
| **MCP 네이티브** (Claude · Cursor · ChatGPT · Codex · OpenClaw · 모든 클라이언트) | ✅ | ❌ Obsidian 전용 | 제각각 |
|
|
81
|
+
| 모든 검색 + 쓰기 경로에서 검증되는 **프라이버시 필터** | ✅ | 해당 없음 | ❌ |
|
|
82
|
+
| **프로덕션 도구 46개** (상시 활성 읽기 34개 + 선택형 4개 + 게이트된 쓰기 7개 + 피드백 도구 1개) | ✅ | 해당 없음 | 제각각 |
|
|
83
|
+
| **GraphRAG-light** (Louvain 모듈성을 통한 위키링크 커뮤니티 탐지) | ✅ **여기에만 있음** | ❌ | ❌ |
|
|
84
|
+
| **독립 실행형 `.base` 쿼리 실행** (Obsidian 실행 없이 동작) | ✅ **여기에만 있음** | ❌ | ❌ Obsidian에 위임 |
|
|
85
|
+
| **HyDE 검색** (Gao et al 2023) + 하위 질문 분해 | ✅ **여기에만 있음** | ❌ | ❌ |
|
|
86
|
+
| **단위 테스트 1439개 · PR당 필수 9개 + 권고 5개 CI 게이트** | ✅ | 해당 없음 | 드묾 |
|
|
87
|
+
| **서명된 빌드 출처 증명** (npm + Sigstore, SLSA Build L2) | ✅ | 해당 없음 | ❌ |
|
|
88
|
+
| **semver로 결속된 공개 표면** ([STABILITY.md](./STABILITY.md)) | ✅ | 해당 없음 | ❌ |
|
|
89
|
+
| 독립 실행형 (Obsidian 플러그인 불필요) | ✅ | ❌ Obsidian 필요 | 제각각 |
|
|
90
|
+
| 라이선스 | MIT, 무료 | 독점, 유료 | 제각각 |
|
|
91
|
+
|
|
92
|
+
<sub>비교는 v3.8.x stable 시점의 각 프로젝트 공개 기능을 기준으로 합니다(최초 스냅샷 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>
|
|
93
|
+
|
|
94
|
+
> 전략적 주장: enquire-mcp는 당신의 기존 Obsidian Vault 위에 올린 [Karpathy 스타일 LLM 위키](https://gist.github.com/karpathy/442a6bf555914893e9891c11519de94f)를 위한 오픈소스 백엔드입니다. 누적되는 지식, 출처까지 추적 가능합니다.
|
|
95
|
+
|
|
96
|
+
---
|
|
97
|
+
|
|
98
|
+
## ⚡ 빠른 시작
|
|
99
|
+
|
|
100
|
+
```bash
|
|
101
|
+
npm install -g @oomkapwn/enquire-mcp
|
|
102
|
+
enquire-mcp serve --vault ~/Documents/Obsidian\ Vault
|
|
103
|
+
```
|
|
104
|
+
|
|
105
|
+
아무 MCP 클라이언트에나 연결하세요:
|
|
106
|
+
|
|
107
|
+
```json
|
|
108
|
+
{
|
|
109
|
+
"mcpServers": {
|
|
110
|
+
"obsidian": {
|
|
111
|
+
"command": "npx",
|
|
112
|
+
"args": ["-y", "@oomkapwn/enquire-mcp", "serve", "--vault", "/path/to/vault"]
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
```
|
|
117
|
+
|
|
118
|
+
📂 바로 사용 가능한 설정이 [`examples/`](./examples/)에 있습니다 — **Claude Desktop**, **Cursor**, **ChatGPT 커스텀 GPT**(HTTP 기반 원격 MCP), 그리고 평가 하니스를 위한 샘플 쿼리 세트.
|
|
119
|
+
|
|
120
|
+
**완전한 하이브리드 성능을 원하시나요?** 한 명령으로 손대지 않아도 되는 온보딩:
|
|
121
|
+
|
|
122
|
+
```bash
|
|
123
|
+
enquire-mcp setup --vault <path> # 모델 다운로드, FTS5 + 임베딩 DB 구축
|
|
124
|
+
enquire-mcp serve --vault <path> --persistent-index --enable-reranker --use-hnsw
|
|
125
|
+
enquire-mcp doctor --vault <path> # 색상으로 구분된 ✓/⚠/✗ 헬스 체크
|
|
126
|
+
```
|
|
127
|
+
|
|
128
|
+
---
|
|
129
|
+
|
|
130
|
+
## 🤖 AI 에이전트에서 설정하기 — 복사-붙여넣기 프롬프트
|
|
131
|
+
|
|
132
|
+
`enquire-mcp`를 설치한 뒤, Vault가 기억으로 사용 가능하다는 것을 에이전트가 알도록 다음 프롬프트를 붙여넣으세요.
|
|
133
|
+
|
|
134
|
+
<details>
|
|
135
|
+
<summary><b>Claude Code (터미널)</b> — MCP 서버 추가 + 첫 프롬프트</summary>
|
|
136
|
+
|
|
137
|
+
```bash
|
|
138
|
+
# Claude Code 설정에 MCP 서버 추가 (1회)
|
|
139
|
+
claude mcp add obsidian -- npx -y @oomkapwn/enquire-mcp serve --vault ~/Documents/Obsidian\ Vault
|
|
140
|
+
```
|
|
141
|
+
|
|
142
|
+
그런 다음 아무 Claude Code 세션에서:
|
|
143
|
+
|
|
144
|
+
> 이제 너는 내 Obsidian Vault를 검색하고 읽는 `obsidian_*` 도구들을 가지고 있어 — 이것이 내 장기 기억이야. 프로젝트, 결정, 사람, 기술적 맥락에 관한 질문에 답하기 전에 관련 용어로 `obsidian_search`를 호출해. 각 사실은 출처 노트와 함께 인용하고(PDF는 `[page: N]`도). 관련 노트를 찾지 못하면 그렇다고 말해 — 추측하지 마.
|
|
145
|
+
|
|
146
|
+
</details>
|
|
147
|
+
|
|
148
|
+
<details>
|
|
149
|
+
<summary><b>Claude Desktop</b> — 설정 파일 + 첫 프롬프트</summary>
|
|
150
|
+
|
|
151
|
+
[`examples/claude-desktop-hybrid.json`](./examples/claude-desktop-hybrid.json)을 Claude Desktop의 MCP 설정에 넣으세요(먼저 Vault 경로를 수정). Claude Desktop을 재시작한 뒤:
|
|
152
|
+
|
|
153
|
+
> 너는 `obsidian_*` 도구들을 통해 내 Obsidian Vault를 검색 가능한 기억으로 연결해 두었어. 내 노트에 있는 무엇이든 — 회의 맥락, 리서치, 결정, 일지 항목 — 물어볼 때면 항상 먼저 `obsidian_search`를 확인해. 모든 사실에 출처 노트 경로를 인용해.
|
|
154
|
+
|
|
155
|
+
</details>
|
|
156
|
+
|
|
157
|
+
<details>
|
|
158
|
+
<summary><b>Cursor</b> — MCP stdio 설정 + 에이전트 규칙</summary>
|
|
159
|
+
|
|
160
|
+
[`examples/cursor-mcp.json`](./examples/cursor-mcp.json)을 `~/.cursor/mcp.json`에 넣으세요(Vault 경로 수정). `.cursorrules` 파일이나 채팅에서:
|
|
161
|
+
|
|
162
|
+
> 내가 노트를 가지고 있을 법한 주제(아키텍처 결정, API 계약, 벤더 평가)와 관련된 코드를 제안하기 전에, 먼저 `obsidian_search`를 호출해. 내 Obsidian Vault를 권위 있는 컨텍스트로 취급해.
|
|
163
|
+
|
|
164
|
+
</details>
|
|
165
|
+
|
|
166
|
+
<details>
|
|
167
|
+
<summary><b>ChatGPT 커스텀 GPT</b> — HTTP 기반 원격 MCP</summary>
|
|
168
|
+
|
|
169
|
+
[`examples/chatgpt-actions.md`](./examples/chatgpt-actions.md)을 따라 bearer 인증과 함께 터널을 통해 `serve-http`를 노출하세요. 커스텀 GPT의 지침에:
|
|
170
|
+
|
|
171
|
+
> 너는 `obsidian_*` 도구 패밀리를 통해 내 Obsidian Vault에 읽기 접근 권한이 있어. 내 노트에 있을 법한 것을 답하기 전에 검색해. 모든 주장에 출처 파일 경로를 인용해.
|
|
172
|
+
|
|
173
|
+
</details>
|
|
174
|
+
|
|
175
|
+
<details>
|
|
176
|
+
<summary><b>OpenClaw / Codex / 그 외 모든 MCP 클라이언트</b></summary>
|
|
177
|
+
|
|
178
|
+
동일한 `npx -y @oomkapwn/enquire-mcp serve --vault <path>` 명령이 모든 MCP 호환 클라이언트에서 작동합니다. 서버 항목을 어디에 넣을지는 해당 클라이언트의 MCP 설정 문서를 참고한 뒤, 위 프롬프트 중 아무거나 사용하세요.
|
|
179
|
+
|
|
180
|
+
</details>
|
|
181
|
+
|
|
182
|
+
**재사용 가능한 에이전트 규칙** (에이전트가 *언제* Vault에 손을 뻗어야 하는지 알도록 아무 `AGENTS.md` / `CLAUDE.md` / `.cursorrules`에 넣으세요):
|
|
183
|
+
|
|
184
|
+
> 내 질문이 내 노트, 결정, 프로젝트, 사람, 리서치에 관련될 때면, `obsidian_*` 도구(우선 `obsidian_search`)로 **먼저 내 Obsidian Vault를 검색**하고 모든 사실에 출처 노트를 인용해. *개념적 / 언어 간 / "내가 X에 대해 뭐라고 했더라"* 식의 회상에는 enquire를 선호하고, 정확한 리터럴 문자열에는 일반 `grep` / `ripgrep`을 사용해. 관련된 것이 아무것도 나오지 않으면 그렇다고 말해 — 추측하지 마.
|
|
185
|
+
|
|
186
|
+
### 잘 작동하는 예시 쿼리
|
|
187
|
+
|
|
188
|
+
- *"내가 가격 전략을 논한 모든 노트를 찾아서 그 변화를 요약해줘."* — RRF 융합 + 리랭커가 "변화"를 의미적으로 처리합니다
|
|
189
|
+
- *"PostgreSQL 대 MongoDB에 대한 내 결정이 뭐였지? 데일리 노트를 인용해."* — 위키링크 그래프 부스트가 핵심 결정 문서를 떠오르게 합니다
|
|
190
|
+
- *"Анализируй мои заметки о RAG за последние 3 месяца"* — 다국어 임베딩 + frontmatter 날짜 필터
|
|
191
|
+
- *"LLaMA-3 논문 PDF의 어떤 페이지가 스케일링을 다루지?"* — `[page: N]` 인용과 함께 검색에 융합된 PDF
|
|
192
|
+
- *"내 리서치 Vault의 주제별 커뮤니티를 보여줘 — 내가 어떤 테마를 탐구해왔지?"* — `obsidian_get_communities` (GraphRAG-light)
|
|
193
|
+
|
|
194
|
+
---
|
|
195
|
+
|
|
196
|
+
## 🧠 사용 사례
|
|
197
|
+
|
|
198
|
+
**1 — AI 에이전트를 위한 장기 기억.** 당신의 Obsidian Vault를 아무 MCP 호환 에이전트(Claude Code, Claude Desktop, Cursor, ChatGPT, Codex, OpenClaw)에 넣으세요. 이제 에이전트는 당신이 작성한 모든 회의 노트, 일지 항목, 리서치 로그, 결정 문서에 대해 — 세션, 모델, 공급자를 가로질러 — 영속적이고 시맨틱한 회상을 갖습니다. `Claude Memory`나 `ChatGPT Memory`와 달리, 당신의 지식은 한 벤더의 클라우드에 갇히지 않습니다. 그것은 당신이 소유하고 자유롭게 이전할 수 있는 일반 마크다운에 존재합니다.
|
|
199
|
+
|
|
200
|
+
**2 — 개인 지식 베이스 / 두 번째 뇌.** 하이브리드 검색은 50+ 개 언어 중 어느 언어로든, *어떤* 표현에 대해서도 올바른 노트를 떠오르게 합니다. 2년 전의 러시아어 일지 항목에 대해 영어로 물어도 올바른 결과를 얻습니다. 위키링크 그래프 부스트는 당신의 지식 그래프 중심에 있는 노트를 재순위합니다. GraphRAG-light는 주제별 커뮤니티를 떠오르게 합니다 — 당신이 만든 줄 잊고 있던 연결을 발견하세요. PDF는 `[page: N]` 인용과 함께 검색에 융합되어, 리서치 논문과 회의 녹취록이 일등급 기억이 됩니다.
|
|
201
|
+
|
|
202
|
+
**3 — 에이전트형 RAG / 컨텍스트 엔지니어링.** `obsidian_search`는 신호별 점수를 노출해, 에이전트가 각 결과가 *왜* 순위에 올랐는지 볼 수 있습니다. HyDE는 검색 전에 모호한 쿼리를 풍부한 가설적 답변으로 미리 재작성합니다. 하위 질문 분해는 멀티홉 질문("우리 가격 전략이 어떻게 변했고 고객 반응은 어땠지?")을 독립적인 하위 쿼리로 쪼개고 결과를 융합해 처리합니다. 내장 평가 하니스(NDCG / Recall / MRR)는 벤더 벤치마크를 신뢰하는 대신 당신 자신의 쿼리로 검색 품질을 측정하게 해줍니다.
|
|
203
|
+
|
|
204
|
+
---
|
|
205
|
+
|
|
206
|
+
## 🚫 enquire-mcp가 *적합하지 않은* 경우
|
|
207
|
+
|
|
208
|
+
정직한 비목표 — 다음과 같을 때는 다른 것을 찾으세요:
|
|
209
|
+
|
|
210
|
+
- **리터럴 문자열 / 정규식 검색을 원할 때.** "이 정확한 토큰 찾기"에는 `ripgrep` / `grep`이 더 빠르고 정확합니다. enquire는 *개념적* 회상 — 동의어, 언어 간, "내가 X에 대해 뭐라고 했더라" — 에서 빛납니다. 둘 다 쓰세요: 리터럴에는 `rg`, 의미에는 enquire.
|
|
211
|
+
- **당신의 지식이 노트가 아니라 채팅 로그에 있을 때.** enquire는 당신이 작성한 마크다운에 *근거*합니다. 채팅 녹취록에서 사실을 *추출*해 별도 저장소에 넣는 대화 기억 도구(mem0, Zep, Supermemory)는 다른 범주입니다 — [비교](./docs/COMPARISON.md)를 보세요.
|
|
212
|
+
- **멀티 사용자 / 호스팅 / 동기화 검색이 필요할 때.** enquire는 설계상 로컬 우선이며 단일 Vault입니다 — 서버 측 멀티 테넌트 인덱스가 없습니다.
|
|
213
|
+
- **당신의 소스가 Markdown이나 PDF가 아닐 때.** `.md` / `.canvas` / `.base` / `.pdf`는 일등급입니다. 다른 형식은 먼저 변환이 필요합니다.
|
|
214
|
+
- **GUI나 인앱 Obsidian 플러그인을 원할 때.** enquire는 헤드리스 MCP 서버 / CLI입니다 — Obsidian을 *보완*할 뿐, Obsidian 자체가 아닙니다. (Smart Connections가 인앱 플러그인 옵션입니다.)
|
|
215
|
+
- **수백만 개 노트에 대해 밀리초 미만 검색이 필요할 때.** HNSW는 대규모에서 10ms 미만 top-K를 제공하지만, enquire는 웹 규모 코퍼스가 아니라 개인 / 팀 Vault를 겨냥합니다.
|
|
216
|
+
|
|
217
|
+
---
|
|
218
|
+
|
|
219
|
+
## 📖 API 레퍼런스
|
|
220
|
+
|
|
221
|
+
자동 생성된 **[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)을 통해 `main`에 푸시될 때마다 소스에서 재빌드됩니다(TypeDoc → GitHub Pages). 구조적으로 드리프트가 없습니다: AI 에이전트와 IDE가 보는 바로 그 TSDoc이 게시되는 것입니다.
|
|
222
|
+
|
|
223
|
+
---
|
|
224
|
+
|
|
225
|
+
## 🏗️ 검색 동작 방식
|
|
226
|
+
|
|
227
|
+
```mermaid
|
|
228
|
+
graph LR
|
|
229
|
+
Q[Query] --> S[obsidian_search]
|
|
230
|
+
S --> BM25[BM25 / FTS5]
|
|
231
|
+
S --> TFIDF[TF-IDF cosine]
|
|
232
|
+
S --> EMB[ML embeddings<br/>HNSW]
|
|
233
|
+
BM25 --> RRF{RRF fusion<br/>k=60}
|
|
234
|
+
TFIDF --> RRF
|
|
235
|
+
EMB --> RRF
|
|
236
|
+
RRF --> GB[Graph boost<br/>α × in-degree]
|
|
237
|
+
GB --> RR[BGE cross-encoder<br/>reranker]
|
|
238
|
+
RR --> R[Ranked hits<br/>per_signal observability]
|
|
239
|
+
```
|
|
240
|
+
|
|
241
|
+
`obsidian_search`는 사용 가능한 신호를 자동 감지하고 우아하게 성능을 낮춥니다. 위키링크 그래프 부스트는 1-스텝 개인화 PageRank로 top-K를 재순위합니다. 선택형 크로스 인코더 리랭킹은 측정된 +15.5 NDCG@10을 위해 top-N을 재채점합니다. 모든 결과는 `per_signal: { bm25, tfidf, embeddings }`를 반환해, 왜 그 순위에 올랐는지 볼 수 있습니다.
|
|
242
|
+
|
|
243
|
+
| 등급 | 설정 | 얻는 것 |
|
|
244
|
+
|---|---|---|
|
|
245
|
+
| **1** | `serve --vault <path>` | TF-IDF 코사인 (설정 0, 즉시) |
|
|
246
|
+
| **2** | + `--persistent-index` | + BM25 / FTS5 (100ms 미만 top-10) |
|
|
247
|
+
| **3** | + `setup` (모델 다운로드 + 임베딩 DB 구축) | + 다국어 ML 임베딩 |
|
|
248
|
+
| **4** | + `--enable-reranker` | + BGE 크로스 인코더 (측정된 +15.5 NDCG@10) |
|
|
249
|
+
| **5** | + `--use-hnsw` | + 백만 청크 규모에서 10ms 미만 top-K |
|
|
250
|
+
| **6** | + `--include-pdfs` | + 위의 모든 것에 융합된 PDF |
|
|
251
|
+
| **7** | `serve-http --bearer-token …` | + 원격 MCP (Claude.ai 웹, ChatGPT, Cursor HTTP, 모바일) |
|
|
252
|
+
|
|
253
|
+
---
|
|
254
|
+
|
|
255
|
+
## 🛠️ 전체 46개 도구
|
|
256
|
+
|
|
257
|
+
총 46개 도구: 상시 활성 읽기 34개(우산 격인 `obsidian_search` 포함) + 선택형 읽기 4개 + 게이트된 쓰기 7개 + 폐루프 피드백 1개. 전체 레퍼런스: **[docs/api.md](./docs/api.md)**.
|
|
258
|
+
|
|
259
|
+
| 범주 | 도구 |
|
|
260
|
+
|---|---|
|
|
261
|
+
| **검색 & 회수** | `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` |
|
|
262
|
+
| **위키링크 & 그래프** | `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) |
|
|
263
|
+
| **Frontmatter & Dataview** | `obsidian_frontmatter_get` · `obsidian_frontmatter_search` · `obsidian_dataview_query` · `obsidian_list_tags` |
|
|
264
|
+
| **읽기 & 탐색** | `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` |
|
|
265
|
+
| **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) |
|
|
266
|
+
| **쓰기** (`--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` |
|
|
267
|
+
| **진단 / 린트** | `obsidian_lint_wiki` · `obsidian_paper_audit` · `obsidian_validate_note_proposal` |
|
|
268
|
+
| **피드백** (`--feedback-weight`로 선택 활성) | `obsidian_mark_useful` (폐루프: 회상된 노트 중 어느 것이 도움이 되었는지 기록; 향후 검색에서 가중) |
|
|
269
|
+
|
|
270
|
+
추가로 3개의 MCP 리소스(`obsidian://vault/info`, `obsidian://note/{path}`, `obsidian://chunk/{n}/{path}`)와 일반적인 Vault 워크플로를 위한 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`)가 있습니다.
|
|
271
|
+
|
|
272
|
+
---
|
|
273
|
+
|
|
274
|
+
## 🛡️ 신뢰
|
|
275
|
+
|
|
276
|
+
| 표면 | 자세(Posture) |
|
|
277
|
+
|---|---|
|
|
278
|
+
| **기본값** | 읽기 전용 — 7개 쓰기 도구에는 `--enable-write` 필요 |
|
|
279
|
+
| **최소 권한** | `--disabled-tools` / `--enabled-tools`로 최소 표면 노출 (예: 읽기 전용 리서치 에이전트는 `obsidian_search` + `obsidian_read_note`만 받음) |
|
|
280
|
+
| **경로 안전성** | 모든 읽기+쓰기에서 realpath 검증; Vault 밖으로 나가는 심볼릭 링크 거부 |
|
|
281
|
+
| **프라이버시 필터** | FTS5 + 임베딩 DB + 청크 리소스 경로에서 검증; 빈 허용/거부 목록에 대해 fail-closed |
|
|
282
|
+
| **HTTP 전송** | Bearer 인증 (상수 시간 SHA-256 + `timingSafeEqual`), 토큰별 속도 제한, 엄격한 CORS |
|
|
283
|
+
| **Frontmatter** | `js-yaml@5` `load` (YAML 1.2 코어 스키마, 기본 안전) — 코드 실행 없음 |
|
|
284
|
+
| **캐시 + 인덱스 파일** | chmod 0600, 부모 디렉터리 0700 |
|
|
285
|
+
| **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개 권고**: `.github/workflows/ci.yml`을 통한 `test-macos` + `docker`(Dockerfile 빌드 + `tools/list` 인트로스펙션 스모크); [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)을 통한 CodeQL ×2 + Analyze 액션(워크플로 파일 아님). 릴리스 워크플로는 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)가 권고에서 승격됨._ |
|
|
286
|
+
| **커버리지** | 라인 ≥86% · 구문 ≥82% · 함수 ≥75% · 브랜치 ≥74% (게이트됨) |
|
|
287
|
+
| **릴리스** | 태그별 npm + GitHub 릴리스 · semver · **서명된 빌드 출처 증명** (npm + Sigstore, SLSA Build L2; L3 생성기는 로드맵에) |
|
|
288
|
+
| **안정성** | v3.0+ semver 결속 — 모든 CLI 플래그, 도구 이름, MCP 리소스, 프롬프트, 내보낸 심볼이 계약입니다 |
|
|
289
|
+
|
|
290
|
+
전체 자세: **[SECURITY.md](./SECURITY.md)** · 안정성 표면: **[STABILITY.md](./STABILITY.md)** · 취약점: `oomkapwn@gmail.com`.
|
|
291
|
+
|
|
292
|
+
---
|
|
293
|
+
|
|
294
|
+
## ❓ FAQ
|
|
295
|
+
|
|
296
|
+
**Obsidian 설치가 필요한가요?** 아니요. `.md` + `.canvas` + `.pdf`를 직접 읽습니다. 모든 Obsidian 포맷 Vault에서 작동합니다.
|
|
297
|
+
|
|
298
|
+
**내 Vault에 쓰기를 하나요?** `--enable-write`를 전달하지 않는 한 안 합니다. 7개 쓰기 도구는 모두 게이트되어 있으며, 파괴적인 것들은 `dry_run`을 지원합니다.
|
|
299
|
+
|
|
300
|
+
**데이터가 어딘가로 전송되나요?** `enquire-mcp install-model` 때만(HuggingFace에서 ONNX 가중치를 다운로드, 1회). serve 모드는 절대 외부로 나가는 HTTP를 만들지 않습니다. 임베딩 + 리랭커는 로컬 CPU에서 실행됩니다.
|
|
301
|
+
|
|
302
|
+
**성능은요?** FTS5 콜드 빌드: 1k 노트당 ~5초, 50k당 ~30초. BM25 쿼리: 항상 <100ms. 임베딩 빌드: M1에서 청크당 ~30ms. **HNSW top-10: 어떤 규모에서도 10ms 미만.** serve 콜드 스타트: HNSW 영속화 시 ~50ms.
|
|
303
|
+
|
|
304
|
+
**언어는요?** 기본값 `paraphrase-multilingual-MiniLM-L12-v2` (50+ 개 언어). 다국어 크로스 인코더. 러시아어 + 영어 이중 언어 Vault에서 엔드 투 엔드 검증됨. CJK/태국어/크메르어 토큰화는 `Intl.Segmenter`를 통해.
|
|
305
|
+
|
|
306
|
+
**원격 실행이 되나요?** 예 — `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)**를 보세요.
|
|
307
|
+
|
|
308
|
+
---
|
|
309
|
+
|
|
310
|
+
## 🚀 릴리스
|
|
311
|
+
|
|
312
|
+
**v3.0.0 — stable 채널.** v2.x 검색 로드맵이 완성되었고 공개 표면은 이제 [semver로 결속](./STABILITY.md)되었습니다. 하이라이트 모음:
|
|
313
|
+
|
|
314
|
+
`v2.0` 하이브리드 검색 (BM25+TF-IDF+임베딩 via 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` stable · `v3.8.7` HTTP 전송 강화 · **`v3.9.0` stable**: OCR된 PDF 워처 임베딩 동기화, 파일 변경 시 HNSW 인메모리 실시간 업데이트, R-10 적응형 HNSW 리필(>66% 제외 시의 과소 반환 문제 해결). · **`v3.10` stable**: 망각을 인식하는 신선도 — `age_days` + `stale` 플래그 + 선택형 `--recency-weight` 재순위 + frontmatter를 인식하는 `obsidian_search`.
|
|
315
|
+
|
|
316
|
+
채널: `npm install @oomkapwn/enquire-mcp` → 최신 stable (`@latest` = v3.11.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)**.
|
|
317
|
+
|
|
318
|
+
---
|
|
319
|
+
|
|
320
|
+
## 🤝 기여하기
|
|
321
|
+
|
|
322
|
+
```bash
|
|
323
|
+
git clone https://github.com/oomkapwn/enquire-mcp.git
|
|
324
|
+
cd enquire-mcp && npm install
|
|
325
|
+
npm test # 전체 스위트 (1439개 테스트, ~12초)
|
|
326
|
+
npm run lint # 경고 0건
|
|
327
|
+
npm run build # tsc → dist/
|
|
328
|
+
```
|
|
329
|
+
|
|
330
|
+
이슈, PR, 아이디어를 환영합니다. 브랜치 보호는 `main`에서 PR 리뷰를 요구합니다.
|
|
331
|
+
|
|
332
|
+
---
|
|
333
|
+
|
|
334
|
+
## 📜 라이선스
|
|
335
|
+
|
|
336
|
+
MIT. [Alex (@OomkaBear)](https://github.com/oomkapwn)가 만들었습니다. [Tim Berners-Lee의 1980년 WWW 프로토타입](https://en.wikipedia.org/wiki/ENQUIRE)의 이름을 땄습니다 — 웹 이전의, 최초의 하이퍼텍스트 시스템. 원래 사양은 이랬습니다: 당신은 시스템에 무엇이든 물어볼 수 있다. **enquire-mcp는 그것을 당신의 Vault로 가져옵니다.**
|
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) · [Русский](./README.ru.md) · [Português](./README.pt.md) · [Français](./README.fr.md) · [日本語](./README.ja.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) · [한국어](./README.ko.md) · [Deutsch](./README.de.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
|
|
|
@@ -309,7 +309,7 @@ Full posture: **[SECURITY.md](./SECURITY.md)** · Stability surface: **[STABILIT
|
|
|
309
309
|
|
|
310
310
|
**v3.0.0 — stable channel.** The v2.x retrieval roadmap is complete and the public surface is now [semver-bound](./STABILITY.md). Highlight reel:
|
|
311
311
|
|
|
312
|
-
`v2.0` hybrid retrieval (BM25+TF-IDF+embeddings via RRF) · `v2.6` remote MCP · `v2.7-2.8` PDFs blended · `v2.9` BGE reranker · `v2.10` OCR · `v2.11` doctor + setup · `v2.12` eval harness · `v2.13` HNSW · `v2.14` stateful sessions · `v2.15` late-chunking · `v2.16` HNSW persistence · `v2.17` int8 quantization · `v3.8.0` stable · `v3.8.7` HTTP transport hardening · **`v3.9.0` stable**: OCR'd PDF watcher embed-sync, HNSW in-memory live update on file changes, R-10 adaptive HNSW refill (closes the >66% excluded under-return). · **`v3.10`
|
|
312
|
+
`v2.0` hybrid retrieval (BM25+TF-IDF+embeddings via RRF) · `v2.6` remote MCP · `v2.7-2.8` PDFs blended · `v2.9` BGE reranker · `v2.10` OCR · `v2.11` doctor + setup · `v2.12` eval harness · `v2.13` HNSW · `v2.14` stateful sessions · `v2.15` late-chunking · `v2.16` HNSW persistence · `v2.17` int8 quantization · `v3.8.0` stable · `v3.8.7` HTTP transport hardening · **`v3.9.0` stable**: OCR'd PDF watcher embed-sync, HNSW in-memory live update on file changes, R-10 adaptive HNSW refill (closes the >66% excluded under-return). · **`v3.10` stable**: forgetting-aware freshness — `age_days` + `stale` flag + opt-in `--recency-weight` re-ranking + frontmatter-aware `obsidian_search`.
|
|
313
313
|
|
|
314
314
|
Channel: `npm install @oomkapwn/enquire-mcp` → latest stable (`@latest` = v3.11.x). Pre-release: `npm install @oomkapwn/enquire-mcp@rc` (the latest release candidate — see [CHANGELOG.md](./CHANGELOG.md)). Full changelog: **[CHANGELOG.md](./CHANGELOG.md)** · Forward plan: **[ROADMAP.md](https://github.com/oomkapwn/enquire-mcp/blob/main/ROADMAP.md)**.
|
|
315
315
|
|
package/README.pt.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) · [العربية](./README.ar.md) · [Русский](./README.ru.md) · **Português** · [Français](./README.fr.md) · [日本語](./README.ja.md)</sub>
|
|
7
|
+
<sub>[English](./README.md) · [中文](./README.zh.md) · [Español](./README.es.md) · [हिन्दी](./README.hi.md) · [العربية](./README.ar.md) · [Русский](./README.ru.md) · **Português** · [Français](./README.fr.md) · [日本語](./README.ja.md) · [한국어](./README.ko.md) · [Deutsch](./README.de.md)</sub>
|
|
8
8
|
|
|
9
9
|
<sub>**TL;DR para agentes de IA** — servidor MCP que expõe um vault local de markdown do Obsidian para Claude Code, Claude Desktop, Cursor, ChatGPT, Codex e OpenClaw como memória persistente e pesquisável. Recuperação híbrida (BM25 + embeddings de ML + reranker BGE, fundidos via RRF), HNSW + quantização int8, RAG agêntico (HyDE + sub-perguntas), GraphRAG-light, PDFs + OCR, Bases autônomas. Neutro em relação a fornecedores, MIT, zero chamadas à nuvem durante o serve. Instalação: `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
|
|
package/README.ru.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) · [العربية](./README.ar.md) · **Русский** · [Português](./README.pt.md) · [Français](./README.fr.md) · [日本語](./README.ja.md)</sub>
|
|
7
|
+
<sub>[English](./README.md) · [中文](./README.zh.md) · [Español](./README.es.md) · [हिन्दी](./README.hi.md) · [العربية](./README.ar.md) · **Русский** · [Português](./README.pt.md) · [Français](./README.fr.md) · [日本語](./README.ja.md) · [한국어](./README.ko.md) · [Deutsch](./README.de.md)</sub>
|
|
8
8
|
|
|
9
9
|
<sub>**TL;DR для AI-агентов** — MCP-сервер, открывающий локальное Obsidian-хранилище из markdown-файлов для Claude Code, Claude Desktop, Cursor, ChatGPT, Codex и OpenClaw как постоянную поисковую память. Гибридный поиск (BM25 + ML-эмбеддинги + BGE-реранкер, объединённые через RRF), HNSW + int8-квантизация, агентный RAG (HyDE + декомпозиция на подвопросы), GraphRAG-light, PDF + OCR, автономные Bases. Нейтральность к вендору, MIT, ноль обращений в облако в режиме serve. Установка: `npm i -g @oomkapwn/enquire-mcp`. Документация: [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
|
|
package/README.zh.md
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
|
|
5
5
|
# enquire-mcp
|
|
6
6
|
|
|
7
|
-
<sub>[English](./README.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>
|
|
7
|
+
<sub>[English](./README.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) · [한국어](./README.ko.md) · [Deutsch](./README.de.md)</sub>
|
|
8
8
|
|
|
9
9
|
### 最先进的 Obsidian MCP。为 AI 智能体打造的长期记忆。
|
|
10
10
|
|
package/dist/index.d.ts
CHANGED
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
* + `McpServer({version})`) and `src/tool-registry.ts` (used in the
|
|
8
8
|
* `vault-info` resource payload).
|
|
9
9
|
*/
|
|
10
|
-
export declare const VERSION = "3.11.
|
|
10
|
+
export declare const VERSION = "3.11.3-rc.1";
|
|
11
11
|
export { main } from "./cli.js";
|
|
12
12
|
export { buildEmbedText, buildMcpServer, formatReadyBanner, prepareServerDeps, type ServeOptions, type ServerDeps, startServer } from "./server.js";
|
|
13
13
|
export { parsePositiveInt, parseQuantizationMode } from "./tool-registry.js";
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAoCA;;;;;;;GAOG;AACH,eAAO,MAAM,OAAO,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAoCA;;;;;;;GAOG;AACH,eAAO,MAAM,OAAO,gBAAgB,CAAC;AAUrC,OAAO,EAAE,IAAI,EAAE,MAAM,UAAU,CAAC;AAChC,OAAO,EACL,cAAc,EACd,cAAc,EACd,iBAAiB,EACjB,iBAAiB,EACjB,KAAK,YAAY,EACjB,KAAK,UAAU,EACf,WAAW,EACZ,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -40,7 +40,7 @@ import { main } from "./cli.js";
|
|
|
40
40
|
* + `McpServer({version})`) and `src/tool-registry.ts` (used in the
|
|
41
41
|
* `vault-info` resource payload).
|
|
42
42
|
*/
|
|
43
|
-
export const VERSION = "3.11.
|
|
43
|
+
export const VERSION = "3.11.3-rc.1";
|
|
44
44
|
// Re-exports — preserve the v3.5.x public surface so http-transport.ts and
|
|
45
45
|
// tests don't need to know about the new module layout. The set below
|
|
46
46
|
// exactly matches the v3.5.x `export` declarations: `main`,
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA,yEAAyE;AACzE,8EAA8E;AAC9E,EAAE;AACF,sEAAsE;AACtE,uEAAuE;AACvE,qEAAqE;AACrE,kEAAkE;AAClE,kEAAkE;AAClE,EAAE;AACF,kBAAkB;AAClB,iFAAiF;AACjF,2FAA2F;AAC3F,wFAAwF;AACxF,sFAAsF;AACtF,sFAAsF;AACtF,yFAAyF;AACzF,gEAAgE;AAChE,2EAA2E;AAC3E,sEAAsE;AACtE,uFAAuF;AACvF,sFAAsF;AACtF,EAAE;AACF,yEAAyE;AACzE,wBAAwB;AACxB,2EAA2E;AAC3E,yEAAyE;AACzE,6EAA6E;AAC7E,+DAA+D;AAC/D,sFAAsF;AACtF,0EAA0E;AAE1E,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,IAAI,EAAE,MAAM,UAAU,CAAC;AAEhC;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,OAAO,GAAG,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA,yEAAyE;AACzE,8EAA8E;AAC9E,EAAE;AACF,sEAAsE;AACtE,uEAAuE;AACvE,qEAAqE;AACrE,kEAAkE;AAClE,kEAAkE;AAClE,EAAE;AACF,kBAAkB;AAClB,iFAAiF;AACjF,2FAA2F;AAC3F,wFAAwF;AACxF,sFAAsF;AACtF,sFAAsF;AACtF,yFAAyF;AACzF,gEAAgE;AAChE,2EAA2E;AAC3E,sEAAsE;AACtE,uFAAuF;AACvF,sFAAsF;AACtF,EAAE;AACF,yEAAyE;AACzE,wBAAwB;AACxB,2EAA2E;AAC3E,yEAAyE;AACzE,6EAA6E;AAC7E,+DAA+D;AAC/D,sFAAsF;AACtF,0EAA0E;AAE1E,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,IAAI,EAAE,MAAM,UAAU,CAAC;AAEhC;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,OAAO,GAAG,aAAa,CAAC;AAErC,2EAA2E;AAC3E,sEAAsE;AACtE,4DAA4D;AAC5D,6EAA6E;AAC7E,sEAAsE;AACtE,sEAAsE;AACtE,2EAA2E;AAC3E,4EAA4E;AAC5E,OAAO,EAAE,IAAI,EAAE,MAAM,UAAU,CAAC;AAChC,OAAO,EACL,cAAc,EACd,cAAc,EACd,iBAAiB,EACjB,iBAAiB,EAGjB,WAAW,EACZ,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAE7E,4DAA4D;AAC5D,yEAAyE;AACzE,wEAAwE;AACxE,6EAA6E;AAC7E,sDAAsD;AACtD,MAAM,UAAU,GAAG,CAAC,GAAG,EAAE;IACvB,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;QAAE,OAAO,KAAK,CAAC;IACnC,IAAI,CAAC;QACH,oEAAoE;QACpE,mEAAmE;QACnE,wEAAwE;QACxE,2EAA2E;QAC3E,MAAM,IAAI,GAAG,YAAY,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;QAC1D,MAAM,IAAI,GAAG,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;QAC3C,OAAO,IAAI,KAAK,IAAI,CAAC;IACvB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC,CAAC,EAAE,CAAC;AAEL,IAAI,UAAU,EAAE,CAAC;IACf,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,GAAY,EAAE,EAAE;QAC5B,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,kBAAkB,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,IAAI,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAC5G,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC,CAAC,CAAC;AACL,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"$schema": "https://json.schemastore.org/package.json",
|
|
3
3
|
"name": "@oomkapwn/enquire-mcp",
|
|
4
|
-
"version": "3.11.
|
|
4
|
+
"version": "3.11.3-rc.1",
|
|
5
5
|
"mcpName": "io.github.oomkapwn/enquire-mcp",
|
|
6
6
|
"description": "MCP server giving AI agents (Claude Code, Claude Desktop, Cursor, ChatGPT, Codex, OpenClaw) persistent long-term memory backed by your local Obsidian markdown vault. Hybrid retrieval (BM25 + ML embeddings + BGE reranker, RRF-fused), HNSW + int8 quantization, agentic RAG (HyDE + sub-question decomposition), GraphRAG-light (Louvain), standalone Obsidian Bases, PDFs + Tesseract OCR. Vendor-neutral memory layer for any MCP-compatible agent. 46 tools, 19 MCP prompts, 1439 tests, signed npm build provenance (SLSA L2), semver-bound, MIT, zero cloud calls during serve.",
|
|
7
7
|
"type": "module",
|
|
@@ -64,6 +64,8 @@
|
|
|
64
64
|
"README.pt.md",
|
|
65
65
|
"README.fr.md",
|
|
66
66
|
"README.ja.md",
|
|
67
|
+
"README.ko.md",
|
|
68
|
+
"README.de.md",
|
|
67
69
|
"LICENSE",
|
|
68
70
|
"CHANGELOG.md",
|
|
69
71
|
"SECURITY.md",
|