@oomkapwn/enquire-mcp 3.6.1 → 3.6.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (62) hide show
  1. package/CHANGELOG.md +87 -0
  2. package/README.md +6 -6
  3. package/assets/social-preview.png +0 -0
  4. package/dist/bases.d.ts +13 -3
  5. package/dist/bases.d.ts.map +1 -1
  6. package/dist/bases.js +64 -9
  7. package/dist/bases.js.map +1 -1
  8. package/dist/cli.d.ts.map +1 -1
  9. package/dist/cli.js +6 -2
  10. package/dist/cli.js.map +1 -1
  11. package/dist/doctor.d.ts.map +1 -1
  12. package/dist/doctor.js +10 -2
  13. package/dist/doctor.js.map +1 -1
  14. package/dist/dql.d.ts +67 -0
  15. package/dist/dql.d.ts.map +1 -1
  16. package/dist/dql.js +45 -0
  17. package/dist/dql.js.map +1 -1
  18. package/dist/embed-db.d.ts +45 -0
  19. package/dist/embed-db.d.ts.map +1 -1
  20. package/dist/embed-db.js +31 -0
  21. package/dist/embed-db.js.map +1 -1
  22. package/dist/embeddings.d.ts +33 -0
  23. package/dist/embeddings.d.ts.map +1 -1
  24. package/dist/embeddings.js +29 -0
  25. package/dist/embeddings.js.map +1 -1
  26. package/dist/fts5.d.ts +123 -0
  27. package/dist/fts5.d.ts.map +1 -1
  28. package/dist/fts5.js +130 -4
  29. package/dist/fts5.js.map +1 -1
  30. package/dist/hnsw.d.ts.map +1 -1
  31. package/dist/hnsw.js +11 -0
  32. package/dist/hnsw.js.map +1 -1
  33. package/dist/index.d.ts +1 -1
  34. package/dist/index.js +1 -1
  35. package/dist/parser.d.ts +80 -0
  36. package/dist/parser.d.ts.map +1 -1
  37. package/dist/parser.js +48 -0
  38. package/dist/parser.js.map +1 -1
  39. package/dist/server.d.ts +34 -0
  40. package/dist/server.d.ts.map +1 -1
  41. package/dist/server.js +23 -3
  42. package/dist/server.js.map +1 -1
  43. package/dist/tool-registry.js +1 -1
  44. package/dist/tool-registry.js.map +1 -1
  45. package/dist/tools/media.d.ts +1 -1
  46. package/dist/tools/media.js +1 -1
  47. package/dist/tools/meta.d.ts +2 -2
  48. package/dist/tools/meta.js +2 -2
  49. package/dist/tools/search.d.ts +32 -1
  50. package/dist/tools/search.d.ts.map +1 -1
  51. package/dist/tools/search.js +51 -4
  52. package/dist/tools/search.js.map +1 -1
  53. package/dist/tools/write.d.ts +2 -2
  54. package/dist/tools/write.js +2 -2
  55. package/dist/vault.d.ts +179 -0
  56. package/dist/vault.d.ts.map +1 -1
  57. package/dist/vault.js +157 -0
  58. package/dist/vault.js.map +1 -1
  59. package/docs/COMPARISON.md +5 -5
  60. package/docs/QUICKSTART.md +2 -2
  61. package/docs/api.md +11 -11
  62. package/package.json +2 -2
@@ -1,6 +1,6 @@
1
1
  # enquire-mcp vs. other Obsidian MCP servers
2
2
 
3
- There are several MCP servers for Obsidian vaults, and they make very different trade-offs. This document is a side-by-side feature matrix plus an honest "when to pick which" guide, written by the enquire-mcp maintainer. It is intentionally fair-not-sales: each alternative has scenarios where it is the better pick, and those scenarios are called out below. Numbers and feature claims for enquire-mcp are accurate as of v3.5.8 (2026-05-13); claims about the four alternatives are based on their public READMEs as of the same date — please verify against their current state before deciding.
3
+ There are several MCP servers for Obsidian vaults, and they make very different trade-offs. This document is a side-by-side feature matrix plus an honest "when to pick which" guide, written by the enquire-mcp maintainer. It is intentionally fair-not-sales: each alternative has scenarios where it is the better pick, and those scenarios are called out below. Numbers and feature claims for enquire-mcp are accurate as of v3.6.1 (2026-05-15); claims about the four alternatives are based on their public READMEs as of the same date — please verify against their current state before deciding.
4
4
 
5
5
  ## Servers compared
6
6
 
@@ -56,7 +56,7 @@ Notes on the matrix:
56
56
 
57
57
  - **"Limited" for markus on Obsidian-side operations:** it covers a smaller subset of REST endpoints than cyanheads.
58
58
 
59
- - **Tool counts for alternatives** are approximate from public READMEs and may have shifted. enquire-mcp's 44-tool count is exact for v3.5.8 and is verified by the test suite.
59
+ - **Tool counts for alternatives** are approximate from public READMEs and may have shifted. enquire-mcp's 44-tool count is exact for v3.6.1 and is verified by `tests/docs-consistency.test.ts` against `src/tool-manifest.ts` (machine-readable single source of truth, introduced v3.6.0-rc.2).
60
60
 
61
61
  - **License row** is informational, not a recommendation. MIT and Apache-2.0 are both permissive; pick what your org's policy requires.
62
62
 
@@ -233,13 +233,13 @@ This is a rough heuristic, not a verdict. The "when to pick X" sections above ar
233
233
 
234
234
  ## A note on benchmarks
235
235
 
236
- None of these servers (including enquire-mcp) ships a public, reproducible end-to-end retrieval benchmark against a shared Obsidian vault. The +5–10 NDCG@10 figure for the reranker is from the BGE model card on a standard IR benchmark, not from an enquire-mcp-specific eval. If retrieval quality is decisive for you, the only honest answer is **run a small eval against your own vault**. The `bench/` directory in this repo has scaffolding for that.
236
+ As of v3.6.0-rc.4, **enquire-mcp ships public, reproducible end-to-end retrieval benchmarks** at [`docs/benchmarks.md`](./benchmarks.md): a 60-query ablation across 7 stack configurations on a deterministic synthetic Obsidian vault. Reproducible with `npm run bench:retrieval` (4-decimal precision across runs). Headline: `rerank-bge` adds **+24.7 MRR / +15.5 NDCG@10** over plain hybrid. The other alternatives in this matrix do not (as of 2026-05-15) ship comparable public benchmarks. If retrieval quality is decisive, **run our `bench:retrieval` against your own vault**, then run any equivalent eval (or hand-eval) the alternatives provide.
237
237
 
238
238
  ---
239
239
 
240
240
  ## Disclaimer
241
241
 
242
- This is a snapshot as of **2026-05-13**. All five servers are actively developed (or in some cases archived) and the feature matrix will drift. Before making a decision:
242
+ This is a snapshot as of **2026-05-15** (v3.6.1). All five servers are actively developed (or in some cases archived) and the feature matrix will drift. Before making a decision:
243
243
 
244
244
  1. Re-read each alternative's current `README.md` — features land between matrix updates.
245
245
  2. Run each candidate against a sample of your own vault for an hour. Retrieval quality, in particular, is vault-specific and unreliable to compare from feature lists alone.
@@ -247,4 +247,4 @@ This is a snapshot as of **2026-05-13**. All five servers are actively developed
247
247
 
248
248
  Corrections to this document are welcome — open an issue or PR on [`oomkapwn/enquire-mcp`](https://github.com/oomkapwn/enquire-mcp). Specifically: if a row above understates an alternative's capabilities, that's a bug in this doc and we'd like to fix it.
249
249
 
250
- — enquire-mcp maintainer, v3.5.8
250
+ — enquire-mcp maintainer, v3.6.1
@@ -27,7 +27,7 @@ Verify the install:
27
27
  enquire-mcp --version
28
28
  ```
29
29
 
30
- Expected output: the current version string (e.g. `3.5.8`).
30
+ Expected output: the current version string (e.g. `3.6.1`).
31
31
 
32
32
  ## Step 2 — Smoke test (30 seconds)
33
33
 
@@ -139,7 +139,7 @@ The drop-in hybrid config is in [`examples/claude-desktop-hybrid.json`](../examp
139
139
 
140
140
  **`enquire-mcp: command not found`.** The npm global bin directory isn't on your `PATH`. Run `npm config get prefix` to find it, then add `<prefix>/bin` to your `PATH` — or switch to the `npx` form of the Claude Desktop config (see Step 3): `"command": "npx"`, `"args": ["-y", "@oomkapwn/enquire-mcp@latest", "serve", "--vault", "/abs/path"]`.
141
141
 
142
- **`ENOENT` or `unsupported engine` on install.** You're on Node < 20. Run `node --version` to confirm, then upgrade (e.g. via `nvm install 20 && nvm use 20`). enquire-mcp targets Node 20 / 22 / 24 — the CI matrix runs all three.
142
+ **`ENOENT` or `unsupported engine` on install.** You're on Node < 22. Run `node --version` to confirm, then upgrade (e.g. via `nvm install 22 && nvm use 22`). enquire-mcp's CI matrix tests Node 22 + 24 (Node 20 dropped in v3.5.11 `pdfjs-dist@5.7+` requires `>=22.13`; the package's `engines: >=20` is still honored for non-PDF users on the prebuilt `dist/`).
143
143
 
144
144
  **`Error: vault path does not exist`.** Either the path is wrong, or you used `~` instead of the absolute form. MCP clients don't expand `~` — use `/Users/you/MyVault` on macOS/Linux or `C:\Users\you\MyVault` on Windows. Paths containing spaces are fine as long as the JSON string itself is well-formed; no shell escaping needed inside `claude_desktop_config.json`.
145
145
 
package/docs/api.md CHANGED
@@ -1,8 +1,8 @@
1
1
  # enquire — API
2
2
 
3
- **enquire is an MCP server for Obsidian vaults.** 44 MCP tools (33 always-on read + 4 opt-in read + 7 opt-in write); the 4 opt-ins are: 1 via `--persistent-index` (`obsidian_full_text_search`) + 3 via `--diagnostic-search-tools` (the single-ranker `obsidian_search_text` / `obsidian_semantic_search` / `obsidian_embeddings_search` — gated by default in v2.0+ since `obsidian_search` auto-detects + fuses signals). 2 + 1 opt-in MCP resources, 19 MCP prompts. **v3.1.0+ adds `obsidian_hyde_search`** (HyDE-augmented retrieval, Gao et al 2023; agent supplies a synthetic answer, server embeds it for retrieval) plus the `vault_research` (sub-question decomposition) and `vault_synthesis_page` (Karpathy LLM-Wiki synthesis loop) prompts. v2.6.0+ also speaks Streamable HTTP via `serve-http` (bearer auth + rate-limit + CORS). v2.7.0+ indexes PDFs as a separate read tool surface; **v2.8.0+ blends PDF chunks into `obsidian_search` hybrid retrieval** with `--include-pdfs` — every hit carries a `kind: "md" | "pdf"` flag and PDF snippets include `[page: N]` markers for citation. **v2.9.0+ adds BGE cross-encoder reranking** on top of RRF with `--enable-reranker` — typical +5-10 NDCG@10 retrieval-quality boost. **v2.10.0+ adds Tesseract OCR for image-only / scanned PDFs** via `obsidian_ocr_pdf` — completes the PDF retrieval story.
3
+ **enquire is an MCP server for Obsidian vaults.** 44 MCP tools (33 always-on read + 4 opt-in read + 7 opt-in write); the 4 opt-ins are: 1 via `--persistent-index` + `--diagnostic-search-tools` (`obsidian_full_text_search` — needs BOTH flags: persistent-index for the FTS5 index, diagnostic-search-tools to surface it as a single-ranker tool alongside the hybrid default `obsidian_search`) + 3 via `--diagnostic-search-tools` (the single-ranker `obsidian_search_text` / `obsidian_semantic_search` / `obsidian_embeddings_search` — gated by default in v2.0+ since `obsidian_search` auto-detects + fuses signals). 2 + 1 opt-in MCP resources, 19 MCP prompts. **v3.1.0+ adds `obsidian_hyde_search`** (HyDE-augmented retrieval, Gao et al 2023; agent supplies a synthetic answer, server embeds it for retrieval) plus the `vault_research` (sub-question decomposition) and `vault_synthesis_page` (Karpathy LLM-Wiki synthesis loop) prompts. v2.6.0+ also speaks Streamable HTTP via `serve-http` (bearer auth + rate-limit + CORS). v2.7.0+ indexes PDFs as a separate read tool surface; **v2.8.0+ blends PDF chunks into `obsidian_search` hybrid retrieval** with `--include-pdfs` — every hit carries a `kind: "md" | "pdf"` flag and PDF snippets include `[page: N]` markers for citation. **v2.9.0+ adds BGE cross-encoder reranking** on top of RRF with `--enable-reranker` — typical +5-10 NDCG@10 retrieval-quality boost. **v2.10.0+ adds Tesseract OCR for image-only / scanned PDFs** via `obsidian_ocr_pdf` — completes the PDF retrieval story.
4
4
 
5
- > **Channels:** stable v1.x (`@latest` on npm) ships 28 tools no ML embeddings, no hybrid search. **v2.0 beta** (`@beta` on npm) adds `obsidian_search` (hybrid RRF) + `obsidian_embeddings_search` + the `install-model` / `build-embeddings` / `clear-embeddings` subcommands. This document covers the **v2.0 beta** surface.
5
+ > **Channels:** stable v3.6.x (`@latest` on npm) ships 44 tools including `obsidian_search` (hybrid BM25 + TF-IDF + ML embeddings, RRF-fused) with optional BGE cross-encoder reranking, `obsidian_embeddings_search`, `obsidian_hyde_search`, plus the `install-model` / `build-embeddings` / `clear-embeddings` / `setup` / `doctor` / `eval` / `bench` subcommands. The `@rc` dist-tag carries the most recent release candidate. This document covers the **v3.6.x stable** surface.
6
6
 
7
7
  > Versioned dynamically — see [`CHANGELOG.md`](../CHANGELOG.md) for the current release.
8
8
 
@@ -79,7 +79,7 @@ Canonical list of every registered MCP tool. The `Kind` column splits read/write
79
79
  | `--cache-size <n>` | 1024 | LRU cap for parsed-note cache. |
80
80
  | `--persistent-cache` | off | Persist parsed-note cache to disk so cold starts skip re-parsing. **Stores full note bodies — see [Cache & privacy](../README.md#cache--privacy).** |
81
81
  | `--cache-file <path>` | auto | Override the persistent-cache file location. Default: `~/Library/Caches/enquire/<vault-hash>.json` (macOS) or `~/.cache/enquire/<vault-hash>.json` (Linux). |
82
- | `--persistent-index` | off | Maintain a SQLite FTS5 inverted index for sub-100ms BM25-ranked search. Registers `obsidian_full_text_search` + the `obsidian://chunk/{n}/{path}` resource. **Stores chunked note content + tag list + wikilink targets — see [SECURITY.md "Persistent FTS5 index"](../SECURITY.md#persistent-fts5-index-privacy-posture).** |
82
+ | `--persistent-index` | off | Maintain a SQLite FTS5 inverted index for sub-100ms BM25-ranked search. Registers the `obsidian://chunk/{n}/{path}` resource; also registers `obsidian_full_text_search` **when combined with `--diagnostic-search-tools`** (since v3.5.9). **Stores chunked note content + tag list + wikilink targets — see [SECURITY.md "Persistent FTS5 index"](../SECURITY.md#persistent-fts5-index-privacy-posture).** |
83
83
  | `--tokenize <mode>` | `unicode61` | FTS5 tokenize mode. `unicode61` (default; Latin/Cyrillic, removes diacritics) or `trigram` (CJK / mixed-script, ~2x index size). Changing this triggers an automatic index rebuild. |
84
84
  | `--index-file <path>` | auto | Override the FTS5 index file location. Default: `~/Library/Caches/enquire/<vault-hash>.fts5.db` (macOS) or `~/.cache/enquire/<vault-hash>.fts5.db` (Linux). |
85
85
  | `--exclude-glob <pattern...>` | none | Repeatable glob pattern(s) — paths matching any pattern are invisible to every tool and refuse direct reads. Privacy filter (denylist). Supports `*` (within-segment), `**` (cross-segment), `?` (single char). Example: `--exclude-glob '02_Personal/**' '*.private.md'`. |
@@ -111,9 +111,9 @@ Canonical list of every registered MCP tool. The `Kind` column splits read/write
111
111
  | `clear-cache` | `--vault <path>` `[--cache-file <path>]` | Delete the persistent-cache file for the given vault. Useful for purging stale or sensitive content. Returns 0 even if no cache file exists. |
112
112
  | `clear-index` | `--vault <path>` `[--index-file <path>]` | Delete the FTS5 search-index files (`.fts5.db` + WAL/SHM sidecar) for the given vault. Privacy purge for `--persistent-index` users. Returns 0 even if no files exist. |
113
113
  | `index` | `--vault <path>` `[--tokenize <mode>]` `[--index-file <path>]` | Cold-build (or refresh) the FTS5 search index for a vault. Useful before first `--persistent-index serve`. Reports `added`/`updated`/`deleted`/`unchanged` chunk counts. |
114
- | `install-model` (v2.0 beta) | `[alias]` (default `multilingual`) | Pre-download an embedding model so the first MCP call doesn't block on a ~120MB HuggingFace download. Aliases: `multilingual` (Xenova/paraphrase-multilingual-MiniLM-L12-v2, 384-dim, 50+ languages, ~120MB) or `bge` (Xenova/bge-small-en-v1.5, 384-dim, English-only, ~33MB). Models cached under `~/.cache/huggingface/transformers.js/` and reused across vaults. Idempotent. |
115
- | `build-embeddings` (v2.0 beta) | `--vault <path>` `[--embedding-model <alias>]` `[--embed-file <path>]` `[--exclude-glob <pattern...>]` `[--read-paths <pattern...>]` `[--late-chunk-context <chars>]` `[--quantize-embeddings <mode>]` | Cold-build (or refresh) the persistent embedding index for a vault. Required before `obsidian_embeddings_search` and `obsidian_search` (in hybrid mode) are useful. Same paragraph-level chunking as the FTS5 index — chunk identity matches across BM25 and embeddings. Incremental rebuilds via `source_state` mtime tracking. Reports `added`/`updated`/`deleted`/`unchanged` chunk counts. v2.15.0 `--late-chunk-context <chars>` prepends doc title + breadcrumb + neighbor-chunk tails of N chars before embedding (typical 100-200 for +2-5 NDCG@10). v2.17.0 `--quantize-embeddings <mode>` (`f32` default, `int8` for ~4× smaller BLOBs at ≈1-2% recall cost; mode change triggers a full rebuild). |
116
- | `clear-embeddings` (v2.0 beta) | `--vault <path>` `[--embed-file <path>]` | Delete the embedding-index files (`.embed.db` + WAL/SHM sidecar). Idempotent. |
114
+ | `install-model` (v2.0+) | `[alias]` (default `multilingual`) | Pre-download an embedding model so the first MCP call doesn't block on a ~120MB HuggingFace download. Aliases: `multilingual` (Xenova/paraphrase-multilingual-MiniLM-L12-v2, 384-dim, 50+ languages, ~120MB) or `bge` (Xenova/bge-small-en-v1.5, 384-dim, English-only, ~33MB). Models cached under `~/.cache/huggingface/transformers.js/` and reused across vaults. Idempotent. |
115
+ | `build-embeddings` (v2.0+) | `--vault <path>` `[--embedding-model <alias>]` `[--embed-file <path>]` `[--exclude-glob <pattern...>]` `[--read-paths <pattern...>]` `[--late-chunk-context <chars>]` `[--quantize-embeddings <mode>]` | Cold-build (or refresh) the persistent embedding index for a vault. Required before `obsidian_embeddings_search` and `obsidian_search` (in hybrid mode) are useful. Same paragraph-level chunking as the FTS5 index — chunk identity matches across BM25 and embeddings. Incremental rebuilds via `source_state` mtime tracking. Reports `added`/`updated`/`deleted`/`unchanged` chunk counts. v2.15.0 `--late-chunk-context <chars>` prepends doc title + breadcrumb + neighbor-chunk tails of N chars before embedding (typical 100-200 for +2-5 NDCG@10). v2.17.0 `--quantize-embeddings <mode>` (`f32` default, `int8` for ~4× smaller BLOBs at ≈1-2% recall cost; mode change triggers a full rebuild). |
116
+ | `clear-embeddings` (v2.0+) | `--vault <path>` `[--embed-file <path>]` | Delete the embedding-index files (`.embed.db` + WAL/SHM sidecar). Idempotent. |
117
117
 
118
118
  ## Read tools (always registered)
119
119
 
@@ -490,9 +490,9 @@ Pure-JS TF-IDF cosine retrieval. Tokenizes (alphanumeric + hyphen, stop-words fi
490
490
 
491
491
  **Performance:** at 10k notes the cold-build is ~5–10s on Apple silicon (similar to FTS5 cold-build). Warm cosine is sub-100ms. For very large vaults, prefer `--persistent-index` + `obsidian_full_text_search` for raw query latency, and use `obsidian_semantic_search` when BM25 misses.
492
492
 
493
- **Why not embeddings?** TF-IDF cosine ships zero new deps, runs offline, and meaningfully improves over BM25 alone for the related-term case. For ML embeddings see `obsidian_embeddings_search` and `obsidian_search` (v2.0 beta).
493
+ **Why not embeddings?** TF-IDF cosine ships zero new deps, runs offline, and meaningfully improves over BM25 alone for the related-term case. For ML embeddings see `obsidian_embeddings_search` and `obsidian_search` (v2.0+).
494
494
 
495
- ## `obsidian_embeddings_search` _(v2.0 beta — requires `enquire-mcp install-model` + `enquire-mcp build-embeddings`)_
495
+ ## `obsidian_embeddings_search` _(v2.0+ — requires `enquire-mcp install-model` + `enquire-mcp build-embeddings`)_
496
496
 
497
497
  ML-embedding retrieval via [@huggingface/transformers](https://github.com/huggingface/transformers.js) + `paraphrase-multilingual-MiniLM-L12-v2` (default; 384-dim, 50+ languages, runs on CPU). Persistent SQLite vector index next to the FTS5 db. Brute-force cosine top-K (sub-100ms on 50K chunks; HNSW ladder is v2.1 if real users hit that ceiling).
498
498
 
@@ -515,7 +515,7 @@ If the index is missing, the tool returns a clean error pointing at `enquire-mcp
515
515
 
516
516
  **Caveat — token truncation.** The default multilingual model truncates at 128 tokens. The FTS5 chunker produces ~600-1000-token chunks, so the tail of long paragraphs is not embedded. Use the `bge` model (512-token limit) for longer-context English content, or split notes into shorter paragraphs.
517
517
 
518
- ## `obsidian_search` _(v2.0 beta — the new default search tool)_
518
+ ## `obsidian_search` _(v2.0+ — the default search tool)_
519
519
 
520
520
  **Hybrid retrieval via Reciprocal Rank Fusion (Cormack et al, 2009).** Auto-detects every available retrieval signal — BM25 via FTS5, TF-IDF cosine, ML embeddings — and fuses them with RRF (k=60, equal weights). Gracefully degrades with whatever signals are available:
521
521
 
@@ -817,9 +817,9 @@ The note template implements `list`, so MCP clients with a resource browser will
817
817
 
818
818
  Every path argument is resolved relative to the vault root and rejected if it escapes the root via `..`. The server never reads outside the vault.
819
819
 
820
- ## `obsidian_full_text_search` _(opt-in, requires `--persistent-index`)_
820
+ ## `obsidian_full_text_search` _(opt-in, requires `--persistent-index` AND `--diagnostic-search-tools`)_
821
821
 
822
- BM25-ranked full-text search over a SQLite FTS5 inverted index. Sub-100ms on multi-thousand-note vaults. Only registered when the server is started with `--persistent-index`; otherwise use `obsidian_search_text`.
822
+ BM25-ranked full-text search over a SQLite FTS5 inverted index. Sub-100ms on multi-thousand-note vaults. Only registered when the server is started with BOTH `--persistent-index` (FTS5 index lifecycle) AND `--diagnostic-search-tools` (single-ranker surface — the hybrid `obsidian_search` tool is the recommended default); otherwise use `obsidian_search_text`.
823
823
 
824
824
  | Argument | Type | Notes |
825
825
  |----------|-----------------------------------|-----------------------------------------------------------|
package/package.json CHANGED
@@ -1,8 +1,8 @@
1
1
  {
2
2
  "$schema": "https://json.schemastore.org/package.json",
3
3
  "name": "@oomkapwn/enquire-mcp",
4
- "version": "3.6.1",
5
- "description": "The most advanced MCP server for Obsidian vaults. Hybrid retrieval (BM25 + TF-IDF + multilingual ML embeddings, RRF-fused) with BGE cross-encoder reranking, HNSW vector index, int8 quantization, late-chunking, HyDE-augmented retrieval, sub-question decomposition, PDFs (with OCR), Bases (.base query execution, standalone — no Obsidian needed), GraphRAG-light (Louvain wikilink community detection), wikilinks, backlinks, Dataview, frontmatter, canvas. 44 tools, 19 MCP prompts, 5 cross-encoder reranker models, 715 tests, SLSA-3, semver-bound. Works with Claude Code, Claude Desktop, Cursor, ChatGPT custom GPT, Codex, and any MCP client.",
4
+ "version": "3.6.2",
5
+ "description": "The most advanced MCP server for Obsidian vaults. Hybrid retrieval (BM25 + TF-IDF + multilingual ML embeddings, RRF-fused) with BGE cross-encoder reranking, HNSW vector index, int8 quantization, late-chunking, HyDE-augmented retrieval, sub-question decomposition, PDFs (with OCR), Bases (.base query execution, standalone — no Obsidian needed), GraphRAG-light (Louvain wikilink community detection), wikilinks, backlinks, Dataview, frontmatter, canvas. 44 tools, 19 MCP prompts, 5 cross-encoder reranker models, 753 tests, SLSA-3, semver-bound. Works with Claude Code, Claude Desktop, Cursor, ChatGPT custom GPT, Codex, and any MCP client.",
6
6
  "type": "module",
7
7
  "bin": {
8
8
  "enquire-mcp": "dist/index.js"