QMD
QMD is a local-first mini CLI search engine for docs, knowledge bases, meeting notes, and other text. It combines BM25 full-text search, vector semantic search, and LLM re-ranking while running on-device via node-llama-cpp with GGUF models.
Visit tobi/qmdOverview
QMD is an on-device search engine for retrieving content from markdown notes, meeting transcripts, documentation, and knowledge bases. It supports keyword and natural language search with BM25 full-text search, vector semantic search, and LLM re-ranking, all running locally via node-llama-cpp with GGUF models.
Key Features
- Hybrid search combines BM25 full-text search, vector semantic search, and LLM re-ranking.
- Runs locally on-device using node-llama-cpp and GGUF models.
- Indexes collections of markdown notes, meeting transcripts, documentation, and knowledge bases.
- Supports keyword and natural language queries through search, vsearch, and query commands.
- Provides an MCP server with query, get, multi_get, and status tools for agent integration.
- Offers a Node.js and Bun SDK for embedding search in applications.
Use Cases
- Search personal notes, meeting transcripts, documentation, and knowledge bases from the command line.
- Feed structured search results to AI agents and LLM workflows via JSON and file output.
- Add local document retrieval to Node.js or Bun applications with the SDK.
- Enable MCP clients such as Claude Desktop or Claude Code to query local indexed content.
Getting Started
- Install globally with npm install -g @tobilu/qmd or bun install -g @tobilu/qmd, or run directly with npx @tobilu/qmd or bunx @tobilu/qmd.
- Create collections for notes, docs, and meeting transcripts using qmd collection add, then add context with qmd context add.
- Generate embeddings with qmd embed, and search using qmd search for keywords, qmd vsearch for semantic search, or qmd query for hybrid search with reranking.
- Configure an MCP client to run qmd mcp, or start the HTTP transport with qmd mcp --http.
Deployment & Requirements
- Node.js version 22 or higher.
- Bun version 1.0.0 or higher.
- On macOS, Homebrew SQLite for extension support.
- Local GGUF models are auto-downloaded on first use from HuggingFace and cached; default models include embeddinggemma-300M-Q8_0, qwen3-reranker-0.6b-q8_0, and qmd-query-expansion-1.7B-q4_k_m.
- The embedding model requires re-indexing with qmd embed -f when switching models, because vectors are not cross-compatible.
Before You Adopt
- License: MIT. Review its terms before using, modifying, or distributing the project.
- The HTTP MCP server is unauthenticated, so users must add their own authentication before exposing it off-host.
- AST-aware chunking depends on optional tree-sitter grammars.
- MCP tool parameters are not strictly validated, so unknown parameters are silently ignored.