@oomkapwn/enquire-mcp 3.8.1 → 3.8.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -2,6 +2,70 @@
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.8.2] — 2026-05-24
6
+
7
+ > **TL;DR:** **State-driven audit findings — 6 stale-version fixes across CLAUDE.md + docs/api.md + docs/COMPARISON.md.** Post-v3.8.1 full self-audit (using OIA methodology applied broadly) found 6 stale-version references across documentation that survived the v3.6.0→v3.8.1 cascade: CLAUDE.md header still said "v3.7.x maintenance" (we're at v3.8.x stable), backlog status said "before promotion to v3.8.0 stable" (already promoted), docs/api.md said "stable v3.7.x @latest" (npm @latest = 3.8.1 → 3.8.2 with this patch), docs/COMPARISON.md timestamps still pinned to v3.7.0 (2026-05-15). All fixed in this docs-only patch. **No code changes; 872 tests unchanged.**
8
+
9
+ **Patch — state-driven docs refresh.**
10
+
11
+ ### Background
12
+
13
+ After v3.8.1 retraction shipped (overclaim #11), ran a full state-driven sweep of the repo to find other stale fragments. The methodology lesson from v3.7.17 OIA ("internal change-driven sweeps miss state-driven failure modes") was applied broadly: read every doc file as-it-is, verify each claim against current reality.
14
+
15
+ The sweep found 6 findings, all stale-version drift:
16
+ - **A-1 / A-2 / A-3** (MEDIUM): `CLAUDE.md` header and intro paragraph stuck at "v3.7.x maintenance + v3.8.0 architectural" framing. v3.8.0 already shipped + v3.8.1 retraction + v3.8.2 here means current state is "v3.8.x stable maintenance + v3.9.0 architectural deferrals."
17
+ - **A-5** (LOW): `CLAUDE.md` v3.8.x backlog status said "External audit before promotion to v3.8.0 stable" — v3.8.0 already promoted (without audit, overclaim #11), so phrasing should be "External audit STILL OPEN per v3.6.1 (v3.8.0 promoted without it)."
18
+ - **A-7** (MEDIUM): `docs/api.md:5` said "stable v3.7.x (@latest on npm)" — externally visible incorrect claim; npm @latest = 3.8.1 → 3.8.2.
19
+ - **A-8** (LOW): `docs/COMPARISON.md` timestamps at v3.7.0 (intro, table footer, signature) — should reference v3.8.x stable.
20
+
21
+ A-4 (MCP Registry version drift) is separately tracked as a manual action item (requires OAuth re-publish, scheduled for after this RC ships).
22
+
23
+ ### Fixes
24
+
25
+ **`CLAUDE.md` header:**
26
+ - "Project goal — v3.7.x maintenance + v3.8.0 architectural" → "v3.8.x stable maintenance + v3.9.0 architectural"
27
+ - Intro paragraph rewritten to acknowledge v3.8.0 + v3.8.1 shipped, list what v3.8.0 minor delivered, what was deferred to v3.9.0+, and that external audit blocker remains OPEN.
28
+
29
+ **`CLAUDE.md` backlog bullet:**
30
+ - "Remaining v3.8.0 items: ... External audit before promotion to v3.8.0 stable" → "Remaining v3.8.x/v3.9.0 items: ... External audit blocker per v3.6.1 STILL OPEN — v3.8.0 was promoted without it (overclaim #11, retracted v3.8.1)."
31
+
32
+ **`docs/api.md:5`:**
33
+ - "stable v3.7.x (@latest on npm)" → "stable v3.8.x (@latest on npm)"
34
+ - Removed v3.7.0 quality-batch reference; replaced with v3.8.0 minor highlights + v3.8.1 retraction note.
35
+
36
+ **`docs/COMPARISON.md`** (4 sites):
37
+ - Intro paragraph: "accurate as of v3.7.0 (2026-05-15)" → "accurate as of v3.8.x stable (initial 2026-05-15 for v3.7.0; refreshed in v3.8.2 docs patch)"
38
+ - Table footer: "44-tool count is exact for v3.7.x" → "exact for v3.8.x stable"
39
+ - Snapshot date: "snapshot as of 2026-05-15 (v3.7.0)" → "snapshot as of 2026-05-24 (v3.8.x stable; initial v3.7.0 from 2026-05-15)"
40
+ - Signature: "— enquire-mcp maintainer, v3.7.0" → "— enquire-mcp maintainer, v3.8.x stable"
41
+
42
+ ### Why this is a class lesson (not just isolated drift)
43
+
44
+ The v3.8.0 cascade (rc.1 → rc.18) had 18 chances to update these surfaces. None did. **Reason:** my change-driven sweeps only inspect files I'm actively editing in the current RC. Files I'm not touching get a "no drift detected" signal even when they're full of stale current-state claims.
45
+
46
+ This is exactly the failure mode the v3.7.17 OIA walk was added to prevent — but OIA Check 1 (stale version tombstones in src/*.ts file headers) covers only `src/` files, not docs/. The current OIA walk does NOT scan docs/ for version-string staleness.
47
+
48
+ **Backlog item (deferred to v3.8.3+):** extend OIA Check 1 to walk `docs/*.md` and `CLAUDE.md` looking for "v3.X.Y" references that mention current state ("stable v3.X.x", "as of v3.X.Y", "exact for v3.X.x") and compare against current major.minor. Tombstones (`vX.Y.Z added Z`, `vX.Y.Z fix W`) are legitimate history and should not flag. Distinguishing "current claim" from "historical tombstone" is the hard part — likely needs a comment-marker convention.
49
+
50
+ Not blocking v3.8.2: this drift is now refreshed manually. The structural defense is a separate improvement.
51
+
52
+ ### Stats
53
+
54
+ - **872 tests** (unchanged — pure docs patch).
55
+ - 4 files touched: CLAUDE.md, docs/api.md, docs/COMPARISON.md, CHANGELOG.md (this entry).
56
+ - 0 code changes.
57
+ - `npm audit`: 0 vulnerabilities.
58
+ - Dist-tag: `@latest = 3.8.2` after publish (v3.8.1 demoted automatically; users on @latest get 3.8.2).
59
+ - All 9 required CI gates pass locally.
60
+
61
+ ### What's next
62
+
63
+ - **MCP Registry re-publish** (was action item from A-4): bump registry from v3.8.0-rc.13 → v3.8.2 via `mcp-publisher publish`. Requires user OAuth approval (same flow as v3.8.0-rc.13 original publish).
64
+ - **External audit outreach** — blocker per v3.6.1 still open, primary work item.
65
+ - **Backlog**: T-2/T-3/T-4 E2E, OCR watcher embed-sync, HNSW live update, P2-X HTTP lifecycle, Tier C discoverability, OIA Check 1 extension to docs/.
66
+
67
+ ---
68
+
5
69
  ## [3.8.1] — 2026-05-24
6
70
 
7
71
  > **TL;DR:** **Retroactive correction patch (overclaim instance #11).** v3.8.0 STABLE (shipped earlier today) and v3.8.0-rc.18 both referenced a "Cursor external audit" with verdict 4.85/5 as the basis for `@rc → @latest` promotion. **That audit reference was incorrect** — the document was for a different project and was mistakenly applied to enquire-mcp. **The 3 technical fixes in rc.18 remain valid** (server.json version drift was real, terminal `vault.isExcluded` in `searchHybrid` is safe defense-in-depth, OIA workflow ordering doc is useful) — these would have been found by the next internal self-audit regardless. **What is retracted** is the audit attribution narrative and the "first external audit sign-off" claim in the v3.8.0 entry. v3.8.0 STABLE @latest stays on npm (no rollback — users who already installed shouldn't be disrupted, and the codebase quality is independently verifiable via 872 tests + 9 required CI gates + 89.91% coverage). External audit per CLAUDE.md v3.6.1 rule (≥2 independent auditors) is **still pending**; the v3.8.0 promotion was on internal confidence alone, which is documented honestly in this patch. **No code changes; documentation correction only.** 872 tests unchanged.
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.8.1";
10
+ export declare const VERSION = "3.8.2";
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.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.8.1";
43
+ export const VERSION = "3.8.2";
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`,
@@ -1,6 +1,6 @@
1
1
  # enquire-mcp vs. other Obsidian MCP servers
2
2
 
3
- **enquire-mcp positions itself as a long-term memory layer for AI agents, built on an Obsidian vault** — open-source, MCP-native, vendor-neutral, with the strongest retrieval stack in the open-source Obsidian-MCP space (BM25 + TF-IDF + ML embeddings, RRF-fused, BGE cross-encoder reranked, HNSW + int8 quantized). The alternatives below take different trade-offs — some are agent-first, some are Obsidian-plugin-first, some optimize for local-REST-API integration over hybrid retrieval. 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.7.0 (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.
3
+ **enquire-mcp positions itself as a long-term memory layer for AI agents, built on an Obsidian vault** — open-source, MCP-native, vendor-neutral, with the strongest retrieval stack in the open-source Obsidian-MCP space (BM25 + TF-IDF + ML embeddings, RRF-fused, BGE cross-encoder reranked, HNSW + int8 quantized). The alternatives below take different trade-offs — some are agent-first, some are Obsidian-plugin-first, some optimize for local-REST-API integration over hybrid retrieval. 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.8.x stable (initial snapshot 2026-05-15 for v3.7.0; refreshed to v3.8.x in v3.8.2 docs patch); claims about the four alternatives are based on their public READMEs as of the same dates — 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.7.x 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).
59
+ - **Tool counts for alternatives** are approximate from public READMEs and may have shifted. enquire-mcp's 44-tool count is exact for v3.8.x stable 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
 
@@ -239,7 +239,7 @@ As of v3.6.0-rc.4, **enquire-mcp ships public, reproducible end-to-end retrieval
239
239
 
240
240
  ## Disclaimer
241
241
 
242
- This is a snapshot as of **2026-05-15** (v3.7.0). 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-24** (v3.8.x stable; initial v3.7.0 snapshot from 2026-05-15). 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-15** (v3.7.0). All five servers are actively
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.7.0
250
+ — enquire-mcp maintainer, v3.8.x stable
package/docs/api.md CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  **enquire is the most advanced Obsidian MCP — a long-term memory layer for AI agents, built on your Obsidian vault.** Open-source, MCP-native, vendor-neutral persistence: agents (Claude Code / Claude Desktop / Cursor / ChatGPT / Codex / OpenClaw / any MCP client) get durable, queryable recall across sessions, models, and providers — your knowledge lives in plain markdown you own, not a vendor cloud. 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 v3.7.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` subcommands. The `@rc` dist-tag carries the most recent release candidate. Benchmarks live behind `npm run bench:retrieval` (not a CLI subcommand). This document covers the **v3.7.x stable** surface — see [CHANGELOG.md](../CHANGELOG.md) for the v3.7.0 quality batch that closed the post-v3.6.4 audit cycle (K-1 class structurally enforced at 4 levels, ~20× faster search hot path via peek caching, per-file branch coverage floors, GitHub repo metadata invariant).
5
+ > **Channels:** stable v3.8.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` subcommands. The `@rc` dist-tag carries the most recent release candidate. Benchmarks live behind `npm run bench:retrieval` (not a CLI subcommand). This document covers the **v3.8.x stable** surface — see [CHANGELOG.md](../CHANGELOG.md) for the v3.8.0 minor (K-3 readOnlyHint invariant, R-7 watcher embed-db sync, Tier A/B AI/LLM discoverability, 8 new structural invariants) and v3.8.1 retraction (overclaim instance #11 incorrectly-attributed external audit).
6
6
 
7
7
  > Versioned dynamically — see [`CHANGELOG.md`](../CHANGELOG.md) for the current release.
8
8
 
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.8.1",
4
+ "version": "3.8.2",
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. 44 tools, 19 MCP prompts, 872 tests, SLSA-3, semver-bound, MIT, zero cloud calls during serve.",
7
7
  "type": "module",