QMD

Lets an assistant search and read your local markdown notes and docs with on-device hybrid search

By Tobias Lütke (individual) TypeScript Local · stdio Knowledge and memoryWeb search

102 popularity score ★ 31k ↓ 65k/wk

Connect your client

Local (npm)

Add in one click

Opens the app, which asks before it adds the server.

Or add it by command or config

Claude CodeTerminal
claude mcp add qmd -- npx -y @tobilu/qmd mcp
Claude Desktopclaude_desktop_config.json
{
  "mcpServers": {
    "qmd": {
      "command": "npx",
      "args": [
        "-y",
        "@tobilu/qmd",
        "mcp"
      ]
    }
  }
}
Cursor~/.cursor/mcp.json
{
  "mcpServers": {
    "qmd": {
      "command": "npx",
      "args": [
        "-y",
        "@tobilu/qmd",
        "mcp"
      ]
    }
  }
}
VS Code.vscode/mcp.json
{
  "servers": {
    "qmd": {
      "type": "stdio",
      "command": "npx",
      "args": [
        "-y",
        "@tobilu/qmd",
        "mcp"
      ]
    }
  }
}
Codex~/.codex/config.toml
[mcp_servers.qmd]
command = "npx"
args = ["-y", "@tobilu/qmd", "mcp"]
Gemini CLITerminal
gemini mcp add --scope user qmd npx -- -y @tobilu/qmd mcp

Settings 4

QMD_EMBED_MODEL Optional: Override the default embedding model (HuggingFace GGUF URI).
QMD_HOST Optional: Bind address for the HTTP transport (default localhost).
QMD_ALLOWED_ORIGINS Optional: Extra origins the HTTP server accepts besides loopback; * disables the check.
QMD_ALLOWED_HOSTS Optional: Extra Host values the HTTP server accepts besides loopback and the bind address.

What it does

QMD (Query Markup Documents) is an on-device search engine for markdown notes, meeting transcripts, documentation and knowledge bases. It combines BM25 full-text search, vector semantic search and LLM re-ranking, all running locally through node-llama-cpp with GGUF models.

You add folders as named collections with the qmd command line, optionally attach context descriptions to them, and generate embeddings. The same tool exposes an MCP server (qmd mcp) so an assistant can run typed searches (keyword, vector and HyDE sub-queries fused and reranked), fetch documents by path or docid, batch-retrieve by glob, check index status and discover metadata keys to filter on.

By default the MCP server runs over stdio as a subprocess of each client. It can also run as a long-lived HTTP server (qmd mcp --http, localhost:8181/mcp by default) so the models are loaded once and shared. It needs Node or Bun; on macOS the README asks for Homebrew SQLite. Three GGUF models are downloaded from HuggingFace on first use and cached locally.

Tools 5

query
Search with typed sub-queries (lex/vec/hyde), combined via RRF and reranking
get
Retrieve a document by path or docid, with fuzzy matching suggestions
multi_get
Batch retrieve by glob pattern, comma-separated list, or docids
status
Index health and collection info, including each collection's top metadata keys
metadata
Discover metadata keys, types and value counts to filter on

Similar servers