@oomkapwn/enquire-mcp 3.10.0 → 3.11.0-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 +42 -0
- package/README.ar.md +266 -0
- package/README.es.md +206 -0
- package/README.hi.md +208 -0
- package/README.md +9 -8
- 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 +5 -2
package/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,48 @@
|
|
|
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.1] — 2026-06-22
|
|
6
|
+
|
|
7
|
+
> **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).
|
|
8
|
+
|
|
9
|
+
### Added
|
|
10
|
+
|
|
11
|
+
- **`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)`.
|
|
12
|
+
- **`--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.
|
|
13
|
+
- 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.
|
|
14
|
+
|
|
15
|
+
### Privacy / security
|
|
16
|
+
|
|
17
|
+
- 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.
|
|
18
|
+
- **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".
|
|
19
|
+
- **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`.
|
|
20
|
+
- **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).
|
|
21
|
+
|
|
22
|
+
### Tests (1331)
|
|
23
|
+
|
|
24
|
+
- `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.
|
|
25
|
+
- 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.**
|
|
26
|
+
|
|
27
|
+
### Count cascade (45 → 46)
|
|
28
|
+
|
|
29
|
+
- `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.
|
|
30
|
+
|
|
31
|
+
---
|
|
32
|
+
|
|
33
|
+
## [3.10.1] — 2026-06-22
|
|
34
|
+
|
|
35
|
+
> **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).
|
|
36
|
+
|
|
37
|
+
### Added
|
|
38
|
+
|
|
39
|
+
- **README translations for the top-5 most-spoken languages** (`README.es.md`, `README.hi.md`, `README.ar.md`). Each is a full translation of the English README — badges, links, code blocks, CLI flags, and tool names preserved verbatim; only human prose translated — joining the existing English + Chinese. Arabic is rendered right-to-left (prose wrapped in `dir="rtl"`; the centered hero, badges, code, and tables stay LTR). Every README carries a 5-way switcher `[English] · [中文] · [Español] · [हिन्दी] · [العربية]` with the current language bolded, and all four translations ship in the npm tarball (`package.json` `files[]`).
|
|
40
|
+
|
|
41
|
+
### Tests (1313)
|
|
42
|
+
|
|
43
|
+
- +2 docs-consistency invariants (per the rc.14 "new docs surface → pin it in the same PR" rule): (1) the es/hi/ar stat lines pin the tool count (45) and prompt count (19) EXACTLY and the test count as a drift-proof lower bound (`1311+`), mirroring the rc.30 README.zh.md guard (the Arabic regex matches through the `موجِّه` diacritics); (2) a **5-way switcher cross-link guard** — each README must link the other four and NOT link itself — so a future 6th-language addition can't silently leave the set inconsistent. **1311 → 1313.**
|
|
44
|
+
|
|
45
|
+
---
|
|
46
|
+
|
|
5
47
|
## [3.10.0] — 2026-06-22
|
|
6
48
|
|
|
7
49
|
> **TL;DR:** **v3.10.0 STABLE — promoted `@rc` → `@latest` after 78 RCs.** The forgetting-aware retrieval line + a deep multi-round security/correctness hardening cascade. New: **`obsidian_stale_notes`** (45th tool), `age_days`/`stale` freshness signals on every hit, opt-in recency re-ranking (`--recency-weight`, default off), and **frontmatter-aware `obsidian_search`** (`filter_frontmatter`). Plus the gray-matter→js-yaml@4 frontmatter migration, pdfjs-dist 5→6, and the full closure of the ReDoS / abs-path-leak / NFC-name-resolution / reserve-before-try / resource-DoS-amplifier classes (1 HIGH + many MED/LOW across rc.1→rc.78). **No API breaks** (additive minor; the v3.x tool/argument surface is unchanged). **45 tools · 19 MCP prompts · 1311 unit tests · 11 required + advisory CI gates.**
|
package/README.ar.md
ADDED
|
@@ -0,0 +1,266 @@
|
|
|
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 تطوّراً. ذاكرة طويلة الأمد لوكلاء الذكاء الاصطناعي." width="100%"></a>
|
|
4
|
+
|
|
5
|
+
# enquire-mcp
|
|
6
|
+
|
|
7
|
+
<sub>[English](./README.md) · [中文](./README.zh.md) · [Español](./README.es.md) · [हिन्दी](./README.hi.md) · **العربية**</sub>
|
|
8
|
+
|
|
9
|
+
### أكثر خوادم Obsidian MCP تطوّراً. ذاكرة طويلة الأمد لوكلاء الذكاء الاصطناعي.
|
|
10
|
+
|
|
11
|
+
**كُفّ عن إعادة شرح السياق لـ Claude وCursor وChatGPT وCodex وOpenClaw في كل جلسة. تصبح ملاحظاتك في Obsidian ذاكرةً مشتركةً قابلةً للبحث عبر كل وكيل متوافق مع MCP — معرفتك، وكل نموذج، وتظل ملكاً لك إلى الأبد.**
|
|
12
|
+
|
|
13
|
+
[](https://www.npmjs.com/package/@oomkapwn/enquire-mcp)
|
|
14
|
+
[](./STABILITY.md)
|
|
15
|
+
[](https://slsa.dev/spec/v1.0/levels#build-l2)
|
|
16
|
+
[](https://modelcontextprotocol.io/)
|
|
17
|
+
[](./LICENSE)
|
|
18
|
+
|
|
19
|
+
**[⚡ التثبيت في 30 ثانية](#-البدء-السريع) · [🧠 حالات الاستخدام](#-حالات-الاستخدام) · [📊 قياسات الأداء](./docs/benchmarks.md) · [📖 مرجع API](https://oomkapwn.github.io/enquire-mcp/) · [💬 مقارنة البدائل](./docs/COMPARISON.md)**
|
|
20
|
+
|
|
21
|
+
**Claude Code — سطر واحد:**
|
|
22
|
+
|
|
23
|
+
```bash
|
|
24
|
+
claude mcp add obsidian -- npx -y @oomkapwn/enquire-mcp serve --vault ~/Documents/Obsidian\ Vault
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
</div>
|
|
28
|
+
|
|
29
|
+
> 📌 هذا المستند هو الترجمة العربية لـ [README.md](./README.md) لتسهيل القراءة على المتحدثين بالعربية؛ عند أي اختلاف، **النسخة الإنجليزية هي المرجع** (تُحدَّث مع كل إصدار).
|
|
30
|
+
|
|
31
|
+
---
|
|
32
|
+
|
|
33
|
+
## المشكلة
|
|
34
|
+
|
|
35
|
+
<div dir="rtl" align="right">
|
|
36
|
+
|
|
37
|
+
كل جلسة ذكاء اصطناعي تبدأ من الصفر. تُعيد شرح مشروعك، وقراراتك التصميمية، ونتائج بحث الأسبوع الماضي مراراً وتكراراً. ميزات "الذاكرة" من المزوّدين ([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) تحبس معرفتك في سحابة مزوّد واحد — ثم تنساها من جديد حين تبدّل الأداة. **معرفتك تظل تبدأ من جديد.**
|
|
38
|
+
|
|
39
|
+
</div>
|
|
40
|
+
|
|
41
|
+
## الحل
|
|
42
|
+
|
|
43
|
+
<div dir="rtl" align="right">
|
|
44
|
+
|
|
45
|
+
تصبح مكتبة Obsidian (vault) لديك **ذاكرةً طويلة الأمد دائمة وقابلة للاستعلام** لأي وكيل متوافق مع MCP. تثبيت واحد — وتصير معرفتك متاحةً فوراً من Claude Code وClaude Desktop وCursor وChatGPT custom GPT وCodex وOpenClaw وكل عميل MCP آخر. ملفات markdown صِرفة **تملكها أنت**، مُفهرسة محلياً، يُبحث فيها بكامل حزمة استرجاع المعلومات (IR) الحديثة، وتُستدعى عبر كل جلسة وكل نموذج.
|
|
46
|
+
|
|
47
|
+
**راسخة في النص الأصلي، لا مستخلَصة.** أدوات ذاكرة المحادثات (mem0، Zep، Supermemory، Memobase) *تستخلص* الحقائق من سجلات دردشتك إلى مخزن منفصل لا يمكنك قراءته. أما enquire-mcp فهي العكس: إنها **راسخة في المعرفة التي كتبتها بالفعل** — ملاحظاتك `.md` نفسها، حرفياً، مع الاستشهادات — فالاستدعاء قابل للتدقيق، وقابل للتحرير في أي محرّر، وليس أبداً تلخيصاً ناقصاً لدردشة تتذكرها بالكاد. وبخلاف منصات ذاكرة **الأسطول (fleet-memory)** على جانب الخادم (مخازن سحابية متعددة المستأجرين تعيد صياغة حركة الوكلاء في قاعدة بيانات مشتركة)، فإن enquire **أحادية المستخدم ومحلية أولاً**: مكتبة واحدة تملكها بالكامل ويمكنك قراءتها وتحريرها وحذفها بنفسك، بصفر استدعاءات سحابية أثناء التشغيل (serve).
|
|
48
|
+
|
|
49
|
+
**راسخة — وواعية بالحداثة.** استدعاء حقيقةٍ ما هو نصف المشكلة؛ ومعرفة ما إن كانت لا تزال *صحيحة* هو النصف الآخر. أظهر [معيار Memora](https://arxiv.org/abs/2604.20006) (أبريل 2026) أن أنظمة الذاكرة تفشل بانتظام في إعادة استخدام الحقائق القديمة — فتستدعي ملاحظةً عمرها عام كأنها كُتبت اليوم. ولأن ذاكرة enquire *هي* ملفات markdown الحقيقية لديك، تحمل كل نتيجة بحث `age_days` (العمر بالأيام) وعلامة `stale` (قديمة) مشتقّة من وقت آخر تعديل حيّ للملاحظة، ويمكنك تفعيل الترتيب المرجَّح بالحداثة (`--recency-weight`) لتظهر الملاحظات الأحدث أولاً. معرفتك، واعية بالحداثة — لا كتلة بلا زمن.
|
|
50
|
+
|
|
51
|
+
> **ما الذي يميّز enquire-mcp**:
|
|
52
|
+
> 1. **محايدة تجاه المزوّدين.** ذاكرتك تعيش في ملفات `.md`. انتقل من Claude إلى Cursor — وتأتي ذاكرتك معك.
|
|
53
|
+
> 2. **استرجاع من الطراز الأول.** مزيج من BM25 + تضمينات متعددة اللغات + إعادة ترتيب بمُرمِّز متقاطع BGE، مدموجة عبر RRF، ومُوسَّعة بـ HNSW + تكميم int8. نفس حزمة IR التي قد تبنيها شركة بحث ناشئة — مفتوحة المصدر، في ثنائيّ واحد.
|
|
54
|
+
> 3. **صفر استدعاءات سحابية أثناء التشغيل.** النماذج مخزّنة محلياً (تنزيل لمرة واحدة من HuggingFace). محتوى مكتبتك لا يغادر جهازك أبداً. آمنة للعمل المعزول (air-gap) افتراضياً.
|
|
55
|
+
> 4. **استدعاء واعٍ بالحداثة.** تُبلّغ كل نتيجة عن عمر الملاحظة؛ وإعادة الترتيب الاختيارية بالحداثة تتيح للوكيل تفضيل المعرفة الحديثة ووسم الحقائق القديمة لإعادة التحقق — حدود "الوعي بالنسيان"، مبنيّة على `mtime` الذي تملكه ملفاتك أصلاً.
|
|
56
|
+
|
|
57
|
+
**46 أداة · 19 موجِّه MCP · 1311+ اختبار وحدة · 50+ لغة · إصدار مستقر v3.10.x · مُقيَّد بالـ semver · MIT · إثبات بناء npm (SLSA L2).**
|
|
58
|
+
|
|
59
|
+
</div>
|
|
60
|
+
|
|
61
|
+
---
|
|
62
|
+
|
|
63
|
+
## ⚡ البدء السريع
|
|
64
|
+
|
|
65
|
+
```bash
|
|
66
|
+
npm install -g @oomkapwn/enquire-mcp
|
|
67
|
+
enquire-mcp serve --vault ~/Documents/Obsidian\ Vault
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
<div dir="rtl" align="right">
|
|
71
|
+
|
|
72
|
+
ضَعها في أي عميل MCP:
|
|
73
|
+
|
|
74
|
+
</div>
|
|
75
|
+
|
|
76
|
+
```json
|
|
77
|
+
{
|
|
78
|
+
"mcpServers": {
|
|
79
|
+
"obsidian": {
|
|
80
|
+
"command": "npx",
|
|
81
|
+
"args": ["-y", "@oomkapwn/enquire-mcp", "serve", "--vault", "/path/to/vault"]
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
```
|
|
86
|
+
|
|
87
|
+
<div dir="rtl" align="right">
|
|
88
|
+
|
|
89
|
+
📂 إعدادات جاهزة للاستخدام في [`examples/`](./examples/) — **Claude Desktop** و**Cursor** و**ChatGPT custom GPT** (MCP بعيد عبر HTTP)، إضافةً إلى مجموعة استعلامات نموذجية لأداة التقييم.
|
|
90
|
+
|
|
91
|
+
**تريد القوة الكاملة للاسترجاع الهجين؟** انطلاقة بأمر واحد ودون أي إعداد يدوي:
|
|
92
|
+
|
|
93
|
+
</div>
|
|
94
|
+
|
|
95
|
+
```bash
|
|
96
|
+
enquire-mcp setup --vault <path> # downloads model, builds FTS5 + embed-db
|
|
97
|
+
enquire-mcp serve --vault <path> --persistent-index --enable-reranker --use-hnsw
|
|
98
|
+
enquire-mcp doctor --vault <path> # color-coded ✓/⚠/✗ health check
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
---
|
|
102
|
+
|
|
103
|
+
## 🧠 حالات الاستخدام
|
|
104
|
+
|
|
105
|
+
<div dir="rtl" align="right">
|
|
106
|
+
|
|
107
|
+
**1 — ذاكرة طويلة الأمد لوكلاء الذكاء الاصطناعي.** ضَع مكتبة Obsidian لديك في أي وكيل متوافق مع MCP (Claude Code، Claude Desktop، Cursor، ChatGPT، Codex، OpenClaw). يحصل الوكيل عندها على استدعاء دلاليّ مُتين لكل ملاحظة اجتماع ومُدخل يوميات وسجل بحث ووثيقة قرار كتبتها يوماً — عبر الجلسات والنماذج والمزوّدين. وبخلاف `Claude Memory` أو `ChatGPT Memory`، معرفتك ليست محبوسة في سحابة مزوّد واحد؛ بل تعيش في markdown صِرف تملكه وتهاجر به بحرّية.
|
|
108
|
+
|
|
109
|
+
**2 — قاعدة معرفة شخصية / دماغ ثانٍ.** يُظهر الاسترجاع الهجين الملاحظة الصحيحة لـ*أي* صياغة، في أيٍّ من 50+ لغة. اسأل بالإنجليزية عن مُدخل يوميات بالروسية من قبل عامين، واحصل على النتيجة الصحيحة. تُعيد إضافة Wikilink graph-boost ترتيب الملاحظات الواقعة في قلب رسم معرفتك. ويُظهر GraphRAG-light المجتمعات الموضوعية — لتكتشف روابط نسيت أنك صنعتها. وتندمج ملفات PDF في البحث مع استشهادات `[page: N]`، فتصير الأوراق البحثية ونصوص الاجتماعات ذاكرةً من الدرجة الأولى.
|
|
110
|
+
|
|
111
|
+
**3 — RAG وكيليّ / هندسة سياق.** يكشف `obsidian_search` درجات كل إشارة على حدة، فيرى الوكيل *لماذا* احتلّت كل نتيجة ترتيبها. يُعيد HyDE صياغة الاستعلامات الغامضة إلى إجابات افتراضية ثرية قبل الاسترجاع. ويعالج تفكيك الأسئلة الفرعية الأسئلةَ متعددة القفزات بتقسيمها إلى استعلامات فرعية مستقلة ثم دمج النتائج. وتتيح لك أداة التقييم المدمجة (NDCG / Recall / MRR) قياس جودة الاسترجاع على استعلاماتك أنت، بدل الوثوق بمعايير المزوّدين.
|
|
112
|
+
|
|
113
|
+
</div>
|
|
114
|
+
|
|
115
|
+
---
|
|
116
|
+
|
|
117
|
+
## 🚫 متى لا تكون enquire-mcp الأداة المناسبة
|
|
118
|
+
|
|
119
|
+
<div dir="rtl" align="right">
|
|
120
|
+
|
|
121
|
+
أهداف غير مقصودة بصراحة — اختر شيئاً آخر حين:
|
|
122
|
+
|
|
123
|
+
- **تريد بحثاً حرفياً / بالتعبيرات النمطية.** `ripgrep` / `grep` أسرع وأدق في "ابحث عن هذا الرمز بالضبط". تتألق enquire في الاستدعاء *المفاهيمي* — المرادفات، وعبر اللغات، و"ماذا قلت عن X". استخدم كليهما: `rg` للحرفي، وenquire للمعنى.
|
|
124
|
+
- **معرفتك تعيش في سجلات الدردشة، لا في الملاحظات.** enquire *راسخة* في markdown الذي كتبته بنفسك. أدوات ذاكرة المحادثات (mem0، Zep، Supermemory) التي *تستخلص* الحقائق من نصوص الدردشة إلى مخزن منفصل هي فئة مختلفة — راجع [المقارنة](./docs/COMPARISON.md).
|
|
125
|
+
- **تحتاج بحثاً متعدد المستخدمين / مُستضافاً / مُزامَناً.** enquire محلية أولاً وأحادية المكتبة بحكم التصميم — لا فهرس متعدد المستأجرين على جانب الخادم.
|
|
126
|
+
- **مصادرك ليست Markdown أو PDF.** صيغ `.md` / `.canvas` / `.base` / `.pdf` من الدرجة الأولى؛ أما الصيغ الأخرى فتحتاج تحويلاً أولاً.
|
|
127
|
+
- **تريد واجهة رسومية أو إضافة Obsidian داخل التطبيق.** enquire خادم MCP / CLI بلا واجهة — إنها *تُكمّل* Obsidian ولا تحلّ محلّه. (Smart Connections هو خيار الإضافة داخل التطبيق.)
|
|
128
|
+
- **تحتاج بحثاً دون المليمتر-ثانية عبر ملايين الملاحظات.** يمنح HNSW سرعة top-K دون 10ms على نطاق واسع، لكن enquire موجَّهة للمكتبات الشخصية / الفِرَقية، لا لمجموعات النصوص بحجم الويب.
|
|
129
|
+
|
|
130
|
+
</div>
|
|
131
|
+
|
|
132
|
+
---
|
|
133
|
+
|
|
134
|
+
## 🏆 لماذا هي الأفضل
|
|
135
|
+
|
|
136
|
+
<div dir="rtl" align="right">
|
|
137
|
+
|
|
138
|
+
**ست ميزات لا يملكها أي Obsidian-MCP آخر بتاتاً** (GraphRAG-light، تنفيذ `.base` مستقل، HyDE، تكميم int8، late-chunking، أداة تقييم مدمجة)، **إضافةً إلى حزمة IR الحديثة بأكملها** (BM25 + تضمينات + إعادة ترتيب بمُرمِّز متقاطع + HNSW)، بينما لا يقدّم المنافسون منها سوى واحدة أو اثنتين على الأكثر. مقارنة جنباً إلى جنب:
|
|
139
|
+
|
|
140
|
+
</div>
|
|
141
|
+
|
|
142
|
+
| القدرة | enquire-mcp | Smart Connections | Obsidian-MCP أخرى |
|
|
143
|
+
|---|:---:|:---:|:---:|
|
|
144
|
+
| الاسترجاع الهجين (BM25 + TF-IDF + تضمينات، مدموج بـ RRF) | ✅ | ❌ | ❌ |
|
|
145
|
+
| **إعادة الترتيب بمُرمِّز متقاطع** (BGE، +15.5 NDCG@10 مقاسة) | ✅ | ❌ | ❌ |
|
|
146
|
+
| **فهرس متجهات HNSW** (top-K دون 10ms، مُستديم) | ✅ | ❌ | ❌ |
|
|
147
|
+
| **تكميم المتجهات int8** (حجم embed-db أصغر بنحو الرُّبع) | ✅ | ❌ | ❌ |
|
|
148
|
+
| **بحث دلاليّ متعدد اللغات** (50+ لغة، على الجهاز) | ✅ | 💰 مدفوع | ❌ |
|
|
149
|
+
| **دمج ملفات PDF في البحث الهجين** (استشهادات `[page: N]` + OCR) | ✅ | ❌ | ❌ |
|
|
150
|
+
| **إشارة استرجاع Wikilink graph-boost** | ✅ | ❌ | ❌ |
|
|
151
|
+
| **أداة تقييم جودة الاسترجاع مدمجة** (NDCG، Recall، MRR) | ✅ | ❌ | ❌ |
|
|
152
|
+
| **MCP بعيد** (HTTP + bearer auth + جلسات ذات حالة) | ✅ | ❌ | جزئي |
|
|
153
|
+
| **MCP أصيل** (Claude · Cursor · ChatGPT · Codex · OpenClaw · أي عميل) | ✅ | ❌ Obsidian فقط | متفاوت |
|
|
154
|
+
| **مرشّح خصوصية** مُتحقَّق منه عند كل مسار بحث + كتابة | ✅ | غير منطبق | ❌ |
|
|
155
|
+
| **46 أداة إنتاجية** (34 أداة قراءة دائمة + 4 اختيارية + 7 كتابات محكومة + 1 تغذية راجعة) | ✅ | غير منطبق | متفاوت |
|
|
156
|
+
| **GraphRAG-light** (كشف مجتمعات بمعامل Louvain) | ✅ **حصرياً هنا** | ❌ | ❌ |
|
|
157
|
+
| **تنفيذ استعلام `.base` مستقل** (يعمل دون تشغيل Obsidian) | ✅ **حصرياً هنا** | ❌ | ❌ |
|
|
158
|
+
| **استرجاع HyDE** + تفكيك الأسئلة الفرعية | ✅ **حصرياً هنا** | ❌ | ❌ |
|
|
159
|
+
| **إثبات بناء موقَّع** (npm + Sigstore، SLSA L2) | ✅ | غير منطبق | ❌ |
|
|
160
|
+
| تشغيل مستقل (لا حاجة لإضافة Obsidian) | ✅ | ❌ يتطلب Obsidian | متفاوت |
|
|
161
|
+
| الترخيص | MIT، مجاني | احتكاري، مدفوع | متفاوت |
|
|
162
|
+
|
|
163
|
+
<sub>تستند المقارنة إلى القدرات العلنية لكل مشروع حتى الإصدار المستقر v3.8.x. Smart Connections إضافة Obsidian مدفوعة (لا خادم MCP). ويُقصد بـ"Obsidian-MCP أخرى" خوادم Obsidian-MCP مفتوحة المصدر العلنية على GitHub وقت الكتابة. وتُنشر قياسات الاسترجاع الشاملة لـ enquire-mcp في <a href="./docs/benchmarks.md"><code>docs/benchmarks.md</code></a> — فارق `rerank-bge` المقاس هو +24.7 MRR / +15.5 NDCG@10 مقارنةً بالهجين الصِّرف على استئصال من 60 استعلاماً.</sub>
|
|
164
|
+
|
|
165
|
+
<div dir="rtl" align="right">
|
|
166
|
+
|
|
167
|
+
> ادّعاء استراتيجي: enquire-mcp هي الخلفية مفتوحة المصدر لـ[ويكيات LLM بأسلوب Karpathy](https://gist.github.com/karpathy/442a6bf555914893e9891c11519de94f) فوق مكتبة Obsidian القائمة لديك. معرفة تتراكم، قابلة للتتبّع إلى مصادرها.
|
|
168
|
+
|
|
169
|
+
</div>
|
|
170
|
+
|
|
171
|
+
---
|
|
172
|
+
|
|
173
|
+
## 🏗️ كيف يعمل الاسترجاع
|
|
174
|
+
|
|
175
|
+
<div dir="rtl" align="right">
|
|
176
|
+
|
|
177
|
+
يكتشف `obsidian_search` الإشارات المتاحة تلقائياً ويتراجع بلُطف: BM25 / FTS5 + TF-IDF + تضمينات (HNSW) ← دمج RRF (k=60) ← Wikilink graph-boost (α × الدرجة الداخلة، PageRank مُشخصَن بخطوة واحدة) ← إعادة ترتيب بمُرمِّز متقاطع BGE ← نتائج مرتّبة مع قابلية رصد `per_signal`. تُعيد كل نتيجة `per_signal: { bm25, tfidf, embeddings }`، فترى *لماذا* احتلّت ترتيبها.
|
|
178
|
+
|
|
179
|
+
طبقات يمكن تفعيلها حسب الحاجة:
|
|
180
|
+
|
|
181
|
+
</div>
|
|
182
|
+
|
|
183
|
+
| الطبقة | طريقة التفعيل | ما تحصل عليه |
|
|
184
|
+
|---|---|---|
|
|
185
|
+
| **1** | `serve --vault <path>` | TF-IDF cosine (بلا إعداد، فوري) |
|
|
186
|
+
| **2** | + `--persistent-index` | + BM25 / FTS5 (top-10 دون 100ms) |
|
|
187
|
+
| **3** | + `setup` (تنزيل نموذج + بناء embed-db) | + تضمينات ML متعددة اللغات |
|
|
188
|
+
| **4** | + `--enable-reranker` | + مُرمِّز متقاطع BGE (+15.5 NDCG@10 مقاسة) |
|
|
189
|
+
| **5** | + `--use-hnsw` | + top-K دون 10ms على نطاق ملايين الـ chunks |
|
|
190
|
+
| **6** | + `--include-pdfs` | + دمج ملفات PDF في كل ما سبق |
|
|
191
|
+
| **7** | `serve-http --bearer-token …` | + MCP بعيد (ويب Claude.ai، ChatGPT، Cursor HTTP، الجوال) |
|
|
192
|
+
|
|
193
|
+
---
|
|
194
|
+
|
|
195
|
+
## 🛠️ جميع الأدوات الـ 46
|
|
196
|
+
|
|
197
|
+
<div dir="rtl" align="right">
|
|
198
|
+
|
|
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
|
+
|
|
201
|
+
</div>
|
|
202
|
+
|
|
203
|
+
---
|
|
204
|
+
|
|
205
|
+
## 🛡️ الثقة
|
|
206
|
+
|
|
207
|
+
| الجانب | السياسة |
|
|
208
|
+
|---|---|
|
|
209
|
+
| **الافتراضي** | للقراءة فقط — تتطلب أدوات الكتابة السبع `--enable-write` |
|
|
210
|
+
| **أقل الامتيازات** | يُتيح `--disabled-tools` / `--enabled-tools` كشف أقل سطح ممكن (مثلاً وكيل بحث للقراءة فقط يحصل على `obsidian_search` + `obsidian_read_note` فحسب) |
|
|
211
|
+
| **سلامة المسار** | فحص realpath عند كل قراءة + كتابة؛ ورفض الروابط الرمزية الخارجة عن المكتبة |
|
|
212
|
+
| **مرشّح الخصوصية** | مُتحقَّق منه عند مسارات FTS5 + embed-db + موارد الـ chunk؛ يفشل مغلقاً عند قوائم سماح/حظر فارغة |
|
|
213
|
+
| **نقل HTTP** | مصادقة Bearer (SHA-256 بزمن ثابت + `timingSafeEqual`)، تحديد معدّل لكل token، وCORS صارم |
|
|
214
|
+
| **البناء والإصدار** | نشر على npm + GitHub Release لكل tag · semver · **إثبات بناء موقَّع** (npm + Sigstore، SLSA L2) |
|
|
215
|
+
|
|
216
|
+
<div dir="rtl" align="right">
|
|
217
|
+
|
|
218
|
+
نموذج الأمان الكامل في **[SECURITY.md](./SECURITY.md)** · حدود الاستقرار في **[STABILITY.md](./STABILITY.md)** · للإبلاغ عن الثغرات: `oomkapwn@gmail.com`.
|
|
219
|
+
|
|
220
|
+
</div>
|
|
221
|
+
|
|
222
|
+
---
|
|
223
|
+
|
|
224
|
+
## ❓ أسئلة شائعة
|
|
225
|
+
|
|
226
|
+
<div dir="rtl" align="right">
|
|
227
|
+
|
|
228
|
+
**هل يلزم تثبيت Obsidian؟** لا. يقرأ `.md` + `.canvas` + `.pdf` مباشرةً. يعمل على أي مكتبة بصيغة Obsidian.
|
|
229
|
+
|
|
230
|
+
**هل سيكتب في مكتبتي؟** لا، إلا إذا مرّرت `--enable-write`. أدوات الكتابة السبع كلها محكومة؛ والعمليات الإتلافية تدعم `dry_run`.
|
|
231
|
+
|
|
232
|
+
**هل تُرسَل بياناتي إلى أي مكان؟** فقط عند `enquire-mcp install-model` (تنزيل أوزان ONNX من HuggingFace لمرة واحدة). وضع التشغيل (serve) لا يجري أبداً أي اتصال HTTP خارجي. التضمينات وإعادة الترتيب تعمل محلياً على وحدة المعالجة المركزية.
|
|
233
|
+
|
|
234
|
+
**ما الأداء؟** بناء FTS5 على البارد: نحو 5s/1k ملاحظة، ونحو 30s/50k. استعلام BM25: دائماً <100ms. **HNSW top-10: دون 10ms على أي نطاق.** بدء التشغيل على البارد مع استدامة HNSW: نحو 50ms.
|
|
235
|
+
|
|
236
|
+
**أي اللغات؟** افتراضياً `paraphrase-multilingual-MiniLM-L12-v2` (50+ لغة)، ومُرمِّز متقاطع متعدد اللغات. تجزئة CJK / التايلندية / الخميرية عبر `Intl.Segmenter`.
|
|
237
|
+
|
|
238
|
+
**هل يمكن تشغيلها عن بُعد؟** نعم — يكشف `serve-http` الخادم نفسه عبر [Streamable HTTP](https://modelcontextprotocol.io/specification/2025-06-18/basic/transports#streamable-http). ضَع أمامه Tailscale Funnel أو Cloudflare Tunnel من أجل HTTPS. يعمل مع ويب claude.ai، وChatGPT custom GPT، ووضع Cursor HTTP، وعملاء MCP على الجوال. راجع **[docs/http-transport.md](./docs/http-transport.md)**.
|
|
239
|
+
|
|
240
|
+
</div>
|
|
241
|
+
|
|
242
|
+
---
|
|
243
|
+
|
|
244
|
+
## 🚀 الإصدارات
|
|
245
|
+
|
|
246
|
+
<div dir="rtl" align="right">
|
|
247
|
+
|
|
248
|
+
القناة: `npm install @oomkapwn/enquire-mcp` ← أحدث إصدار مستقر (`@latest` = v3.10.x). الإصدار التجريبي: `npm install @oomkapwn/enquire-mcp@rc` (أحدث مرشّح إصدار). سجل التغييرات الكامل في **[CHANGELOG.md](./CHANGELOG.md)** · خارطة الطريق في **[ROADMAP.md](https://github.com/oomkapwn/enquire-mcp/blob/main/ROADMAP.md)**.
|
|
249
|
+
|
|
250
|
+
</div>
|
|
251
|
+
|
|
252
|
+
## 🤝 المساهمة
|
|
253
|
+
|
|
254
|
+
<div dir="rtl" align="right">
|
|
255
|
+
|
|
256
|
+
البلاغات (issues) وطلبات الدمج (PRs) مرحَّب بها. سير عمل التطوير في **[CONTRIBUTING.md](https://github.com/oomkapwn/enquire-mcp/blob/main/CONTRIBUTING.md)**؛ ودليل المستودع الموجَّه للوكلاء في **[AGENTS.md](https://github.com/oomkapwn/enquire-mcp/blob/main/AGENTS.md)**.
|
|
257
|
+
|
|
258
|
+
</div>
|
|
259
|
+
|
|
260
|
+
## 📜 الترخيص
|
|
261
|
+
|
|
262
|
+
<div dir="rtl" align="right">
|
|
263
|
+
|
|
264
|
+
[MIT](./LICENSE) © Alex (@OomkaBear)
|
|
265
|
+
|
|
266
|
+
</div>
|
package/README.es.md
ADDED
|
@@ -0,0 +1,206 @@
|
|
|
1
|
+
<div align="center">
|
|
2
|
+
|
|
3
|
+
<a href="https://github.com/oomkapwn/enquire-mcp"><img src="./assets/social-preview.png" alt="enquire-mcp — el MCP de Obsidian más avanzado. Memoria a largo plazo para agentes de IA." width="100%"></a>
|
|
4
|
+
|
|
5
|
+
# enquire-mcp
|
|
6
|
+
|
|
7
|
+
<sub>[English](./README.md) · [中文](./README.zh.md) · **Español** · [हिन्दी](./README.hi.md) · [العربية](./README.ar.md)</sub>
|
|
8
|
+
|
|
9
|
+
### El MCP de Obsidian más avanzado. Memoria a largo plazo para agentes de IA.
|
|
10
|
+
|
|
11
|
+
**Deja de reexplicarle el contexto a Claude, Cursor, ChatGPT, Codex y OpenClaw en cada sesión. Tus notas de Obsidian se convierten en una memoria compartida y consultable entre todos los agentes compatibles con MCP: tu conocimiento, cualquier modelo, tuyo para siempre.**
|
|
12
|
+
|
|
13
|
+
[](https://www.npmjs.com/package/@oomkapwn/enquire-mcp)
|
|
14
|
+
[](./STABILITY.md)
|
|
15
|
+
[](https://slsa.dev/spec/v1.0/levels#build-l2)
|
|
16
|
+
[](https://modelcontextprotocol.io/)
|
|
17
|
+
[](./LICENSE)
|
|
18
|
+
|
|
19
|
+
**[⚡ Instalación en 30 segundos](#-inicio-rápido) · [🧠 Casos de uso](#-casos-de-uso) · [📊 Benchmarks](./docs/benchmarks.md) · [📖 Referencia de la API](https://oomkapwn.github.io/enquire-mcp/) · [💬 Comparar alternativas](./docs/COMPARISON.md)**
|
|
20
|
+
|
|
21
|
+
**Claude Code —— en una sola línea:**
|
|
22
|
+
|
|
23
|
+
```bash
|
|
24
|
+
claude mcp add obsidian -- npx -y @oomkapwn/enquire-mcp serve --vault ~/Documents/Obsidian\ Vault
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
</div>
|
|
28
|
+
|
|
29
|
+
> 📌 Este documento es la traducción al español de [README.md](./README.md), para facilitar la lectura a quienes hablan español; ante cualquier discrepancia, **prevalece la versión en inglés** (que se actualiza con cada publicación).
|
|
30
|
+
|
|
31
|
+
---
|
|
32
|
+
|
|
33
|
+
## El problema
|
|
34
|
+
|
|
35
|
+
Cada sesión de IA empieza desde cero. Vuelves a explicar tu proyecto, tus decisiones de diseño, las conclusiones de la investigación de la semana pasada. Las funciones de "memoria" de los proveedores ([Claude Memory](https://www.anthropic.com/news/memory-and-tool-use), [ChatGPT Memory](https://openai.com/index/memory-and-new-controls-for-chatgpt/), la memoria de Cursor) encierran tu conocimiento en la nube de un único proveedor, y lo vuelven a olvidar en cuanto cambias de herramienta. **Tu conocimiento no para de empezar de nuevo.**
|
|
36
|
+
|
|
37
|
+
## La solución
|
|
38
|
+
|
|
39
|
+
Tu bóveda de Obsidian se convierte en **memoria a largo plazo persistente y consultable** para cualquier agente compatible con MCP. Una sola instalación: tu conocimiento queda al instante accesible desde Claude Code, Claude Desktop, Cursor, el GPT personalizado de ChatGPT, Codex, OpenClaw y cualquier otro cliente MCP. Archivos markdown planos **que son tuyos**, indexados localmente, buscados con todo el stack moderno de recuperación de información (IR), y recordados en cada sesión y con cada modelo.
|
|
40
|
+
|
|
41
|
+
**Anclado en tus textos, no extraído.** Las herramientas de memoria conversacional (mem0, Zep, Supermemory, Memobase) *extraen* hechos de tus registros de chat hacia un almacén aparte que no puedes leer. enquire-mcp es lo contrario: está **anclado en el conocimiento que ya escribiste** —tus propias notas `.md`, literales, con citas— de modo que la recuperación es auditable, editable en cualquier editor y nunca un resumen con pérdidas de un chat que recuerdas a medias. Y a diferencia de las plataformas de memoria de ***flota*** del lado del servidor —almacenes en la nube multiinquilino que parafrasean el tráfico de los agentes hacia una base de datos compartida— enquire es **monousuario y local-first**: una única bóveda que posees por completo y que puedes leer, editar y borrar tú mismo, con cero llamadas a la nube durante el servicio.
|
|
42
|
+
|
|
43
|
+
**Anclado —— y consciente de la frescura.** Recordar un hecho es solo la mitad del problema; saber si sigue siendo *cierto* es la otra mitad. El [benchmark Memora](https://arxiv.org/abs/2604.20006) (abril de 2026) mostró que los sistemas de memoria fallan sistemáticamente al reutilizar hechos obsoletos: recuerdan una nota de hace un año como si se hubiera escrito hoy. Como la memoria de enquire *son* tus archivos markdown reales, cada resultado de búsqueda incluye `age_days` (días de antigüedad) y una marca `stale` (obsoleto) derivada de la hora real de última modificación de la nota, y puedes activar el ranking ponderado por recencia (`--recency-weight`) para que las notas más recientes salgan primero. Tu conocimiento, consciente de la frescura, no un bloque atemporal.
|
|
44
|
+
|
|
45
|
+
> **Lo que hace diferente a enquire-mcp**:
|
|
46
|
+
> 1. **Neutral respecto al proveedor.** Tu memoria vive en archivos `.md`. Cambia de Claude a Cursor: tu memoria viaja contigo.
|
|
47
|
+
> 2. **Recuperación de primer nivel.** BM25 híbrido + embeddings multilingües + reranker cross-encoder BGE fusionados mediante RRF, escalados con HNSW + cuantización int8. El mismo stack de IR que montaría una startup de búsqueda, en código abierto y en un solo binario.
|
|
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
|
+
> 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
|
+
|
|
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
|
+
|
|
53
|
+
---
|
|
54
|
+
|
|
55
|
+
## ⚡ Inicio rápido
|
|
56
|
+
|
|
57
|
+
```bash
|
|
58
|
+
npm install -g @oomkapwn/enquire-mcp
|
|
59
|
+
enquire-mcp serve --vault ~/Documents/Obsidian\ Vault
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
Conéctalo a cualquier cliente MCP:
|
|
63
|
+
|
|
64
|
+
```json
|
|
65
|
+
{
|
|
66
|
+
"mcpServers": {
|
|
67
|
+
"obsidian": {
|
|
68
|
+
"command": "npx",
|
|
69
|
+
"args": ["-y", "@oomkapwn/enquire-mcp", "serve", "--vault", "/path/to/vault"]
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
📂 Configuraciones listas para usar en [`examples/`](./examples/) —— **Claude Desktop**, **Cursor**, **GPT personalizado de ChatGPT** (MCP remoto sobre HTTP), además de un conjunto de consultas de ejemplo para el arnés de evaluación.
|
|
76
|
+
|
|
77
|
+
**¿Quieres toda la potencia híbrida?** Puesta en marcha sin fricción, en un comando:
|
|
78
|
+
|
|
79
|
+
```bash
|
|
80
|
+
enquire-mcp setup --vault <path> # descarga el modelo, construye FTS5 + embed-db
|
|
81
|
+
enquire-mcp serve --vault <path> --persistent-index --enable-reranker --use-hnsw
|
|
82
|
+
enquire-mcp doctor --vault <path> # chequeo de salud con código de color ✓/⚠/✗
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
---
|
|
86
|
+
|
|
87
|
+
## 🧠 Casos de uso
|
|
88
|
+
|
|
89
|
+
**1 —— Memoria a largo plazo para agentes de IA.** Conecta tu bóveda de Obsidian a cualquier agente compatible con MCP (Claude Code, Claude Desktop, Cursor, ChatGPT, Codex, OpenClaw). El agente dispone entonces de una recuperación semántica duradera sobre cada nota de reunión, entrada de diario, registro de investigación y documento de decisión que hayas escrito jamás, a través de sesiones, modelos y proveedores. A diferencia de `Claude Memory` o `ChatGPT Memory`, tu conocimiento no queda encerrado en la nube de un proveedor; vive en markdown plano que posees y puedes migrar libremente.
|
|
90
|
+
|
|
91
|
+
**2 —— Base de conocimiento personal / segundo cerebro.** La recuperación híbrida saca a la luz la nota correcta para *cualquier* formulación, en cualquiera de más de 50 idiomas. Pregunta en inglés por una entrada de diario en ruso de hace dos años y obtén el resultado correcto. El graph-boost de wikilinks reordena las notas que están en el centro de tu grafo de conocimiento. GraphRAG-light revela comunidades temáticas: descubre conexiones que olvidaste haber hecho. Los PDF se mezclan en la búsqueda con citas `[page: N]`, de modo que artículos de investigación y transcripciones de reuniones pasan a ser memoria de primera clase.
|
|
92
|
+
|
|
93
|
+
**3 —— RAG agéntico / ingeniería de contexto.** `obsidian_search` expone las puntuaciones por señal para que el agente vea *por qué* se posicionó cada resultado. HyDE reescribe de antemano las consultas vagas en respuestas hipotéticas ricas antes de la recuperación. La descomposición en subpreguntas resuelve preguntas multi-salto dividiéndolas en subconsultas independientes y fusionando los resultados. El arnés de evaluación incorporado (NDCG / Recall / MRR) te permite medir la calidad de recuperación con tus propias consultas en lugar de confiar en los benchmarks del proveedor.
|
|
94
|
+
|
|
95
|
+
---
|
|
96
|
+
|
|
97
|
+
## 🚫 Cuándo enquire-mcp *no* es la herramienta adecuada
|
|
98
|
+
|
|
99
|
+
No-objetivos honestos: recurre a otra cosa cuando:
|
|
100
|
+
|
|
101
|
+
- **Quieres búsqueda literal de cadenas / regex.** `ripgrep` / `grep` es más rápido y exacto para "encuentra este token preciso". enquire brilla en la recuperación *conceptual*: sinónimos, idiomas distintos, "qué dije sobre X". Usa ambos: `rg` para lo literal, enquire para el significado.
|
|
102
|
+
- **Tu conocimiento vive en registros de chat, no en notas.** enquire está *anclado* en el markdown que tú escribiste. Las herramientas de memoria conversacional (mem0, Zep, Supermemory) que *extraen* hechos de transcripciones de chat hacia un almacén aparte son otra categoría: consulta la [comparación](./docs/COMPARISON.md).
|
|
103
|
+
- **Necesitas búsqueda multiusuario / alojada / sincronizada.** enquire es local-first y de una sola bóveda por diseño: sin índice multiinquilino del lado del servidor.
|
|
104
|
+
- **Tus fuentes no son Markdown ni PDF.** `.md` / `.canvas` / `.base` / `.pdf` son de primera clase; otros formatos necesitan conversión previa.
|
|
105
|
+
- **Quieres una GUI o un plugin dentro de Obsidian.** enquire es un servidor MCP / CLI sin interfaz: *complementa* a Obsidian, no lo sustituye. (Smart Connections es la opción de plugin dentro de la app.)
|
|
106
|
+
- **Necesitas búsqueda submilisegundo sobre millones de notas.** HNSW ofrece top-K en menos de 10 ms a gran escala, pero enquire apunta a bóvedas personales / de equipo, no a corpus a escala web.
|
|
107
|
+
|
|
108
|
+
---
|
|
109
|
+
|
|
110
|
+
## 🏆 Por qué es el mejor
|
|
111
|
+
|
|
112
|
+
**Seis funciones que ningún otro Obsidian-MCP tiene en absoluto** (GraphRAG-light, ejecución autónoma de `.base`, HyDE, cuantización int8, late-chunking, arnés de evaluación incorporado), **más todo el stack moderno de IR** (BM25 + embeddings + reranking con cross-encoder + HNSW), del que los competidores ofrecen como mucho uno o dos elementos. Cara a cara:
|
|
113
|
+
|
|
114
|
+
| Capacidad | enquire-mcp | Smart Connections | Otros Obsidian-MCP |
|
|
115
|
+
|---|:---:|:---:|:---:|
|
|
116
|
+
| Recuperación híbrida (BM25 + TF-IDF + embeddings, fusionados con RRF) | ✅ | ❌ | ❌ |
|
|
117
|
+
| **Reranking con cross-encoder** (BGE, +15.5 NDCG@10 medido) | ✅ | ❌ | ❌ |
|
|
118
|
+
| **Índice vectorial HNSW** (top-K en menos de 10 ms, persistido) | ✅ | ❌ | ❌ |
|
|
119
|
+
| **Cuantización vectorial int8** (embed-db ~4× más pequeña) | ✅ | ❌ | ❌ |
|
|
120
|
+
| **Búsqueda semántica multilingüe** (50+ idiomas, en el dispositivo) | ✅ | 💰 de pago | ❌ |
|
|
121
|
+
| **PDF mezclados en la búsqueda híbrida** (citas `[page: N]` + OCR) | ✅ | ❌ | ❌ |
|
|
122
|
+
| **Graph-boost de wikilinks** como señal de recuperación | ✅ | ❌ | ❌ |
|
|
123
|
+
| **Arnés de evaluación de calidad de recuperación incorporado** (NDCG, Recall, MRR) | ✅ | ❌ | ❌ |
|
|
124
|
+
| **MCP remoto** sobre HTTP + autenticación bearer + sesiones con estado | ✅ | ❌ | parcial |
|
|
125
|
+
| **Nativo de MCP** (Claude · Cursor · ChatGPT · Codex · OpenClaw · cualquier cliente) | ✅ | ❌ solo Obsidian | varía |
|
|
126
|
+
| **Filtro de privacidad** verificado en cada ruta de búsqueda + escritura | ✅ | n/d | ❌ |
|
|
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
|
+
| **GraphRAG-light** (detección de comunidades de wikilinks por modularidad de Louvain) | ✅ **solo aquí** | ❌ | ❌ |
|
|
129
|
+
| **Ejecución autónoma de consultas `.base`** (funciona sin Obsidian abierto) | ✅ **solo aquí** | ❌ | ❌ |
|
|
130
|
+
| **Recuperación HyDE** + descomposición en subpreguntas | ✅ **solo aquí** | ❌ | ❌ |
|
|
131
|
+
| **Procedencia de compilación firmada** (npm + Sigstore, SLSA L2) | ✅ | n/d | ❌ |
|
|
132
|
+
| Autónomo (sin necesidad de plugin de Obsidian) | ✅ | ❌ requiere Obsidian | varía |
|
|
133
|
+
| Licencia | MIT, gratis | propietaria, de pago | varía |
|
|
134
|
+
|
|
135
|
+
<sub>Comparación basada en las capacidades públicas de cada proyecto a fecha de la versión estable v3.8.x. Smart Connections es un plugin de pago de Obsidian (no un servidor MCP). "Otros Obsidian-MCP" se refiere a los servidores Obsidian-MCP públicos de código abierto en GitHub en el momento de redactar esto. Los benchmarks de recuperación de extremo a extremo de enquire-mcp se publican en <a href="./docs/benchmarks.md"><code>docs/benchmarks.md</code></a>: el delta medido de `rerank-bge` es +24.7 MRR / +15.5 NDCG@10 frente al híbrido puro en una ablación de 60 consultas.</sub>
|
|
136
|
+
|
|
137
|
+
> Afirmación estratégica: enquire-mcp es el backend de código abierto para [wikis de LLM al estilo Karpathy](https://gist.github.com/karpathy/442a6bf555914893e9891c11519de94f) sobre tu bóveda de Obsidian existente. Conocimiento que se acumula, trazable hasta sus fuentes.
|
|
138
|
+
|
|
139
|
+
---
|
|
140
|
+
|
|
141
|
+
## 🏗️ Cómo funciona la recuperación
|
|
142
|
+
|
|
143
|
+
`obsidian_search` detecta automáticamente las señales disponibles y degrada con elegancia: BM25 / FTS5 + TF-IDF + embeddings (HNSW) → fusión RRF (k=60) → graph-boost de wikilinks (α × grado de entrada, PageRank personalizado de un paso) → reranker cross-encoder BGE → resultados ordenados con observabilidad `per_signal`. Cada resultado devuelve `per_signal: { bm25, tfidf, embeddings }`, para que veas *por qué* se posicionó.
|
|
144
|
+
|
|
145
|
+
Activable por niveles, según lo que necesites:
|
|
146
|
+
|
|
147
|
+
| Nivel | Configuración | Lo que obtienes |
|
|
148
|
+
|---|---|---|
|
|
149
|
+
| **1** | `serve --vault <path>` | Coseno TF-IDF (cero configuración, instantáneo) |
|
|
150
|
+
| **2** | + `--persistent-index` | + BM25 / FTS5 (top-10 en menos de 100 ms) |
|
|
151
|
+
| **3** | + `setup` (descarga el modelo + construye embed-db) | + embeddings multilingües de ML |
|
|
152
|
+
| **4** | + `--enable-reranker` | + cross-encoder BGE (+15.5 NDCG@10 medido) |
|
|
153
|
+
| **5** | + `--use-hnsw` | + top-K en menos de 10 ms a escala de millones de chunks |
|
|
154
|
+
| **6** | + `--include-pdfs` | + PDF mezclados en todo lo anterior |
|
|
155
|
+
| **7** | `serve-http --bearer-token …` | + MCP remoto (web de Claude.ai, ChatGPT, Cursor HTTP, móvil) |
|
|
156
|
+
|
|
157
|
+
---
|
|
158
|
+
|
|
159
|
+
## 🛠️ Las 46 herramientas
|
|
160
|
+
|
|
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
|
+
|
|
163
|
+
---
|
|
164
|
+
|
|
165
|
+
## 🛡️ Confianza
|
|
166
|
+
|
|
167
|
+
| Aspecto | Postura |
|
|
168
|
+
|---|---|
|
|
169
|
+
| **Por defecto** | Solo lectura —— se requiere `--enable-write` para las 7 herramientas de escritura |
|
|
170
|
+
| **Mínimo privilegio** | `--disabled-tools` / `--enabled-tools` exponen una superficie mínima (p. ej. un agente de investigación de solo lectura obtiene solo `obsidian_search` + `obsidian_read_note`) |
|
|
171
|
+
| **Seguridad de rutas** | Comprobación de realpath en cada lectura+escritura; se rechazan los symlinks que salen de la bóveda |
|
|
172
|
+
| **Filtro de privacidad** | Verificado en las rutas de recurso de FTS5 + embed-db + chunk; fail-closed ante listas de permitidos/denegados vacías |
|
|
173
|
+
| **Transporte HTTP** | Autenticación bearer (SHA-256 de tiempo constante + `timingSafeEqual`), límite de tasa por token, CORS estricto |
|
|
174
|
+
| **Publicación de versiones** | npm + GitHub release por cada tag · semver · **procedencia de compilación firmada** (npm + Sigstore, SLSA L2) |
|
|
175
|
+
|
|
176
|
+
Postura completa: **[SECURITY.md](./SECURITY.md)** · Superficie de estabilidad: **[STABILITY.md](./STABILITY.md)** · Vulnerabilidades: `oomkapwn@gmail.com`.
|
|
177
|
+
|
|
178
|
+
---
|
|
179
|
+
|
|
180
|
+
## ❓ Preguntas frecuentes
|
|
181
|
+
|
|
182
|
+
**¿Hace falta tener instalado Obsidian?** No. Lee `.md` + `.canvas` + `.pdf` directamente. Funciona con cualquier bóveda en formato Obsidian.
|
|
183
|
+
|
|
184
|
+
**¿Escribirá en mi bóveda?** No, a menos que pases `--enable-write`. Las 7 herramientas de escritura están restringidas; las destructivas admiten `dry_run`.
|
|
185
|
+
|
|
186
|
+
**¿Se envían datos a algún sitio?** Solo al ejecutar `enquire-mcp install-model` (descarga los pesos ONNX desde HuggingFace, una sola vez). El modo serve nunca realiza HTTP saliente. Los embeddings y el reranker se ejecutan localmente en la CPU.
|
|
187
|
+
|
|
188
|
+
**¿Rendimiento?** Construcción en frío de FTS5: ~5s/1k notas, ~30s/50k. Consulta BM25: siempre <100ms. **HNSW top-10: menos de 10 ms a cualquier escala.** Arranque en frío de serve: ~50ms con persistencia HNSW.
|
|
189
|
+
|
|
190
|
+
**¿Idiomas?** Por defecto `paraphrase-multilingual-MiniLM-L12-v2` (50+ idiomas), cross-encoder multilingüe. Tokenización CJK / tailandés / jemer mediante `Intl.Segmenter`.
|
|
191
|
+
|
|
192
|
+
**¿Ejecución remota?** Sí —— `serve-http` expone el mismo servidor a través de [Streamable HTTP](https://modelcontextprotocol.io/specification/2025-06-18/basic/transports#streamable-http). Ponle delante Tailscale Funnel o Cloudflare Tunnel para HTTPS. Funciona con la web de claude.ai, el GPT personalizado de ChatGPT, el modo HTTP de Cursor y clientes MCP móviles. Consulta **[docs/http-transport.md](./docs/http-transport.md)**.
|
|
193
|
+
|
|
194
|
+
---
|
|
195
|
+
|
|
196
|
+
## 🚀 Publicaciones
|
|
197
|
+
|
|
198
|
+
Canal: `npm install @oomkapwn/enquire-mcp` → última versión estable (`@latest` = v3.10.x). Versión preliminar: `npm install @oomkapwn/enquire-mcp@rc` (el último candidato a versión). Registro de cambios completo en **[CHANGELOG.md](./CHANGELOG.md)** · Hoja de ruta en **[ROADMAP.md](https://github.com/oomkapwn/enquire-mcp/blob/main/ROADMAP.md)**.
|
|
199
|
+
|
|
200
|
+
## 🤝 Cómo contribuir
|
|
201
|
+
|
|
202
|
+
Se agradecen issues y PR. Flujo de trabajo de desarrollo en **[CONTRIBUTING.md](https://github.com/oomkapwn/enquire-mcp/blob/main/CONTRIBUTING.md)**; guía del repositorio orientada a agentes en **[AGENTS.md](https://github.com/oomkapwn/enquire-mcp/blob/main/AGENTS.md)**.
|
|
203
|
+
|
|
204
|
+
## 📜 Licencia
|
|
205
|
+
|
|
206
|
+
[MIT](./LICENSE) © Alex (@OomkaBear)
|