Loading…
Loading…
Helping you or your AI assistant find relevant information in saved notes, even when you don’t remember the exact wording.
An MCP server that searches Markdown notes locally.
Technical detailsYou remember there was a plan for the launch, but not how it was written. Dewey finds the saved passage. Open the source note to see where it came from.
3 recorded results for Who gets to try it first?.
Search your saved notes
“Who gets to try it first?”
The question finds the saved launch plan about invited testers, even though the note uses different words.
Passage Dewey found
Start with a small group of invited testers. Open registration after reviewing their feedback.
Source · launch-plan.md · line 2
# Launch plan
Start with a small group of invited testers. Open registration after reviewing their feedback.
These lower-ranked notes are unrelated to the query. They are included in the recorded output.
Passage Dewey found
The team meets on Tuesday mornings. Add discussion topics to the shared agenda.
Source · meeting-notes.md · line 2
# Meeting notes
The team meets on Tuesday mornings. Add discussion topics to the shared agenda.
Passage Dewey found
Use a dark background and coral accents. Keep buttons large enough to tap on a phone.
Source · design-notes.md · line 2
# Design notes
Use a dark background and coral accents. Keep buttons large enough to tap on a phone.
Recorded . These are saved results, not a live search. Each search uses its own set of fictional notes.
Dewey grew out of the search I needed in Mission Control, my personal dashboard. I wanted to find relevant information quickly, even when I remembered the idea but not the words I had used.
I made it a separate tool so it could work with any folder of Markdown notes, the plain text files used by apps such as Obsidian. You can search them yourself or connect an AI assistant. It works without my dashboard or a particular note-taking app.
Dewey returns passages from your notes with their source. When an assistant uses Dewey, the assistant reads those passages and writes the answer. Dewey itself finds the material and leaves your notes unchanged.
MCP stands for Model Context Protocol. It gives an assistant a standard way to use tools. Dewey provides tools for searching and reading notes, so the assistant can look up information in a folder you choose. The same search is available through a command line and a TypeScript library.
This supplies the retrieval part of retrieval-augmented generation, or RAG, where an assistant looks up source material to help answer a question. The assistant decides what to search for, what to read and how to answer. Dewey has no generative language model or agent planner. A relevant passage alone doesn't prove an answer is right.
Local multilingual E5 embeddings represent the question and note passages as numbers, so they can be compared by meaning. BM25 looks for matching words, which helps when the query contains something precise like LANTERN-42.
I combine their rankings with reciprocal rank fusion, or RRF. It uses result positions without needing to convert the two systems' different scores to the same scale.
Inside Dewey
Combine the rankings with RRF
Source passages, paths and line numbers
Dewey reads Markdown and keeps a rebuildable SQLite index outside the notes folder. It never edits the notes. Searches report how far the index is behind, and a separate check prioritizes older notes with links pointing to them. Retrieval runs locally after the model download. A cloud assistant can still send the passages it receives to its provider.
An optional bge-reranker-base model reads each candidate alongside the query and can change the order. In a run on 5 September 2026, I tested 51 questions against 957 private notes. Both settings found an expected note among the first five results for 74.5% of questions. That measure is called recall@5.
| Search setting | Expected note in first five | Median query time |
|---|---|---|
| Default hybrid search | 74.5% | 10 ms |
| With reranking | 74.5% | 2,084 ms |
Those times exclude model warm-up. Reranking stays off by default because the extra wait didn't improve this result. The private run can't be reproduced from the public repository, and the fictional example above isn't a benchmark. I include the measurement tools so people can check their own notes. The result depends on the questions, the notes and the model runtime.
Read the source and benchmark method on GitHub (opens in a new tab)