Deterministic, token-minimal agent memory: multi-hop [[wikilink]] recall with no LLM in the loop.
Copy the AI prompt to install this server into Claude Code, Cursor, or another agent β or use 1-click editor setup below.
We haven't yet run this listing's install command through our automated sandbox check. This isn't a red flag β we're steadily working through the catalog.
π‘ Paste the JSON block into your client's configuration file under mcpServers, then restart the application.
wikimoth.com Β· pip install wikimoth
Deterministic, token-minimal, auditable memory for Claude and agents. Point WikiMoth at a
folder of [[wikilink]] notes (an Obsidian vault, or Claude's own memory folder) and it
follows the authored links to the answer flat search can't reach, shows you the exact note-chain
behind it, and feeds the reader ~99% fewer tokens than pasting the whole vault. Pure markdown,
no GPU, no vector DB, no LLM in the retrieval loop.
Already have a [[wikilink]] vault (an Obsidian vault, a notes folder)? Point WikiMoth at it and get the full connect-the-dots view in one command, no capture, no waiting:
Want it to build memory from your Claude Code sessions? Install the capture hooks; each session you run and close is written into a [[wikilink]] vault:
We benchmarked exactly that. An agent that browses the notes folder and prunes its own context reaches the same answers, multi-hop included (12/12 in our run). It just pays for it: 4 to 6 model round-trips and roughly 10x the billed tokens per question, because it re-sends a growing transcript every step. WikiMoth retrieves the same note-chain in one deterministic pass, no model in the loop, and shows you the exact notes behind the answer.
Real run, Claude Sonnet 4.6, 12 multi-hop questions on a reproducible vault. The ~10x counts a
reader on both sides; it is corpus-specific, not a universal law. Reproduce it with
python scripts/run_agentic_benchmark.py. Full breakdown in Honest limits.
Most agent memory is either paste the whole notes folder into context (expensive, and the model
gets lost in the middle) or LLM-summarised similarity search (lossy, and non-deterministic:
the same question can return different memory next week). WikiMoth takes a different bet: your notes
are the store (plain markdown), the graph is authored (your [[wikilinks]], no embeddings
to train or drift), and retrieval is code, not a model, so it's reproducible and you can read
exactly why each note was chosen.
| WikiMoth | BM25 | Vector RAG | claude-mem | LLM Wiki (Karpathy) | |
|---|---|---|---|---|---|
Connects the dots (multi-hop over authored [[links]]) | β | β | β | β | β (agentic) |
| Deterministic retrieval (same query β same result) | β | β | β | β | β |
| No LLM call to retrieve | β | β | β | ~ | β |
| Auditable note-chain (which notes produced the answer) | β | ~ | β | β | ~ |
| Direct-lookup recall@8 (real vault) | 1.00 | 1.00 | 1.00 | ~ | ~ |
| No GPU / no vector DB / no index build | β | β | β | ~ | β |
| Plain-markdown store (open in any editor) | β | ~ | β | β | β |
| Token-minimal vs dumping the vault | β β99% | β β99% | β β99% | β | ~ |
| Deterministic, API-free auto-capture | β | β | β | β | β |
| Hygiene without an LLM (conflicts Β· dupes Β· stale Β· supersede) | β | β | β | ~ | β |
LLM Wiki follows links and skips the vector DB like WikiMoth, but an LLM writes and reads the wiki, so retrieval is agentic (an LLM call per recall, not reproducible), while its curated pages are richer. ~ = partial / not independently benchmarked.
The edge is the combination, not higher recall: WikiMoth matches flat search on the basics and adds connect-the-dots + determinism + an audit trail + a plain-markdown store. See Honest limits for exactly where it ties and where it wins.
WikiMoth shares the substrate Andrej Karpathy's LLM Wiki pattern popularised: plain-markdown
[[wikilink]] notes, no vector DB, but flips the engine. In the LLM-Wiki pattern an LLM
writes and reads the wiki: rich, source-cited pages, but recall is agentic (it costs an LLM
call and the path isn't reproducible). WikiMoth computes the edges in code and retrieves with a
fixed algorithm, no LLM in the loop β the same note-chain every time, reproducible and
auditable. They're complementary, not competing: point WikiMoth at a Karpathy-style wiki and you get
deterministic multi-hop retrieval over it. (We don't claim to be "better" than the LLM Wiki: it
curates richer pages; we retrieve deterministically.)
Swap in a real Claude answer (only touches the API when constructed):
wikimoth serveA zero-dependency local web viewer (pure stdlib, no Flask, no JS framework, no network):
[[wikilink]] graph (the same edges the retriever walks),βN%
vs dumping the whole vault. Retrieval only: no LLM call, no API key, deterministic.Because the store is plain markdown, you can equally open the same vault in Obsidian or VS Code; the viewer is a convenience, not a lock-in.
wikimoth mcpwikimoth serve is for you. The MCP server is for the model: it exposes the same deterministic
retrieval over the Model Context Protocol, so Claude calls it itself instead of you fetching context
by hand.
Step 2 is the check that matters: if python -m wikimoth status prints a status line, then
python -m wikimoth mcp will run for Claude too. Use the same python in all three steps (it is
python3 on some systems); that is the one thing that has to match.
Prefer the Node world, or no Python set up? One line, no toolchain matching:
The wikimoth-mcp launcher finds a Python that has
WikiMoth (or uvx-installs one on the fly), injects the vault path so the server never reads an
empty folder from the client's working directory, and passes the MCP channel through untouched. The
same npx -y wikimoth-mcp works as the server command in any mcpServers config (Claude Desktop,
Cursor, Windsurf); set WIKIMOTH_VAULT to your vault.
Now Claude has a recall(query) tool. Ask it something that lives in your notes and it calls
recall; WikiMoth walks the [[links]] and hands back the exact note-chain (no LLM call to
retrieve, token-minimal, the same result every time), and Claude answers from it. A status tool
reports the connected vault. For any other MCP client, use python -m wikimoth mcp as the server
command (stdio transport); point it at a specific vault with --vault PATH.
python -m wikimoth mcp is the portable form (it runs wherever the package is installed). The bare
wikimoth mcp works too when the console script is on your PATH. It is pure stdlib: a hand-rolled
JSON-RPC 2.0 stdio server, no MCP SDK dependency.
No reviews yet β be the first to share how this listing worked for you.
Showcase your server listing on GitHub or your project documentation. Embed this dynamic SVG badge to highlight official listing status and live engagement.
[](https://allmcps.com/mcp/wikimoth)<a href="https://allmcps.com/mcp/wikimoth"><img src="https://allmcps.com/api/badge/wikimoth?style=directory" alt="Wikimoth on AllMCPs" /></a>