My notes have lived in Trilium for years. Over the last few weeks they became something Claude works in too: it reads them before it answers, files what we figure out, and turns the articles I save into a wiki. This post is the map: which pieces there are, how they fit together, and where each one has its own post.
flowchart LR
me["Me: browser, phone"] -- "save + tag" --> kk["Karakeep"]
kk -- "tagged bookmarks" --> sync["karakeep-trilium-sync"]
claude["Claude: Code, claude.ai, apps"] -- "MCP, OAuth login" --> proxy["trilium-mcp-proxy"]
claude -- "recall" --> recall["trilium-recall"]
subgraph T["Trilium"]
mcp["built-in MCP server"]
src["Sources"]
wiki["Wiki"]
end
proxy --> mcp
recall -. "reads" .-> T
sync --> src
mcp -- "ingest" --> wiki
The pieces
| Piece | What it does |
|---|---|
| Trilium 0.106+ | The notes. Since 0.106 it has its own MCP server, so any MCP client can search, read and write them. |
| trilium-mcp-proxy | Puts an OAuth login in front of that server: add one URL to claude.ai or Claude Code and log in with your Trilium password, no token to paste. |
| trilium-recall | A search index next to Trilium (keywords plus embeddings, German and English) that hands Claude what the notes already know, before it starts guessing. |
| trilium-llm-wiki | A Claude Code plugin that builds and maintains an LLM wiki inside Trilium, following Karpathy’s pattern. |
| trilium-plugin | Claude Code skills for everyday notes: search, create, move, tag, templates, journal, export. |
| karakeep-trilium-sync | Copies bookmarks I tag trilium in Karakeep into the wiki’s Sources every 15 minutes. |
All of them are open source (AGPL-3.0-or-later) and run as small containers next to Trilium, or as plugins in Claude Code.
How knowledge gets in
- Collect. I save an article to Karakeep and tag it
trilium. Reddit posts I save get the tag automatically. - Sync. A few minutes later it is a read-only source note in Trilium.
- Ingest. I tell Claude “ingest”. It reads the source, writes a summary, updates the concept and entity pages it touches and logs the change in the day note. The rules for all of that live in a schema note in Trilium, so I change the wiki’s conventions by editing a note.
- Adopt. At the end of a work session Claude offers to file what we found: a decision, a fix, how a system actually behaves. Most of my wiki comes from this, not from articles.
- Review. Everything Claude writes is a draft marked AI-assisted until I set it to reviewed.
How it gets back out
Connecting Claude to Trilium isn’t enough: a model rarely stops to ask “do my notes know something about this?”. trilium-recall closes that gap. In Claude Code a prompt hook checks every prompt against the index and adds up to three short passages when the notes have something, and nothing when they don’t. On claude.ai the same engine is an MCP server whose instructions tell Claude when to look. In practice this is what makes the rest worth it: I speak a rough request (“the server from yesterday”, “like we did for the other repo”) and Claude starts from what I already wrote down.
What changed this week
- Trilium’s own MCP server replaced mine. My ETAPI-based trilium-mcp is archived; the plugins now use the built-in tools, and trilium-mcp-proxy only adds the login.
- trilium-recall became its own project, because it indexes all of Trilium, not only the wiki. Since 0.6.0 adding its URL to a client is the whole setup.
- Release notes land here. Every release of these projects now posts its notes to this feed automatically.
Where to read more
- trilium-recall: Claude remembers what you wrote in Trilium
- An LLM wiki in Trilium
- trilium-mcp-proxy: log in to Trilium’s MCP server with your password
Follow along with the RSS feed.