finds.dev

tobi/qmd

mini cli search engine for your docs, knowledge bases, meeting notes, whatever. Tracking current sota approaches while being all local

View on GitHub

★ 30,610TypeScriptMITupdated Oct 2026

// the take

QMD is a local-first search engine for markdown notes, docs, and meeting transcripts, combining BM25 full-text search, vector embeddings, and LLM reranking, all running on-device through node-llama-cpp. It's aimed at developers who want a searchable personal/team knowledge base without sending content to a cloud API, and it ships a CLI, an SDK, and an MCP server so agents (Claude Code, Claude Desktop) can query it directly.

The RRF fusion strategy is actually reasoned through rather than just bolted on: a top-rank bonus protects exact matches from being diluted by expanded queries, and the reranker's weight increases for lower-ranked candidates instead of being applied uniformly. The HTTP MCP transport validates Origin and Host headers against DNS rebinding, which is a real threat model most localhost tools ignore entirely. The metadata filter is a genuinely typed AST (no implicit coercion, explicit case-insensitive text operators, set semantics for array fields) rather than a half-done query-string hack. The trust model for project-local `.qmd/index.yml` is notable: it gates update-hook commands, out-of-project paths, and custom model URIs behind explicit approval, and silently skips them for non-interactive callers (agents, CI) instead of running an untrusted repo's shell command on checkout.

Everything runs through local GGUF models, so a cold start pays for ~2GB of downloads and every hybrid query costs two extra LLM calls (query expansion, then reranking) — CPU-only machines will feel this, and the embedding/reranker models get unloaded after 5 minutes idle with a recreate penalty on the next request. Query quality depends on a custom fine-tuned 1.7B expansion model hosted on the maintainer's own HuggingFace repo; if that artifact regresses or disappears, hybrid search degrades with it and there's no fallback path described. The HTTP MCP server is explicitly unauthenticated beyond origin/host checks — multi-user or networked use means building your own auth layer, which the docs just punt on. It's a single-maintainer project with a large surface area to keep up (CLI, SDK, MCP stdio and HTTP, a fine-tuning pipeline, three model roles), which is a lot of moving parts for one person to carry long-term.

We read the README, the directory tree and a key source file in October 2026. Nobody pays to be listed. How we judge →

// at a glance

Stars
30,610
Forks
1,926
Language
TypeScript
License
MIT
Last commit
15 Oct 2026

// nearby

If qmd isn't quite it.

All repos →